#ifndef RPMDAV_H #define RPMDAV_H /** \ingroup rpmio * \file rpmio/rpmdav.h */ #if defined(_RPMDAV_INTERNAL) struct __dirstream { int fd; /* File descriptor. */ char * data; /* Directory block. */ size_t allocation; /* Space allocated for the block. */ size_t size; /* Total valid data in the block. */ size_t offset; /* Current offset into the block. */ off_t filepos; /* Position of next entry to read. */ pthread_mutex_t lock; /* Mutex lock for this structure. */ }; #endif #if !defined(DT_DIR) || defined(__APPLE__) # define DT_UNKNOWN 0 # define DT_FIFO 1 # define DT_CHR 2 # define DT_DIR 4 # define DT_BLK 6 # define DT_REG 8 # define DT_LNK 10 # define DT_SOCK 12 # define DT_WHT 14 typedef struct __dirstream * AVDIR; typedef struct __dirstream * DAVDIR; #else typedef DIR * AVDIR; typedef DIR * DAVDIR; #endif /** */ /*@unchecked@*/ extern int avmagicdir; #define ISAVMAGIC(_dir) (!memcmp((_dir), &avmagicdir, sizeof(avmagicdir))) /** */ /*@unchecked@*/ extern int davmagicdir; #define ISDAVMAGIC(_dir) (!memcmp((_dir), &davmagicdir, sizeof(davmagicdir))) #ifdef __cplusplus extern "C" { #endif /** * Close an argv directory. * @param dir argv DIR * @return 0 always */ int avClosedir(/*@only@*/ DIR * dir) /*@globals fileSystem @*/ /*@modifies dir, fileSystem @*/; /** * Return next entry from an argv directory. * @param dir argv DIR * @return next entry */ /*@dependent@*/ /*@null@*/ struct dirent * avReaddir(DIR * dir) /*@globals fileSystem @*/ /*@modifies fileSystem @*/; /** * Create an argv directory from URL collection. * @param path URL for collection path * @return argv DIR */ /*@null@*/ DIR * avOpendir(const char * path) /*@globals fileSystem, internalState @*/ /*@modifies fileSystem, internalState @*/; /** * Send a http request. * @param ctrl * @param httpCmd http command * @param httpArg http command argument (NULL if none) * @returns 0 on success */ int davReq(FD_t ctrl, const char * httpCmd, /*@null@*/ const char * httpArg) /*@globals fileSystem, internalState @*/ /*@modifies ctrl, fileSystem, internalState @*/; /** * Read a http response. * @param u * @param cntl * @retval *str error msg * @returns 0 on success */ int davResp(urlinfo u, FD_t ctrl, /*@out@*/ /*@null@*/ char *const * str) /*@globals fileSystem, internalState @*/ /*@modifies ctrl, *str, fileSystem, internalState @*/; /** */ /*@null@*/ FD_t davOpen(const char * url, /*@unused@*/ int flags, /*@unused@*/ mode_t mode, /*@out@*/ urlinfo * uret) /*@globals internalState @*/ /*@modifies *uret, internalState @*/; /** */ /*@-incondefs@*/ ssize_t davRead(void * cookie, /*@out@*/ char * buf, size_t count) /*@globals fileSystem, internalState @*/ /*@modifies buf, fileSystem, internalState @*/ /*@requires maxSet(buf) >= (count - 1) @*/ /*@ensures maxRead(buf) == result @*/; /*@=incondefs@*/ /** */ ssize_t davWrite(void * cookie, const char * buf, size_t count) /*@globals fileSystem, internalState @*/ /*@modifies fileSystem, internalState @*/; /** */ int davSeek(void * cookie, _libio_pos_t pos, int whence) /*@globals fileSystem, internalState @*/ /*@modifies fileSystem, internalState @*/; /** */ int davClose(void * cookie) /*@globals fileSystem, internalState @*/ /*@modifies cookie, fileSystem, internalState @*/; /** */ int davMkdir(const char * path, mode_t mode) /*@globals fileSystem, internalState @*/ /*@modifies fileSystem, internalState @*/; /** */ int davRmdir(const char * path) /*@globals fileSystem, internalState @*/ /*@modifies fileSystem, internalState @*/; /** */ int davRename(const char * oldpath, const char * newpath) /*@globals fileSystem, internalState @*/ /*@modifies fileSystem, internalState @*/; /** */ int davUnlink(const char * path) /*@globals fileSystem, internalState @*/ /*@modifies fileSystem, internalState @*/; /** * Close a DAV collection. * @param dir argv DIR * @return 0 always */ int davClosedir(/*@only@*/ DIR * dir) /*@globals fileSystem @*/ /*@modifies dir, fileSystem @*/; /** * Return next entry from a DAV collection. * @param dir argv DIR * @return next entry */ /*@dependent@*/ /*@null@*/ struct dirent * davReaddir(DIR * dir) /*@globals fileSystem @*/ /*@modifies fileSystem @*/; /** * Create an argv directory from DAV collection. * @param path URL for DAV collection path * @return argv DIR */ /*@null@*/ DIR * davOpendir(const char * path) /*@globals fileSystem, internalState @*/ /*@modifies fileSystem, internalState @*/; /** * stat(2) clone. */ int davStat(const char * path, /*@out@*/ struct stat * st) /*@globals fileSystem, internalState @*/ /*@modifies *st, fileSystem, internalState @*/; /** * lstat(2) clone. */ int davLstat(const char * path, /*@out@*/ struct stat * st) /*@globals fileSystem, internalState @*/ /*@modifies *st, fileSystem, internalState @*/; #ifdef __cplusplus } #endif #endif /* RPMDAV_H */