Main Page | Modules | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

rpmio.h

Go to the documentation of this file.
00001 #ifndef H_RPMIO
00002 #define H_RPMIO
00003 
00009 #include <sys/types.h>
00010 #include <sys/stat.h>
00011 #include <dirent.h>
00012 /*@-noparams@*/
00013 #include <glob.h>
00014 /*@=noparams@*/
00015 #include <stdio.h>
00016 #include <stdlib.h>
00017 #include <unistd.h>
00018 
00021 #ifdef  NOTYET
00022 typedef /*@abstract@*/ struct pgpDig_s * pgpDig;
00023 #endif
00024 
00033 #if !defined(__LCLINT__) && defined(__GLIBC__) && __GLIBC__ == 2 && __GLIBC_MINOR__ == 2
00034 #define USE_COOKIE_SEEK_POINTER 1
00035 typedef _IO_off64_t     _libio_off_t;
00036 typedef _libio_off_t *  _libio_pos_t;
00037 #else
00038 typedef off_t           _libio_off_t;
00039 typedef off_t           _libio_pos_t;
00040 #endif
00041 
00045 typedef /*@abstract@*/ /*@refcounted@*/ struct _FD_s * FD_t;
00046 
00049 typedef /*@observer@*/ struct FDIO_s * FDIO_t;
00050 
00051 #ifdef __cplusplus
00052 extern "C" {
00053 #endif
00054 
00059 
00062 typedef ssize_t (*fdio_read_function_t) (void *cookie, char *buf, size_t nbytes)
00063         /*@globals fileSystem @*/
00064         /*@modifies *cookie, fileSystem @*/;
00065 
00068 typedef ssize_t (*fdio_write_function_t) (void *cookie, const char *buf, size_t nbytes)
00069         /*@globals fileSystem @*/
00070         /*@modifies *cookie, fileSystem @*/;
00071 
00074 typedef int (*fdio_seek_function_t) (void *cookie, _libio_pos_t pos, int whence)
00075         /*@globals fileSystem @*/
00076         /*@modifies *cookie, fileSystem @*/;
00077 
00080 typedef int (*fdio_close_function_t) (void *cookie)
00081         /*@globals fileSystem @*/
00082         /*@modifies *cookie, fileSystem @*/;
00083 
00084 
00087 typedef /*@only@*/ /*@null@*/ FD_t (*fdio_ref_function_t) ( /*@only@*/ void * cookie,
00088                 const char * msg, const char * file, unsigned line)
00089         /*@globals fileSystem @*/
00090         /*@modifies fileSystem @*/;
00091 
00094 typedef /*@only@*/ /*@null@*/ FD_t (*fdio_deref_function_t) ( /*@only@*/ FD_t fd,
00095                 const char * msg, const char * file, unsigned line)
00096         /*@globals fileSystem @*/
00097         /*@modifies fd, fileSystem @*/;
00098 
00099 
00102 typedef /*@only@*/ /*@null@*/ FD_t (*fdio_new_function_t) (const char * msg,
00103                 const char * file, unsigned line)
00104         /*@globals fileSystem @*/
00105         /*@modifies fileSystem @*/;
00106 
00107 
00110 typedef int (*fdio_fileno_function_t) (void * cookie)
00111         /*@globals fileSystem @*/
00112         /*@modifies *cookie, fileSystem @*/;
00113 
00114 
00117 typedef FD_t (*fdio_open_function_t) (const char * path, int flags, mode_t mode)
00118         /*@globals fileSystem @*/
00119         /*@modifies fileSystem @*/;
00120 
00123 typedef FD_t (*fdio_fopen_function_t) (const char * path, const char * fmode)
00124         /*@globals fileSystem @*/
00125         /*@modifies fileSystem @*/;
00126 
00129 typedef void * (*fdio_ffileno_function_t) (FD_t fd)
00130         /*@globals fileSystem @*/
00131         /*@modifies fileSystem @*/;
00132 
00135 typedef int (*fdio_fflush_function_t) (FD_t fd)
00136         /*@globals fileSystem @*/
00137         /*@modifies fileSystem @*/;
00145 
00148 typedef int (*fdio_mkdir_function_t) (const char * path, mode_t mode)
00149         /*@globals fileSystem @*/
00150         /*@modifies fileSystem @*/;
00151 
00154 typedef int (*fdio_chdir_function_t) (const char * path)
00155         /*@globals fileSystem @*/
00156         /*@modifies fileSystem @*/;
00157 
00160 typedef int (*fdio_rmdir_function_t) (const char * path)
00161         /*@globals fileSystem @*/
00162         /*@modifies fileSystem @*/;
00163 
00166 typedef int (*fdio_rename_function_t) (const char * oldpath, const char * newpath)
00167         /*@globals fileSystem @*/
00168         /*@modifies fileSystem @*/;
00169 
00172 typedef int (*fdio_unlink_function_t) (const char * path)
00173         /*@globals fileSystem @*/
00174         /*@modifies fileSystem @*/;
00175 /*@-typeuse@*/
00176 
00179 typedef int (*fdio_stat_function_t) (const char * path, /*@out@*/ struct stat * st)
00180         /*@globals fileSystem @*/
00181         /*@modifies *st, fileSystem @*/;
00182 
00185 typedef int (*fdio_lstat_function_t) (const char * path, /*@out@*/ struct stat * st)
00186         /*@globals fileSystem @*/
00187         /*@modifies *st, fileSystem @*/;
00188 
00191 typedef int (*fdio_access_function_t) (const char * path, int amode)
00192         /*@globals fileSystem @*/
00193         /*@modifies fileSystem @*/;
00194 /*@=typeuse@*/
00200 struct FDIO_s {
00201   fdio_read_function_t          read;
00202   fdio_write_function_t         write;
00203   fdio_seek_function_t          seek;
00204   fdio_close_function_t         close;
00205 
00206   fdio_ref_function_t           _fdref;
00207   fdio_deref_function_t         _fdderef;
00208   fdio_new_function_t           _fdnew;
00209   fdio_fileno_function_t        _fileno;
00210 
00211   fdio_open_function_t          _open;
00212   fdio_fopen_function_t         _fopen;
00213   fdio_ffileno_function_t       _ffileno;
00214   fdio_fflush_function_t        _fflush;
00215 
00216   fdio_mkdir_function_t         _mkdir;
00217   fdio_chdir_function_t         _chdir;
00218   fdio_rmdir_function_t         _rmdir;
00219   fdio_rename_function_t        _rename;
00220   fdio_unlink_function_t        _unlink;
00221 };
00222 
00223 
00228 
00232 /*@-redecl@*/
00233 /*@observer@*/ const char * Fstrerror(/*@null@*/ FD_t fd)
00234         /*@*/;
00235 /*@=redecl@*/
00236 
00240 size_t Fread(/*@out@*/ void * buf, size_t size, size_t nmemb, FD_t fd)
00241         /*@globals fileSystem @*/
00242         /*@modifies fd, *buf, fileSystem @*/;
00243 
00247 size_t Fwrite(const void * buf, size_t size, size_t nmemb, FD_t fd)
00248         /*@globals fileSystem @*/
00249         /*@modifies fd, fileSystem @*/;
00250 
00254 int Fseek(FD_t fd, _libio_off_t offset, int whence)
00255         /*@globals fileSystem @*/
00256         /*@modifies fileSystem @*/;
00257 
00261 int Fclose( /*@killref@*/ FD_t fd)
00262         /*@globals fileSystem @*/
00263         /*@modifies fd, fileSystem @*/;
00264 
00267 /*@null@*/ FD_t Fdopen(FD_t ofd, const char * fmode)
00268         /*@globals fileSystem @*/
00269         /*@modifies ofd, fileSystem @*/;
00270 
00274 /*@null@*/ FD_t Fopen(/*@null@*/ const char * path,
00275                         /*@null@*/ const char * fmode)
00276         /*@globals fileSystem @*/
00277         /*@modifies fileSystem @*/;
00278 
00279 
00283 int Fflush(/*@null@*/ FD_t fd)
00284         /*@globals fileSystem @*/
00285         /*@modifies fd, fileSystem @*/;
00286 
00290 int Ferror(/*@null@*/ FD_t fd)
00291         /*@*/;
00292 
00296 int Fileno(FD_t fd)
00297         /*@globals fileSystem @*/
00298         /*@modifies fileSystem@*/;
00299 
00303 int Fcntl(FD_t fd, int op, void *lip)
00304         /*@globals fileSystem @*/
00305         /*@modifies fd, *lip, fileSystem @*/;
00306 
00313 
00317 int Mkdir(const char * path, mode_t mode)
00318         /*@globals fileSystem @*/
00319         /*@modifies fileSystem @*/;
00320 
00324 int Chdir(const char * path)
00325         /*@globals fileSystem @*/
00326         /*@modifies fileSystem @*/;
00327 
00331 int Rmdir(const char * path)
00332         /*@globals fileSystem @*/
00333         /*@modifies fileSystem @*/;
00334 
00338 int Rename(const char * oldpath, const char * newpath)
00339         /*@globals fileSystem @*/
00340         /*@modifies fileSystem @*/;
00341 
00345 int Link(const char * oldpath, const char * newpath)
00346         /*@globals fileSystem @*/
00347         /*@modifies fileSystem @*/;
00348 
00352 int Unlink(const char * path)
00353         /*@globals fileSystem @*/
00354         /*@modifies fileSystem @*/;
00355 
00359 int Readlink(const char * path, /*@out@*/ char * buf, size_t bufsiz)
00360         /*@globals fileSystem @*/
00361         /*@modifies *buf, fileSystem @*/;
00362 
00366 int Stat(const char * path, /*@out@*/ struct stat * st)
00367         /*@globals fileSystem @*/
00368         /*@modifies *st, fileSystem @*/;
00369 
00373 int Lstat(const char * path, /*@out@*/ struct stat * st)
00374         /*@globals fileSystem @*/
00375         /*@modifies *st, fileSystem @*/;
00376 
00380 int Access(const char * path, int amode)
00381         /*@globals fileSystem @*/
00382         /*@modifies fileSystem @*/;
00383 
00384 
00388 int Glob(const char * pattern, int flags,
00389                 int errfunc(const char * epath, int eerrno),
00390                 /*@out@*/ glob_t * pglob)
00391         /*@globals fileSystem @*/
00392         /*@modifies *pglob, fileSystem @*/;
00393 
00397 void Globfree( /*@only@*/ glob_t * pglob)
00398         /*@globals fileSystem @*/
00399         /*@modifies *pglob, fileSystem @*/;
00400 
00401 
00405 /*@null@*/
00406 DIR * Opendir(const char * path)
00407         /*@globals fileSystem @*/
00408         /*@modifies fileSystem @*/;
00409 
00413 /*@null@*/ struct dirent * Readdir(DIR * dir)
00414         /*@globals fileSystem @*/
00415         /*@modifies *dir, fileSystem @*/;
00416 
00420 int     Closedir(/*@only@*/ DIR * dir)
00421         /*@globals fileSystem @*/
00422         /*@modifies *dir, fileSystem @*/;
00423 
00431 
00434 off_t   fdSize(FD_t fd)
00435         /*@globals fileSystem @*/
00436         /*@modifies fd, fileSystem@*/;
00437 
00440 /*@null@*/ FD_t fdDup(int fdno)
00441         /*@globals fileSystem @*/
00442         /*@modifies fileSystem@*/;
00443 
00444 #ifdef UNUSED
00445 /*@null@*/ FILE *fdFdopen( /*@only@*/ void * cookie, const char * mode);
00446 #endif
00447 
00448 /* XXX Legacy interfaces needed by gnorpm, rpmfind et al */
00449 
00450 /*@-exportlocal@*/
00453 #ifndef H_RPMIO_INTERNAL        /* XXX avoid gcc warning */
00454 /*@unused@*/ int fdFileno(void * cookie)
00455         /*@*/;
00456 #define fdFileno(_fd)           fdio->_fileno(_fd)
00457 #endif
00458 
00461 /*@null@*/ FD_t fdOpen(const char *path, int flags, mode_t mode)
00462         /*@globals fileSystem @*/
00463         /*@modifies fileSystem @*/;
00464 #define fdOpen(_path, _flags, _mode)    fdio->_open((_path), (_flags), (_mode))
00465 
00468 ssize_t fdRead(void * cookie, /*@out@*/ char * buf, size_t count)
00469         /*@globals fileSystem @*/
00470         /*@modifies *cookie, *buf, fileSystem @*/;
00471 #define fdRead(_fd, _buf, _count)       fdio->read((_fd), (_buf), (_count))
00472 
00475 ssize_t fdWrite(void * cookie, const char * buf, size_t count)
00476         /*@globals fileSystem @*/
00477         /*@modifies *cookie, fileSystem @*/;
00478 #define fdWrite(_fd, _buf, _count)      fdio->write((_fd), (_buf), (_count))
00479 
00482 int fdClose( /*@only@*/ void * cookie)
00483         /*@globals fileSystem @*/
00484         /*@modifies *cookie, fileSystem @*/;
00485 #define fdCLose(_fd)            fdio->close(_fd)
00486 
00489 /*@unused@*/
00490 /*@only@*/ /*@null@*/
00491 FD_t fdLink (/*@only@*/ void * cookie, const char * msg)
00492         /*@globals fileSystem @*/
00493         /*@modifies *cookie, fileSystem @*/;
00494 #define fdLink(_fd, _msg)       fdio->_fdref(_fd, _msg, __FILE__, __LINE__)
00495 
00498 /*@unused@*/
00499 /*@only@*/ /*@null@*/
00500 FD_t fdFree(/*@only@*/ FD_t fd, const char * msg)
00501         /*@globals fileSystem @*/
00502         /*@modifies fd, fileSystem @*/;
00503 #define fdFree(_fd, _msg)       fdio->_fdderef(_fd, _msg, __FILE__, __LINE__)
00504 
00507 /*@unused@*/
00508 /*@only@*/ /*@null@*/
00509 FD_t fdNew (const char * msg)
00510         /*@globals fileSystem @*/
00511         /*@modifies fileSystem @*/;
00512 #define fdNew(_msg)             fdio->_fdnew(_msg, __FILE__, __LINE__)
00513 
00516 int fdWritable(FD_t fd, int secs)
00517         /*@globals errno, fileSystem @*/
00518         /*@modifies fd, errno, fileSystem @*/;
00519 
00522 int fdReadable(FD_t fd, int secs)
00523         /*@globals errno @*/
00524         /*@modifies fd, errno @*/;
00525 /*@=exportlocal@*/
00526 
00530 /*@-typeuse@*/
00531 typedef enum ftperrCode_e {
00532     FTPERR_BAD_SERVER_RESPONSE  = -1,   
00533     FTPERR_SERVER_IO_ERROR      = -2,   
00534     FTPERR_SERVER_TIMEOUT       = -3,   
00535     FTPERR_BAD_HOST_ADDR        = -4,   
00536     FTPERR_BAD_HOSTNAME         = -5,   
00537     FTPERR_FAILED_CONNECT       = -6,   
00538     FTPERR_FILE_IO_ERROR        = -7,   
00539     FTPERR_PASSIVE_ERROR        = -8,   
00540     FTPERR_FAILED_DATA_CONNECT  = -9,   
00541     FTPERR_FILE_NOT_FOUND       = -10,  
00542     FTPERR_NIC_ABORT_IN_PROGRESS= -11,  
00543     FTPERR_UNKNOWN              = -100  
00544 } ftperrCode;
00545 /*@=typeuse@*/
00546 
00549 /*@-redecl@*/
00550 /*@observer@*/ const char *const ftpStrerror(int errorNumber)   /*@*/;
00551 /*@=redecl@*/
00552 
00555 /*@unused@*/
00556 /*@dependent@*/ /*@null@*/ void * ufdGetUrlinfo(FD_t fd)
00557         /*@modifies fd @*/;
00558 
00561 /*@-redecl@*/
00562 /*@unused@*/
00563 /*@observer@*/ const char * urlStrerror(const char * url)       /*@*/;
00564 /*@=redecl@*/
00565 
00568 /*@-exportlocal@*/
00569 int ufdCopy(FD_t sfd, FD_t tfd)
00570         /*@globals fileSystem @*/
00571         /*@modifies sfd, tfd, fileSystem @*/;
00572 /*@=exportlocal@*/
00573 
00576 int ufdGetFile( /*@killref@*/ FD_t sfd, FD_t tfd)
00577         /*@globals fileSystem @*/
00578         /*@modifies sfd, tfd, fileSystem @*/;
00579 
00582 /*@unused@*/ int timedRead(FD_t fd, /*@out@*/ void * bufptr, int length)
00583         /*@globals fileSystem @*/
00584         /*@modifies fd, *bufptr, fileSystem @*/;
00585 #define timedRead       ufdio->read
00586 
00587 /*@-exportlocal@*/
00590 /*@observer@*/ /*@unchecked@*/ extern FDIO_t fdio;
00591 
00594 /*@observer@*/ /*@unchecked@*/ extern FDIO_t fpio;
00595 
00598 /*@observer@*/ /*@unchecked@*/ extern FDIO_t ufdio;
00599 
00602 /*@observer@*/ /*@unchecked@*/ extern FDIO_t gzdio;
00603 
00606 /*@observer@*/ /*@unchecked@*/ extern FDIO_t bzdio;
00607 
00610 /*@observer@*/ /*@unchecked@*/ extern FDIO_t fadio;
00611 /*@=exportlocal@*/
00614 /*@unused@*/ static inline int xislower(int c) /*@*/ {
00615     return (c >= 'a' && c <= 'z');
00616 }
00617 /*@unused@*/ static inline int xisupper(int c) /*@*/ {
00618     return (c >= 'A' && c <= 'Z');
00619 }
00620 /*@unused@*/ static inline int xisalpha(int c) /*@*/ {
00621     return (xislower(c) || xisupper(c));
00622 }
00623 /*@unused@*/ static inline int xisdigit(int c) /*@*/ {
00624     return (c >= '0' && c <= '9');
00625 }
00626 /*@unused@*/ static inline int xisalnum(int c) /*@*/ {
00627     return (xisalpha(c) || xisdigit(c));
00628 }
00629 /*@unused@*/ static inline int xisblank(int c) /*@*/ {
00630     return (c == ' ' || c == '\t');
00631 }
00632 /*@unused@*/ static inline int xisspace(int c) /*@*/ {
00633     return (xisblank(c) || c == '\n' || c == '\r' || c == '\f' || c == '\v');
00634 }
00635 
00636 /*@unused@*/ static inline int xtolower(int c) /*@*/ {
00637     return ((xisupper(c)) ? (c | ('a' - 'A')) : c);
00638 }
00639 /*@unused@*/ static inline int xtoupper(int c) /*@*/ {
00640     return ((xislower(c)) ? (c & ~('a' - 'A')) : c);
00641 }
00642 
00646 int xstrcasecmp(const char * s1, const char * s2)               /*@*/;
00647 
00651 int xstrncasecmp(const char *s1, const char * s2, size_t n)     /*@*/;
00652 
00653 #ifdef __cplusplus
00654 }
00655 #endif
00656 
00657 #endif  /* H_RPMIO */

Generated on Mon Apr 18 03:27:28 2005 for rpm by  doxygen 1.4.1