00001 #ifndef H_RPMIO
00002 #define H_RPMIO
00003 
00009 #include <sys/types.h>
00010 #include <sys/stat.h>
00011 #include <dirent.h>
00012 
00013 #include "glob.h"
00014 
00015 #include <stdio.h>
00016 #include <stdlib.h>
00017 #include <unistd.h>
00018 
00021 typedef  struct pgpDig_s * pgpDig;
00022 
00025 typedef  struct pgpDigParams_s * pgpDigParams;
00026 
00034 #if !defined(__LCLINT__) && defined(__GLIBC__) && \
00035         (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2))
00036 #define USE_COOKIE_SEEK_POINTER 1
00037 typedef _IO_off64_t     _libio_off_t;
00038 typedef _libio_off_t *  _libio_pos_t;
00039 #else
00040 typedef off_t           _libio_off_t;
00041 typedef off_t           _libio_pos_t;
00042 #endif
00043 
00047 typedef   struct _FD_s * FD_t;
00048 
00051 typedef  struct FDIO_s * FDIO_t;
00052 
00053 #ifdef __cplusplus
00054 extern "C" {
00055 #endif
00056 
00061 
00064 typedef ssize_t (*fdio_read_function_t) (void *cookie, char *buf, size_t nbytes)
00065         
00066         
00067         
00068          ;
00069 
00072 typedef ssize_t (*fdio_write_function_t) (void *cookie, const char *buf, size_t nbytes)
00073         
00074         ;
00075 
00078 typedef int (*fdio_seek_function_t) (void *cookie, _libio_pos_t pos, int whence)
00079         
00080         ;
00081 
00084 typedef int (*fdio_close_function_t) (void *cookie)
00085         
00086         ;
00087 
00088 
00091 typedef   FD_t (*fdio_ref_function_t) (  void * cookie,
00092                 const char * msg, const char * file, unsigned line)
00093         
00094         ;
00095 
00098 typedef   FD_t (*fdio_deref_function_t) (  FD_t fd,
00099                 const char * msg, const char * file, unsigned line)
00100         
00101         ;
00102 
00103 
00106 typedef   FD_t (*fdio_new_function_t) (const char * msg,
00107                 const char * file, unsigned line)
00108         
00109         ;
00110 
00111 
00114 typedef int (*fdio_fileno_function_t) (void * cookie)
00115         
00116         ;
00117 
00118 
00121 typedef FD_t (*fdio_open_function_t) (const char * path, int flags, mode_t mode)
00122         
00123         ;
00124 
00127 typedef FD_t (*fdio_fopen_function_t) (const char * path, const char * fmode)
00128         
00129         ;
00130 
00133 typedef void * (*fdio_ffileno_function_t) (FD_t fd)
00134         
00135         ;
00136 
00139 typedef int (*fdio_fflush_function_t) (FD_t fd)
00140         
00141         ;
00149 
00152 typedef int (*fdio_mkdir_function_t) (const char * path, mode_t mode)
00153         
00154         ;
00155 
00158 typedef int (*fdio_chdir_function_t) (const char * path)
00159         
00160         ;
00161 
00164 typedef int (*fdio_rmdir_function_t) (const char * path)
00165         
00166         ;
00167 
00170 typedef int (*fdio_rename_function_t) (const char * oldpath, const char * newpath)
00171         
00172         ;
00173 
00176 typedef int (*fdio_unlink_function_t) (const char * path)
00177         
00178         ;
00179 
00180 
00183 typedef int (*fdio_stat_function_t) (const char * path,  struct stat * st)
00184         
00185         ;
00186 
00189 typedef int (*fdio_lstat_function_t) (const char * path,  struct stat * st)
00190         
00191         ;
00192 
00195 typedef int (*fdio_access_function_t) (const char * path, int amode)
00196         
00197         ;
00198 
00204 struct FDIO_s {
00205   fdio_read_function_t          read;
00206   fdio_write_function_t         write;
00207   fdio_seek_function_t          seek;
00208   fdio_close_function_t         close;
00209 
00210   fdio_ref_function_t           _fdref;
00211   fdio_deref_function_t         _fdderef;
00212   fdio_new_function_t           _fdnew;
00213   fdio_fileno_function_t        _fileno;
00214 
00215   fdio_open_function_t          _open;
00216   fdio_fopen_function_t         _fopen;
00217   fdio_ffileno_function_t       _ffileno;
00218   fdio_fflush_function_t        _fflush;
00219 
00220   fdio_mkdir_function_t         _mkdir;
00221   fdio_chdir_function_t         _chdir;
00222   fdio_rmdir_function_t         _rmdir;
00223   fdio_rename_function_t        _rename;
00224   fdio_unlink_function_t        _unlink;
00225 };
00226 
00227 
00232 
00236  const char * Fstrerror( FD_t fd)
00237         ;
00238 
00242 
00243 size_t Fread( void * buf, size_t size, size_t nmemb, FD_t fd)
00244         
00245         
00246         
00247         ;
00248 
00249 
00253 
00254 size_t Fwrite(const void * buf, size_t size, size_t nmemb, FD_t fd)
00255         
00256         
00257         ;
00258 
00259 
00263 int Fseek(FD_t fd, _libio_off_t offset, int whence)
00264         
00265         ;
00266 
00270 int Fclose(  FD_t fd)
00271         
00272         ;
00273 
00276  FD_t Fdopen(FD_t ofd, const char * fmode)
00277         
00278         ;
00279 
00283  FD_t Fopen( const char * path,
00284                          const char * fmode)
00285         
00286         ;
00287 
00288 
00292 int Fflush( FD_t fd)
00293         
00294         ;
00295 
00299 int Ferror( FD_t fd)
00300         ;
00301 
00305 int Fileno(FD_t fd)
00306         
00307         ;
00308 
00312 
00313 int Fcntl(FD_t fd, int op, void *lip)
00314         
00315         ;
00316 
00323 
00327 int Mkdir(const char * path, mode_t mode)
00328         
00329         ;
00330 
00334 int Chdir(const char * path)
00335         
00336         ;
00337 
00341 int Rmdir(const char * path)
00342         
00343         ;
00344 
00348 int Rename(const char * oldpath, const char * newpath)
00349         
00350         ;
00351 
00355 int Link(const char * oldpath, const char * newpath)
00356         
00357         ;
00358 
00362 int Unlink(const char * path)
00363         
00364         ;
00365 
00369 
00370 int Readlink(const char * path,  char * buf, size_t bufsiz)
00371         
00372         
00373         
00374         ;
00375 
00376 
00380 int Stat(const char * path,  struct stat * st)
00381         
00382         ;
00383 
00387 int Lstat(const char * path,  struct stat * st)
00388         
00389         ;
00390 
00394 int Access(const char * path, int amode)
00395         
00396         ;
00397 
00401 int Glob_pattern_p (const char *pattern, int quote)
00402         ;
00403 
00407 int Glob_error(const char * epath, int eerrno)
00408         ;
00409 
00413 int Glob(const char * pattern, int flags,
00414                 int errfunc(const char * epath, int eerrno),
00415                  glob_t * pglob)
00416         
00417         ;
00418 
00422 void Globfree(  glob_t * pglob)
00423         
00424         ;
00425 
00426 
00430 
00431 DIR * Opendir(const char * path)
00432         
00433         ;
00434 
00438  
00439 struct dirent * Readdir(DIR * dir)
00440         
00441         ;
00442 
00446 int Closedir( DIR * dir)
00447         
00448         ;
00449 
00457 
00460 off_t   fdSize(FD_t fd)
00461         
00462         ;
00463 
00466  FD_t fdDup(int fdno)
00467         
00468         ;
00469 
00470 #ifdef UNUSED
00471  FILE *fdFdopen(  void * cookie, const char * mode);
00472 #endif
00473 
00474 
00475 
00476 
00479 #ifndef H_RPMIO_INTERNAL        
00480  int fdFileno(void * cookie)
00481         ;
00482 #define fdFileno(_fd)           fdio->_fileno(_fd)
00483 #endif
00484 
00487  FD_t fdOpen(const char *path, int flags, mode_t mode)
00488         
00489         ;
00490 #define fdOpen(_path, _flags, _mode)    fdio->_open((_path), (_flags), (_mode))
00491 
00494 
00495 ssize_t fdRead(void * cookie,  char * buf, size_t count)
00496         
00497         
00498         
00499          ;
00500 #define fdRead(_fd, _buf, _count)       fdio->read((_fd), (_buf), (_count))
00501 
00502 
00505 ssize_t fdWrite(void * cookie, const char * buf, size_t count)
00506         
00507         ;
00508 #define fdWrite(_fd, _buf, _count)      fdio->write((_fd), (_buf), (_count))
00509 
00512 int fdClose(  void * cookie)
00513         
00514         ;
00515 #define fdClose(_fd)            fdio->close(_fd)
00516 
00519 
00520  
00521 FD_t fdLink ( void * cookie, const char * msg)
00522         
00523         ;
00524 #define fdLink(_fd, _msg)       fdio->_fdref(_fd, _msg, __FILE__, __LINE__)
00525 
00528 
00529  
00530 FD_t fdFree( FD_t fd, const char * msg)
00531         
00532         ;
00533 #define fdFree(_fd, _msg)       fdio->_fdderef(_fd, _msg, __FILE__, __LINE__)
00534 
00537 
00538  
00539 FD_t fdNew (const char * msg)
00540         
00541         ;
00542 #define fdNew(_msg)             fdio->_fdnew(_msg, __FILE__, __LINE__)
00543 
00546 int fdWritable(FD_t fd, int secs)
00547         
00548         ;
00549 
00552 int fdReadable(FD_t fd, int secs)
00553         
00554         ;
00555 
00556 
00565 int rpmioMkpath(const char * path, mode_t mode, uid_t uid, gid_t gid)
00566         
00567         ;
00568 
00572 
00573 typedef enum ftperrCode_e {
00574     FTPERR_NE_ERROR             = -1,   
00575     FTPERR_NE_LOOKUP            = -2,   
00576     FTPERR_NE_AUTH              = -3,   
00577     FTPERR_NE_PROXYAUTH         = -4,   
00578     FTPERR_NE_CONNECT           = -5,   
00579     FTPERR_NE_TIMEOUT           = -6,   
00580     FTPERR_NE_FAILED            = -7,   
00581     FTPERR_NE_RETRY             = -8,   
00582     FTPERR_NE_REDIRECT          = -9,   
00584     FTPERR_BAD_SERVER_RESPONSE  = -81,  
00585     FTPERR_SERVER_IO_ERROR      = -82,  
00586     FTPERR_SERVER_TIMEOUT       = -83,  
00587     FTPERR_BAD_HOST_ADDR        = -84,  
00588     FTPERR_BAD_HOSTNAME         = -85,  
00589     FTPERR_FAILED_CONNECT       = -86,  
00590     FTPERR_FILE_IO_ERROR        = -87,  
00591     FTPERR_PASSIVE_ERROR        = -88,  
00592     FTPERR_FAILED_DATA_CONNECT  = -89,  
00593     FTPERR_FILE_NOT_FOUND       = -90,  
00594     FTPERR_NIC_ABORT_IN_PROGRESS= -91,  
00595     FTPERR_UNKNOWN              = -100  
00596 } ftperrCode;
00597 
00598 
00601 
00602  const char *const ftpStrerror(int errorNumber)
00603         ;
00604 
00605 
00608 
00609   void * ufdGetUrlinfo(FD_t fd)
00610         ;
00611 
00614 
00615 
00616  const char * urlStrerror(const char * url)
00617         
00618         ;
00619 
00620 
00623 
00624 int ufdCopy(FD_t sfd, FD_t tfd)
00625         
00626         ;
00627 
00628 
00631 int ufdGetFile(  FD_t sfd, FD_t tfd)
00632         
00633         ;
00634 
00637  int timedRead(FD_t fd,  void * bufptr, int length)
00638         
00639         ;
00640 #define timedRead       (ufdio->read)
00641 
00642 
00645   extern FDIO_t fdio;
00646 
00649   extern FDIO_t fpio;
00650 
00653   extern FDIO_t ufdio;
00654 
00657   extern FDIO_t gzdio;
00658 
00661   extern FDIO_t bzdio;
00662 
00665   extern FDIO_t fadio;
00666 
00669  static inline int xislower(int c)  {
00670     return (c >= 'a' && c <= 'z');
00671 }
00672  static inline int xisupper(int c)  {
00673     return (c >= 'A' && c <= 'Z');
00674 }
00675  static inline int xisalpha(int c)  {
00676     return (xislower(c) || xisupper(c));
00677 }
00678  static inline int xisdigit(int c)  {
00679     return (c >= '0' && c <= '9');
00680 }
00681  static inline int xisalnum(int c)  {
00682     return (xisalpha(c) || xisdigit(c));
00683 }
00684  static inline int xisblank(int c)  {
00685     return (c == ' ' || c == '\t');
00686 }
00687  static inline int xisspace(int c)  {
00688     return (xisblank(c) || c == '\n' || c == '\r' || c == '\f' || c == '\v');
00689 }
00690 
00691  static inline int xtolower(int c)  {
00692     return ((xisupper(c)) ? (c | ('a' - 'A')) : c);
00693 }
00694  static inline int xtoupper(int c)  {
00695     return ((xislower(c)) ? (c & ~('a' - 'A')) : c);
00696 }
00697 
00701 int xstrcasecmp(const char * s1, const char * s2)               ;
00702 
00706 int xstrncasecmp(const char *s1, const char * s2, size_t n)     ;
00707 
00708 #ifdef __cplusplus
00709 }
00710 #endif
00711 
00712 #endif