rpm/rpmio/rpmio.h

170 lines
3.0 KiB
C

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