213 lines
4.9 KiB
C
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 */
|