170 lines
3.0 KiB
C
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 */
|