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 #ifdef NOTYET
00022 typedef struct pgpDig_s * pgpDig;
00023 #endif
00024
00033 #if !defined(__LCLINT__) && defined(__GLIBC__) && \
00034 (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2))
00035 #define USE_COOKIE_SEEK_POINTER 1
00036 typedef _IO_off64_t _libio_off_t;
00037 typedef _libio_off_t * _libio_pos_t;
00038 #else
00039 typedef off_t _libio_off_t;
00040 typedef off_t _libio_pos_t;
00041 #endif
00042
00046 typedef struct _FD_s * FD_t;
00047
00050 typedef struct FDIO_s * FDIO_t;
00051
00052 #ifdef __cplusplus
00053 extern "C" {
00054 #endif
00055
00060
00063 typedef ssize_t (*fdio_read_function_t) (void *cookie, char *buf, size_t nbytes)
00064
00065 ;
00066
00069 typedef ssize_t (*fdio_write_function_t) (void *cookie, const char *buf, size_t nbytes)
00070
00071 ;
00072
00075 typedef int (*fdio_seek_function_t) (void *cookie, _libio_pos_t pos, int whence)
00076
00077 ;
00078
00081 typedef int (*fdio_close_function_t) (void *cookie)
00082
00083 ;
00084
00085
00088 typedef FD_t (*fdio_ref_function_t) ( void * cookie,
00089 const char * msg, const char * file, unsigned line)
00090
00091 ;
00092
00095 typedef FD_t (*fdio_deref_function_t) ( FD_t fd,
00096 const char * msg, const char * file, unsigned line)
00097
00098 ;
00099
00100
00103 typedef FD_t (*fdio_new_function_t) (const char * msg,
00104 const char * file, unsigned line)
00105
00106 ;
00107
00108
00111 typedef int (*fdio_fileno_function_t) (void * cookie)
00112
00113 ;
00114
00115
00118 typedef FD_t (*fdio_open_function_t) (const char * path, int flags, mode_t mode)
00119
00120 ;
00121
00124 typedef FD_t (*fdio_fopen_function_t) (const char * path, const char * fmode)
00125
00126 ;
00127
00130 typedef void * (*fdio_ffileno_function_t) (FD_t fd)
00131
00132 ;
00133
00136 typedef int (*fdio_fflush_function_t) (FD_t fd)
00137
00138 ;
00146
00149 typedef int (*fdio_mkdir_function_t) (const char * path, mode_t mode)
00150
00151 ;
00152
00155 typedef int (*fdio_chdir_function_t) (const char * path)
00156
00157 ;
00158
00161 typedef int (*fdio_rmdir_function_t) (const char * path)
00162
00163 ;
00164
00167 typedef int (*fdio_rename_function_t) (const char * oldpath, const char * newpath)
00168
00169 ;
00170
00173 typedef int (*fdio_unlink_function_t) (const char * path)
00174
00175 ;
00176
00177
00180 typedef int (*fdio_stat_function_t) (const char * path, struct stat * st)
00181
00182 ;
00183
00186 typedef int (*fdio_lstat_function_t) (const char * path, struct stat * st)
00187
00188 ;
00189
00192 typedef int (*fdio_access_function_t) (const char * path, int amode)
00193
00194 ;
00195
00201 struct FDIO_s {
00202 fdio_read_function_t read;
00203 fdio_write_function_t write;
00204 fdio_seek_function_t seek;
00205 fdio_close_function_t close;
00206
00207 fdio_ref_function_t _fdref;
00208 fdio_deref_function_t _fdderef;
00209 fdio_new_function_t _fdnew;
00210 fdio_fileno_function_t _fileno;
00211
00212 fdio_open_function_t _open;
00213 fdio_fopen_function_t _fopen;
00214 fdio_ffileno_function_t _ffileno;
00215 fdio_fflush_function_t _fflush;
00216
00217 fdio_mkdir_function_t _mkdir;
00218 fdio_chdir_function_t _chdir;
00219 fdio_rmdir_function_t _rmdir;
00220 fdio_rename_function_t _rename;
00221 fdio_unlink_function_t _unlink;
00222 };
00223
00224
00229
00233
00234 const char * Fstrerror( FD_t fd)
00235 ;
00236
00237
00241 size_t Fread( void * buf, size_t size, size_t nmemb, FD_t fd)
00242
00243 ;
00244
00248 size_t Fwrite(const void * buf, size_t size, size_t nmemb, FD_t fd)
00249
00250 ;
00251
00255 int Fseek(FD_t fd, _libio_off_t offset, int whence)
00256
00257 ;
00258
00262 int Fclose( FD_t fd)
00263
00264 ;
00265
00268 FD_t Fdopen(FD_t ofd, const char * fmode)
00269
00270 ;
00271
00275 FD_t Fopen( const char * path,
00276 const char * fmode)
00277
00278 ;
00279
00280
00284 int Fflush( FD_t fd)
00285
00286 ;
00287
00291 int Ferror( FD_t fd)
00292 ;
00293
00297 int Fileno(FD_t fd)
00298
00299 ;
00300
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 Chdir(const char * path)
00326
00327 ;
00328
00332 int Rmdir(const char * path)
00333
00334 ;
00335
00339 int Rename(const char * oldpath, const char * newpath)
00340
00341 ;
00342
00346 int Link(const char * oldpath, const char * newpath)
00347
00348 ;
00349
00353 int Unlink(const char * path)
00354
00355 ;
00356
00360 int Readlink(const char * path, char * buf, size_t bufsiz)
00361
00362 ;
00363
00367 int Stat(const char * path, struct stat * st)
00368
00369 ;
00370
00374 int Lstat(const char * path, struct stat * st)
00375
00376 ;
00377
00381 int Access(const char * path, int amode)
00382
00383 ;
00384
00385
00389 int Glob(const char * pattern, int flags,
00390 int errfunc(const char * epath, int eerrno),
00391 glob_t * pglob)
00392
00393 ;
00394
00398 void Globfree( glob_t * pglob)
00399
00400 ;
00401
00402
00406
00407 DIR * Opendir(const char * path)
00408
00409 ;
00410
00414 struct dirent * Readdir(DIR * dir)
00415
00416 ;
00417
00421 int Closedir( DIR * dir)
00422
00423 ;
00424
00432
00435 off_t fdSize(FD_t fd)
00436
00437 ;
00438
00441 FD_t fdDup(int fdno)
00442
00443 ;
00444
00445 #ifdef UNUSED
00446 FILE *fdFdopen( void * cookie, const char * mode);
00447 #endif
00448
00449
00450
00451
00454 #ifndef H_RPMIO_INTERNAL
00455 int fdFileno(void * cookie)
00456 ;
00457 #define fdFileno(_fd) fdio->_fileno(_fd)
00458 #endif
00459
00462 FD_t fdOpen(const char *path, int flags, mode_t mode)
00463
00464 ;
00465 #define fdOpen(_path, _flags, _mode) fdio->_open((_path), (_flags), (_mode))
00466
00469 ssize_t fdRead(void * cookie, char * buf, size_t count)
00470
00471 ;
00472 #define fdRead(_fd, _buf, _count) fdio->read((_fd), (_buf), (_count))
00473
00476 ssize_t fdWrite(void * cookie, const char * buf, size_t count)
00477
00478 ;
00479 #define fdWrite(_fd, _buf, _count) fdio->write((_fd), (_buf), (_count))
00480
00483 int fdClose( void * cookie)
00484
00485 ;
00486 #define fdCLose(_fd) fdio->close(_fd)
00487
00490
00491
00492 FD_t fdLink ( void * cookie, const char * msg)
00493
00494 ;
00495 #define fdLink(_fd, _msg) fdio->_fdref(_fd, _msg, __FILE__, __LINE__)
00496
00499
00500
00501 FD_t fdFree( FD_t fd, const char * msg)
00502
00503 ;
00504 #define fdFree(_fd, _msg) fdio->_fdderef(_fd, _msg, __FILE__, __LINE__)
00505
00508
00509
00510 FD_t fdNew (const char * msg)
00511
00512 ;
00513 #define fdNew(_msg) fdio->_fdnew(_msg, __FILE__, __LINE__)
00514
00517 int fdWritable(FD_t fd, int secs)
00518
00519 ;
00520
00523 int fdReadable(FD_t fd, int secs)
00524
00525 ;
00526
00527
00531
00532 typedef enum ftperrCode_e {
00533 FTPERR_BAD_SERVER_RESPONSE = -1,
00534 FTPERR_SERVER_IO_ERROR = -2,
00535 FTPERR_SERVER_TIMEOUT = -3,
00536 FTPERR_BAD_HOST_ADDR = -4,
00537 FTPERR_BAD_HOSTNAME = -5,
00538 FTPERR_FAILED_CONNECT = -6,
00539 FTPERR_FILE_IO_ERROR = -7,
00540 FTPERR_PASSIVE_ERROR = -8,
00541 FTPERR_FAILED_DATA_CONNECT = -9,
00542 FTPERR_FILE_NOT_FOUND = -10,
00543 FTPERR_NIC_ABORT_IN_PROGRESS= -11,
00544 FTPERR_UNKNOWN = -100
00545 } ftperrCode;
00546
00547
00550
00551 const char *const ftpStrerror(int errorNumber) ;
00552
00553
00556
00557 void * ufdGetUrlinfo(FD_t fd)
00558 ;
00559
00562
00563
00564 const char * urlStrerror(const char * url) ;
00565
00566
00569
00570 int ufdCopy(FD_t sfd, FD_t tfd)
00571
00572 ;
00573
00574
00577 int ufdGetFile( FD_t sfd, FD_t tfd)
00578
00579 ;
00580
00583 int timedRead(FD_t fd, void * bufptr, int length)
00584
00585 ;
00586 #define timedRead ufdio->read
00587
00588
00591 extern FDIO_t fdio;
00592
00595 extern FDIO_t fpio;
00596
00599 extern FDIO_t ufdio;
00600
00603 extern FDIO_t gzdio;
00604
00607 extern FDIO_t bzdio;
00608
00611 extern FDIO_t fadio;
00612
00615 static inline int xislower(int c) {
00616 return (c >= 'a' && c <= 'z');
00617 }
00618 static inline int xisupper(int c) {
00619 return (c >= 'A' && c <= 'Z');
00620 }
00621 static inline int xisalpha(int c) {
00622 return (xislower(c) || xisupper(c));
00623 }
00624 static inline int xisdigit(int c) {
00625 return (c >= '0' && c <= '9');
00626 }
00627 static inline int xisalnum(int c) {
00628 return (xisalpha(c) || xisdigit(c));
00629 }
00630 static inline int xisblank(int c) {
00631 return (c == ' ' || c == '\t');
00632 }
00633 static inline int xisspace(int c) {
00634 return (xisblank(c) || c == '\n' || c == '\r' || c == '\f' || c == '\v');
00635 }
00636
00637 static inline int xtolower(int c) {
00638 return ((xisupper(c)) ? (c | ('a' - 'A')) : c);
00639 }
00640 static inline int xtoupper(int c) {
00641 return ((xislower(c)) ? (c & ~('a' - 'A')) : c);
00642 }
00643
00647 int xstrcasecmp(const char * s1, const char * s2) ;
00648
00652 int xstrncasecmp(const char *s1, const char * s2, size_t n) ;
00653
00654 #ifdef __cplusplus
00655 }
00656 #endif
00657
00658 #endif