diff options
Diffstat (limited to 'rpmio/rpmio.h')
-rw-r--r-- | rpmio/rpmio.h | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/rpmio/rpmio.h b/rpmio/rpmio.h new file mode 100644 index 0000000..93072e0 --- /dev/null +++ b/rpmio/rpmio.h @@ -0,0 +1,169 @@ +#ifndef H_RPMIO +#define H_RPMIO + +/** \ingroup rpmio + * \file rpmio/rpmio.h + * + */ + +#include <sys/types.h> +#include <sys/stat.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +#include <rpm/rpmtypes.h> +#include <rpm/rpmsw.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup rpmio + * Hide libio API lossage. + * The libio interface changed after glibc-2.1.3 to pass the seek offset + * argument as a pointer rather than as an off_t. The snarl below defines + * typedefs to isolate the lossage. + */ +#if defined(__GLIBC__) && \ + (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)) +#define USE_COOKIE_SEEK_POINTER 1 +typedef _IO_off64_t _libio_off_t; +typedef _libio_off_t * _libio_pos_t; +#else +typedef off_t _libio_off_t; +typedef off_t _libio_pos_t; +#endif + +/** \ingroup rpmio + */ +typedef const struct FDIO_s * FDIO_t; + + +/** \ingroup rpmio + * \name RPMIO Interface. + */ + +/** \ingroup rpmio + * strerror(3) clone. + */ +const char * Fstrerror(FD_t fd); + +/** \ingroup rpmio + * fread(3) clone. + */ +ssize_t Fread(void * buf, size_t size, size_t nmemb, FD_t fd); + +/** \ingroup rpmio + * fwrite(3) clone. + */ +ssize_t Fwrite(const void * buf, size_t size, size_t nmemb, FD_t fd); + +/** \ingroup rpmio + * fseek(3) clone. + */ +int Fseek(FD_t fd, _libio_off_t offset, int whence); + +/** \ingroup rpmio + * ftell(3) clone. + */ +off_t Ftell(FD_t fd); + +/** \ingroup rpmio + * fclose(3) clone. + */ +int Fclose( FD_t fd); + +/** \ingroup rpmio + */ +FD_t Fdopen(FD_t ofd, const char * fmode); + +/** \ingroup rpmio + * fopen(3) clone. + */ +FD_t Fopen(const char * path, + const char * fmode); + + +/** \ingroup rpmio + * fflush(3) clone. + */ +int Fflush(FD_t fd); + +/** \ingroup rpmio + * ferror(3) clone. + */ +int Ferror(FD_t fd); + +/** \ingroup rpmio + * fileno(3) clone. + */ +int Fileno(FD_t fd); + +/** \ingroup rpmio + * fcntl(2) clone. + */ +int Fcntl(FD_t fd, int op, void *lip); + +/** \ingroup rpmio + * \name RPMIO Utilities. + */ + +/** \ingroup rpmio + */ +off_t fdSize(FD_t fd); + +/** \ingroup rpmio + */ +FD_t fdDup(int fdno); + +/** \ingroup rpmio + * Get associated FILE stream from fd (if any) + */ +FILE * fdGetFILE(FD_t fd); + +/** \ingroup rpmio + */ +FD_t fdLink(void * cookie); + +/** \ingroup rpmio + */ +FD_t fdFree(FD_t fd); + +/** \ingroup rpmio + */ +FD_t fdNew (void); + +/** + */ +int ufdCopy(FD_t sfd, FD_t tfd); + +/** + * XXX the name is misleading, this is a legacy wrapper that ensures + * only S_ISREG() files are read, nothing to do with timed... + * TODO: get this out of the API + */ +ssize_t timedRead(FD_t fd, void * bufptr, size_t length); + +/** \ingroup rpmio + * Identify per-desciptor I/O operation statistics. + */ +typedef enum fdOpX_e { + FDSTAT_READ = 0, /*!< Read statistics index. */ + FDSTAT_WRITE = 1, /*!< Write statistics index. */ + FDSTAT_SEEK = 2, /*!< Seek statistics index. */ + FDSTAT_CLOSE = 3, /*!< Close statistics index */ + FDSTAT_DIGEST = 4, /*!< Digest statistics index. */ + FDSTAT_MAX = 5 +} fdOpX; + +/** \ingroup rpmio + * + */ +rpmop fdOp(FD_t fd, fdOpX opx); + +#ifdef __cplusplus +} +#endif + +#endif /* H_RPMIO */ |