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
00030 #if !defined(__LCLINT__) && defined(__GLIBC__) && \
00031 (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2))
00032 #define USE_COOKIE_SEEK_POINTER 1
00033 typedef _IO_off64_t _libio_off_t;
00034 typedef _libio_off_t * _libio_pos_t;
00035 #else
00036 typedef off_t _libio_off_t;
00037 typedef off_t _libio_pos_t;
00038 #endif
00039
00043 typedef struct _FD_s * FD_t;
00044
00047 typedef struct FDIO_s * FDIO_t;
00048
00049 #ifdef __cplusplus
00050 extern "C" {
00051 #endif
00052
00057
00060 typedef ssize_t (*fdio_read_function_t) (void *cookie, char *buf, size_t nbytes)
00061
00062
00063
00064 ;
00065
00068 typedef ssize_t (*fdio_write_function_t) (void *cookie, const char *buf, size_t nbytes)
00069
00070 ;
00071
00074 typedef int (*fdio_seek_function_t) (void *cookie, _libio_pos_t pos, int whence)
00075
00076 ;
00077
00080 typedef int (*fdio_close_function_t) (void *cookie)
00081
00082 ;
00083
00084
00087 typedef FD_t (*fdio_ref_function_t) ( void * cookie,
00088 const char * msg, const char * file, unsigned line)
00089
00090 ;
00091
00094 typedef FD_t (*fdio_deref_function_t) ( FD_t fd,
00095 const char * msg, const char * file, unsigned line)
00096
00097 ;
00098
00099
00102 typedef FD_t (*fdio_new_function_t) (const char * msg,
00103 const char * file, unsigned line)
00104
00105 ;
00106
00107
00110 typedef int (*fdio_fileno_function_t) (void * cookie)
00111
00112 ;
00113
00114
00117 typedef FD_t (*fdio_open_function_t) (const char * path, int flags, mode_t mode)
00118
00119 ;
00120
00123 typedef FD_t (*fdio_fopen_function_t) (const char * path, const char * fmode)
00124
00125 ;
00126
00129 typedef void * (*fdio_ffileno_function_t) (FD_t fd)
00130
00131 ;
00132
00135 typedef int (*fdio_fflush_function_t) (FD_t fd)
00136
00137 ;
00145
00148 typedef int (*fdio_mkdir_function_t) (const char * path, mode_t mode)
00149
00150 ;
00151
00154 typedef int (*fdio_chdir_function_t) (const char * path)
00155
00156 ;
00157
00160 typedef int (*fdio_rmdir_function_t) (const char * path)
00161
00162 ;
00163
00166 typedef int (*fdio_rename_function_t) (const char * oldpath, const char * newpath)
00167
00168 ;
00169
00172 typedef int (*fdio_unlink_function_t) (const char * path)
00173
00174 ;
00175
00176
00179 typedef int (*fdio_stat_function_t) (const char * path, struct stat * st)
00180
00181 ;
00182
00185 typedef int (*fdio_lstat_function_t) (const char * path, struct stat * st)
00186
00187 ;
00188
00191 typedef int (*fdio_access_function_t) (const char * path, int amode)
00192
00193 ;
00194
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
00233 const char * Fstrerror( FD_t fd)
00234 ;
00235
00236
00240 size_t Fread( void * buf, size_t size, size_t nmemb, FD_t fd)
00241
00242 ;
00243
00247 size_t Fwrite(const void * buf, size_t size, size_t nmemb, FD_t fd)
00248
00249 ;
00250
00254 int Fseek(FD_t fd, _libio_off_t offset, int whence)
00255
00256 ;
00257
00261 int Fclose( FD_t fd)
00262
00263 ;
00264
00267 FD_t Fdopen(FD_t ofd, const char * fmode)
00268
00269 ;
00270
00274 FD_t Fopen( const char * path,
00275 const char * fmode)
00276
00277 ;
00278
00279
00283 int Fflush( FD_t fd)
00284
00285 ;
00286
00290 int Ferror( FD_t fd)
00291 ;
00292
00296 int Fileno(FD_t fd)
00297
00298 ;
00299
00303
00304 int Fcntl(FD_t fd, int op, void *lip)
00305
00306 ;
00307
00314
00318 int Mkdir(const char * path, mode_t mode)
00319
00320 ;
00321
00325 int MkdirP(const char * path, mode_t mode)
00326
00327 ;
00328
00332 int Chdir(const char * path)
00333
00334 ;
00335
00339 int Rmdir(const char * path)
00340
00341 ;
00342
00346 int Rename(const char * oldpath, const char * newpath)
00347
00348 ;
00349
00353 int Link(const char * oldpath, const char * newpath)
00354
00355 ;
00356
00360 int Unlink(const char * path)
00361
00362 ;
00363
00367 int Readlink(const char * path, char * buf, size_t bufsiz)
00368
00369
00370
00371 ;
00372
00376 int Stat(const char * path, struct stat * st)
00377
00378 ;
00379
00383 int Lstat(const char * path, struct stat * st)
00384
00385 ;
00386
00390 int Access(const char * path, int amode)
00391
00392 ;
00393
00394
00398 int Glob(const char * pattern, int flags,
00399 int errfunc(const char * epath, int eerrno),
00400 glob_t * pglob)
00401
00402 ;
00403
00407 void Globfree( glob_t * pglob)
00408
00409 ;
00410
00411
00415
00416 DIR * Opendir(const char * path)
00417
00418 ;
00419
00423
00424 struct dirent * Readdir(DIR * dir)
00425
00426 ;
00427
00431 int Closedir( DIR * dir)
00432
00433 ;
00434
00442
00445 off_t fdSize(FD_t fd)
00446
00447 ;
00448
00451 FD_t fdDup(int fdno)
00452
00453 ;
00454
00455 #ifdef UNUSED
00456 FILE *fdFdopen( void * cookie, const char * mode);
00457 #endif
00458
00459
00460
00461
00464 #ifndef H_RPMIO_INTERNAL
00465 int fdFileno(void * cookie)
00466 ;
00467 #define fdFileno(_fd) fdio->_fileno(_fd)
00468 #endif
00469
00472 FD_t fdOpen(const char *path, int flags, mode_t mode)
00473
00474 ;
00475 #define fdOpen(_path, _flags, _mode) fdio->_open((_path), (_flags), (_mode))
00476
00479 ssize_t fdRead(void * cookie, char * buf, size_t count)
00480
00481
00482
00483 ;
00484 #define fdRead(_fd, _buf, _count) fdio->read((_fd), (_buf), (_count))
00485
00488 ssize_t fdWrite(void * cookie, const char * buf, size_t count)
00489
00490 ;
00491 #define fdWrite(_fd, _buf, _count) fdio->write((_fd), (_buf), (_count))
00492
00495 int fdClose( void * cookie)
00496
00497 ;
00498 #define fdCLose(_fd) fdio->close(_fd)
00499
00502
00503
00504 FD_t fdLink ( void * cookie, const char * msg)
00505
00506 ;
00507 #define fdLink(_fd, _msg) fdio->_fdref(_fd, _msg, __FILE__, __LINE__)
00508
00511
00512
00513 FD_t fdFree( FD_t fd, const char * msg)
00514
00515 ;
00516 #define fdFree(_fd, _msg) fdio->_fdderef(_fd, _msg, __FILE__, __LINE__)
00517
00520
00521
00522 FD_t fdNew (const char * msg)
00523
00524 ;
00525 #define fdNew(_msg) fdio->_fdnew(_msg, __FILE__, __LINE__)
00526
00529 int fdWritable(FD_t fd, int secs)
00530
00531 ;
00532
00535 int fdReadable(FD_t fd, int secs)
00536
00537 ;
00538
00539
00543
00544 typedef enum ftperrCode_e {
00545 FTPERR_BAD_SERVER_RESPONSE = -1,
00546 FTPERR_SERVER_IO_ERROR = -2,
00547 FTPERR_SERVER_TIMEOUT = -3,
00548 FTPERR_BAD_HOST_ADDR = -4,
00549 FTPERR_BAD_HOSTNAME = -5,
00550 FTPERR_FAILED_CONNECT = -6,
00551 FTPERR_FILE_IO_ERROR = -7,
00552 FTPERR_PASSIVE_ERROR = -8,
00553 FTPERR_FAILED_DATA_CONNECT = -9,
00554 FTPERR_FILE_NOT_FOUND = -10,
00555 FTPERR_NIC_ABORT_IN_PROGRESS= -11,
00556 FTPERR_UNKNOWN = -100
00557 } ftperrCode;
00558
00559
00562
00563 const char *const ftpStrerror(int errorNumber) ;
00564
00565
00568
00569 void * ufdGetUrlinfo(FD_t fd)
00570 ;
00571
00574
00575
00576 const char * urlStrerror(const char * url) ;
00577
00578
00581
00582 int ufdCopy(FD_t sfd, FD_t tfd)
00583
00584 ;
00585
00586
00589 int ufdGetFile( FD_t sfd, FD_t tfd)
00590
00591 ;
00592
00595 int timedRead(FD_t fd, void * bufptr, int length)
00596
00597 ;
00598 #define timedRead ufdio->read
00599
00600
00603 extern FDIO_t fdio;
00604
00607 extern FDIO_t fpio;
00608
00611 extern FDIO_t ufdio;
00612
00615 extern FDIO_t gzdio;
00616
00619 extern FDIO_t bzdio;
00620
00623 extern FDIO_t fadio;
00624
00627 static inline int xislower(int c) {
00628 return (c >= 'a' && c <= 'z');
00629 }
00630 static inline int xisupper(int c) {
00631 return (c >= 'A' && c <= 'Z');
00632 }
00633 static inline int xisalpha(int c) {
00634 return (xislower(c) || xisupper(c));
00635 }
00636 static inline int xisdigit(int c) {
00637 return (c >= '0' && c <= '9');
00638 }
00639 static inline int xisalnum(int c) {
00640 return (xisalpha(c) || xisdigit(c));
00641 }
00642 static inline int xisblank(int c) {
00643 return (c == ' ' || c == '\t');
00644 }
00645 static inline int xisspace(int c) {
00646 return (xisblank(c) || c == '\n' || c == '\r' || c == '\f' || c == '\v');
00647 }
00648
00649 static inline int xtolower(int c) {
00650 return ((xisupper(c)) ? (c | ('a' - 'A')) : c);
00651 }
00652 static inline int xtoupper(int c) {
00653 return ((xislower(c)) ? (c & ~('a' - 'A')) : c);
00654 }
00655
00659 int xstrcasecmp(const char * s1, const char * s2) ;
00660
00664 int xstrncasecmp(const char *s1, const char * s2, size_t n) ;
00665
00666 #ifdef __cplusplus
00667 }
00668 #endif
00669
00670 #endif