rpm/rpmio/rpmdav.h

213 lines
4.9 KiB
C

#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 */