summaryrefslogtreecommitdiff
path: root/rpmio/rpmio.h
diff options
context:
space:
mode:
Diffstat (limited to 'rpmio/rpmio.h')
-rw-r--r--rpmio/rpmio.h169
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 */