rpm
5.2.1
|
00001 #ifndef H_RPMIO 00002 #define H_RPMIO 00003 00009 #include <sys/types.h> 00010 #include <sys/stat.h> 00011 #include <dirent.h> 00012 #include <stdio.h> 00013 #include <stdlib.h> 00014 #include <unistd.h> 00015 00016 #include <rpmiotypes.h> 00017 #include <rpmzlog.h> 00018 00026 #if !defined(__LCLINT__) && !defined(__UCLIBC__) && defined(__GLIBC__) && \ 00027 (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)) 00028 #define USE_COOKIE_SEEK_POINTER 1 00029 typedef _IO_off64_t _libio_off_t; 00030 typedef _libio_off_t * _libio_pos_t; 00031 #else 00032 typedef off_t _libio_off_t; 00033 typedef off_t _libio_pos_t; 00034 #endif 00035 00039 typedef /*@abstract@*/ /*@refcounted@*/ struct _FD_s * FD_t; 00040 00043 typedef /*@observer@*/ struct FDIO_s * FDIO_t; 00044 00045 #ifdef __cplusplus 00046 extern "C" { 00047 #endif 00048 00053 00056 typedef ssize_t (*fdio_read_function_t) (void *cookie, char *buf, size_t nbytes) 00057 /*@globals errno, fileSystem @*/ 00058 /*@modifies *cookie, errno, fileSystem @*/ 00059 /*@requires maxSet(buf) >= (nbytes - 1) @*/ 00060 /*@ensures maxRead(buf) == result @*/ ; 00061 00064 typedef ssize_t (*fdio_write_function_t) (void *cookie, const char *buf, size_t nbytes) 00065 /*@globals errno, fileSystem @*/ 00066 /*@modifies *cookie, errno, fileSystem @*/; 00067 00070 typedef int (*fdio_seek_function_t) (void *cookie, _libio_pos_t pos, int whence) 00071 /*@globals errno, fileSystem @*/ 00072 /*@modifies *cookie, errno, fileSystem @*/; 00073 00076 typedef int (*fdio_close_function_t) (void *cookie) 00077 /*@globals errno, fileSystem, systemState @*/ 00078 /*@modifies *cookie, errno, fileSystem, systemState @*/; 00079 00082 typedef FD_t (*fdio_fopen_function_t) (const char * path, const char * fmode) 00083 /*@globals errno, fileSystem @*/ 00084 /*@modifies errno, fileSystem @*/; 00085 00088 typedef FD_t (*fdio_fdopen_function_t) (void * cookie, const char * fmode) 00089 /*@globals errno, fileSystem @*/ 00090 /*@modifies errno, fileSystem @*/; 00091 00094 typedef int (*fdio_flush_function_t) (void * cookie) 00095 /*@globals errno, fileSystem @*/ 00096 /*@modifies errno, fileSystem @*/; 00097 00103 struct FDIO_s { 00104 fdio_read_function_t read; 00105 fdio_write_function_t write; 00106 fdio_seek_function_t seek; 00107 fdio_close_function_t close; 00108 /*@null@*/ 00109 fdio_fopen_function_t _fopen; 00110 /*@null@*/ 00111 fdio_fdopen_function_t _fdopen; 00112 /*@null@*/ 00113 fdio_flush_function_t _flush; 00114 }; 00115 00116 00121 00125 /*@observer@*/ const char * Fstrerror(/*@null@*/ FD_t fd) 00126 /*@*/; 00127 00131 /*@-incondefs@*/ 00132 size_t Fread(/*@out@*/ void * buf, size_t size, size_t nmemb, FD_t fd) 00133 /*@globals fileSystem @*/ 00134 /*@modifies fd, *buf, fileSystem @*/ 00135 /*@requires maxSet(buf) >= (nmemb - 1) @*/; 00136 /*@=incondefs@*/ 00137 00141 /*@-incondefs@*/ 00142 size_t Fwrite(const void * buf, size_t size, size_t nmemb, FD_t fd) 00143 /*@globals fileSystem @*/ 00144 /*@modifies fd, fileSystem @*/ 00145 /*@requires maxRead(buf) >= nmemb @*/; 00146 /*@=incondefs@*/ 00147 00151 int Fseek(FD_t fd, _libio_off_t offset, int whence) 00152 /*@globals fileSystem @*/ 00153 /*@modifies fileSystem @*/; 00154 00158 int Fclose( /*@killref@*/ FD_t fd) 00159 /*@globals fileSystem, internalState @*/ 00160 /*@modifies fd, fileSystem, internalState @*/; 00161 00164 /*@null@*/ FD_t Fdopen(FD_t ofd, const char * fmode) 00165 /*@globals fileSystem, internalState @*/ 00166 /*@modifies ofd, fileSystem, internalState @*/; 00167 00171 /*@null@*/ FD_t Fopen(/*@null@*/ const char * path, 00172 /*@null@*/ const char * fmode) 00173 /*@globals h_errno, fileSystem, internalState @*/ 00174 /*@modifies fileSystem, internalState @*/; 00175 00176 00180 int Fflush(/*@null@*/ FD_t fd) 00181 /*@globals fileSystem @*/ 00182 /*@modifies fd, fileSystem @*/; 00183 00187 int Ferror(/*@null@*/ FD_t fd) 00188 /*@*/; 00189 00193 int Fileno(FD_t fd) 00194 /*@globals fileSystem @*/ 00195 /*@modifies fileSystem@*/; 00196 00200 /*@unused@*/ 00201 int Fcntl(FD_t fd, int op, void *lip) 00202 /*@globals errno, fileSystem @*/ 00203 /*@modifies fd, *lip, errno, fileSystem @*/; 00204 00211 00215 int Mkdir(const char * path, mode_t mode) 00216 /*@globals errno, h_errno, fileSystem, internalState @*/ 00217 /*@modifies errno, fileSystem, internalState @*/; 00218 00222 int Chdir(const char * path) 00223 /*@globals errno, h_errno, fileSystem, internalState @*/ 00224 /*@modifies errno, fileSystem, internalState @*/; 00225 00229 int Rmdir(const char * path) 00230 /*@globals errno, h_errno, fileSystem, internalState @*/ 00231 /*@modifies errno, fileSystem, internalState @*/; 00232 00233 /*@unchecked@*/ /*@observer@*/ /*@null@*/ 00234 extern const char * _chroot_prefix; 00235 00240 int Chroot(const char * path) 00241 /*@globals _chroot_prefix, errno, fileSystem, internalState @*/ 00242 /*@modifies _chroot_prefix, errno, fileSystem, internalState @*/; 00243 00248 int Open(const char * path, int flags, mode_t mode) 00249 /*@globals errno, fileSystem, internalState @*/ 00250 /*@modifies errno, fileSystem, internalState @*/; 00251 00255 int Rename(const char * oldpath, const char * newpath) 00256 /*@globals errno, h_errno, fileSystem, internalState @*/ 00257 /*@modifies errno, fileSystem, internalState @*/; 00258 00262 int Link(const char * oldpath, const char * newpath) 00263 /*@globals errno, fileSystem, internalState @*/ 00264 /*@modifies errno, fileSystem, internalState @*/; 00265 00269 int Unlink(const char * path) 00270 /*@globals errno, h_errno, fileSystem, internalState @*/ 00271 /*@modifies errno, fileSystem, internalState @*/; 00272 00276 int Stat(const char * path, /*@out@*/ struct stat * st) 00277 /*@globals errno, h_errno, fileSystem, internalState @*/ 00278 /*@modifies *st, errno, fileSystem, internalState @*/; 00279 00283 int Lstat(const char * path, /*@out@*/ struct stat * st) 00284 /*@globals errno, h_errno, fileSystem, internalState @*/ 00285 /*@modifies *st, errno, fileSystem, internalState @*/; 00286 00290 int Fstat(FD_t fd, /*@out@*/ struct stat * st) 00291 /*@globals errno, fileSystem, internalState @*/ 00292 /*@modifies *st, errno, fileSystem, internalState @*/; 00293 00298 int Chown(const char * path, uid_t owner, gid_t group) 00299 /*@globals errno, fileSystem, internalState @*/ 00300 /*@modifies errno, fileSystem, internalState @*/; 00301 00306 int Fchown(FD_t fd, uid_t owner, gid_t group) 00307 /*@globals errno, fileSystem, internalState @*/ 00308 /*@modifies errno, fileSystem, internalState @*/; 00309 00314 int Lchown(const char * path, uid_t owner, gid_t group) 00315 /*@globals errno, fileSystem, internalState @*/ 00316 /*@modifies errno, fileSystem, internalState @*/; 00317 00322 int Chmod(const char * path, mode_t mode) 00323 /*@globals errno, fileSystem, internalState @*/ 00324 /*@modifies errno, fileSystem, internalState @*/; 00325 00330 int Fchmod(FD_t fd, mode_t mode) 00331 /*@globals errno, fileSystem, internalState @*/ 00332 /*@modifies errno, fileSystem, internalState @*/; 00333 00338 int Mkfifo(const char * path, mode_t mode) 00339 /*@globals errno, fileSystem, internalState @*/ 00340 /*@modifies errno, fileSystem, internalState @*/; 00341 00346 int Mknod(const char * path, mode_t mode, dev_t dev) 00347 /*@globals errno, fileSystem, internalState @*/ 00348 /*@modifies errno, fileSystem, internalState @*/; 00349 00354 struct utimbuf; 00355 int Utime(const char * path, const struct utimbuf * buf) 00356 /*@globals errno, fileSystem, internalState @*/ 00357 /*@modifies errno, fileSystem, internalState @*/; 00358 00363 int Utimes(const char * path, const struct timeval * times) 00364 /*@globals errno, fileSystem, internalState @*/ 00365 /*@modifies errno, fileSystem, internalState @*/; 00366 00371 int Symlink(const char * oldpath, const char * newpath) 00372 /*@globals errno, fileSystem, internalState @*/ 00373 /*@modifies errno, fileSystem, internalState @*/; 00374 00379 /*@-incondefs@*/ 00380 int Readlink(const char * path, /*@out@*/ char * buf, size_t bufsiz) 00381 /*@globals errno, h_errno, fileSystem, internalState @*/ 00382 /*@modifies *buf, errno, fileSystem, internalState @*/; 00383 /*@=incondefs@*/ 00384 00389 int Access(const char * path, int amode) 00390 /*@globals errno, fileSystem @*/ 00391 /*@modifies errno, fileSystem @*/; 00392 00393 #if defined(__linux__) 00394 00397 int Mount(const char *source, const char *target, 00398 const char *filesystemtype, unsigned long mountflags, 00399 const void *data) 00400 /*@globals errno, fileSystem @*/ 00401 /*@modifies errno, fileSystem @*/; 00402 00406 int Umount(const char *target) 00407 /*@globals errno, fileSystem @*/ 00408 /*@modifies errno, fileSystem @*/; 00409 00413 int Umount2(const char *target, int flags) 00414 /*@globals errno, fileSystem @*/ 00415 /*@modifies errno, fileSystem @*/; 00416 #endif 00417 00421 int Glob_pattern_p (const char *pattern, int quote) 00422 /*@*/; 00423 00427 int Glob_error(const char * epath, int eerrno) 00428 /*@*/; 00429 00433 int Glob(const char * pattern, int flags, 00434 int errfunc(const char * epath, int eerrno), 00435 /*@out@*/ void * _pglob) 00436 /*@globals fileSystem @*/ 00437 /*@modifies *_pglob, fileSystem @*/; 00438 00442 void Globfree( /*@only@*/ void * _pglob) 00443 /*@globals fileSystem @*/ 00444 /*@modifies *_pglob, fileSystem @*/; 00445 00446 00450 /*@null@*/ 00451 DIR * Opendir(const char * path) 00452 /*@globals errno, h_errno, fileSystem, internalState @*/ 00453 /*@modifies errno, fileSystem, internalState @*/; 00454 00458 /*@dependent@*/ /*@null@*/ 00459 struct dirent * Readdir(DIR * dir) 00460 /*@globals errno, fileSystem @*/ 00461 /*@modifies *dir, errno, fileSystem @*/; 00462 00466 int Closedir(/*@only@*/ DIR * dir) 00467 /*@globals errno, fileSystem @*/ 00468 /*@modifies *dir, errno, fileSystem @*/; 00469 00473 /*@-globuse@*/ 00474 /*@null@*/ 00475 char * Realpath(const char * path, /*@out@*/ /*@null@*/ char * resolved_path) 00476 /*@globals errno, fileSystem, internalState @*/ 00477 /*@modifies resolved_path, errno, fileSystem, internalState @*/; 00478 /*@=globuse@*/ 00479 00484 off_t Lseek(int fdno, off_t offset, int whence) 00485 /*@globals errno, fileSystem @*/ 00486 /*@modifies errno, fileSystem @*/; 00487 00495 00498 /*@null@*/ FD_t fdDup(int fdno) 00499 /*@globals fileSystem, internalState @*/ 00500 /*@modifies fileSystem, internalState @*/; 00501 00502 /*@-exportlocal@*/ 00505 ssize_t fdRead(void * cookie, /*@out@*/ char * buf, size_t count) 00506 /*@globals errno, fileSystem, internalState @*/ 00507 /*@modifies *cookie, *buf, errno, fileSystem, internalState @*/; 00508 #define fdRead(_fd, _buf, _count) fdio->read((_fd), (_buf), (_count)) 00509 00512 ssize_t fdWrite(void * cookie, const char * buf, size_t count) 00513 /*@globals errno, fileSystem, internalState @*/ 00514 /*@modifies *cookie, errno, fileSystem, internalState @*/; 00515 #define fdWrite(_fd, _buf, _count) fdio->write((_fd), (_buf), (_count)) 00516 00519 int fdClose( /*@only@*/ void * cookie) 00520 /*@globals errno, fileSystem, systemState, internalState @*/ 00521 /*@modifies *cookie, errno, fileSystem, systemState, internalState @*/; 00522 #define fdClose(_fd) fdio->close(_fd) 00523 00526 /*@null@*/ FD_t fdOpen(const char *path, int flags, mode_t mode) 00527 /*@globals errno, fileSystem, internalState @*/ 00528 /*@modifies errno, fileSystem, internalState @*/; 00529 #define fdOpen(_path, _flags, _mode) fdio->_open((_path), (_flags), (_mode)) 00530 00533 /*@unused@*/ 00534 /*@newref@*/ /*@null@*/ 00535 FD_t fdLink (void * cookie, const char * msg) 00536 /*@globals fileSystem @*/ 00537 /*@modifies *cookie, fileSystem @*/; 00538 #define fdLink(_fd, _msg) \ 00539 ((FD_t)rpmioLinkPoolItem((rpmioItem)(_fd), _msg, __FILE__, __LINE__)) 00540 00543 /*@unused@*/ /*@null@*/ 00544 FD_t fdFree(/*@killref@*/ FD_t fd, const char * msg) 00545 /*@globals fileSystem @*/ 00546 /*@modifies fd, fileSystem @*/; 00547 #define fdFree(_fd, _msg) \ 00548 ((FD_t)rpmioFreePoolItem((rpmioItem)(_fd), _msg, __FILE__, __LINE__)) 00549 00552 /*@unused@*/ 00553 /*@newref@*/ /*@null@*/ 00554 FD_t fdNew (const char * msg) 00555 /*@globals fileSystem @*/ 00556 /*@modifies fileSystem @*/; 00557 /*@newref@*/ /*@null@*/ 00558 FD_t XfdNew (const char * msg, const char * fn, unsigned ln) 00559 /*@globals fileSystem @*/ 00560 /*@modifies fileSystem @*/; 00561 #define fdNew(_msg) XfdNew(_msg, __FILE__, __LINE__) 00562 00565 int fdWritable(FD_t fd, int secs) 00566 /*@globals errno, fileSystem @*/ 00567 /*@modifies fd, errno, fileSystem @*/; 00568 00571 int fdReadable(FD_t fd, int secs) 00572 /*@globals errno @*/ 00573 /*@modifies fd, errno @*/; 00574 /*@=exportlocal@*/ 00575 00584 int rpmioMkpath(const char * path, mode_t mode, uid_t uid, gid_t gid) 00585 /*@globals h_errno, fileSystem, internalState @*/ 00586 /*@modifies fileSystem, internalState @*/; 00587 00595 int rpmioAccess(const char *FN, /*@null@*/ const char * path, int mode) 00596 /*@globals fileSystem, internalState @*/ 00597 /*@modifies fileSystem, internalState @*/; 00598 00604 extern char * (*Getpass) (const char * prompt) 00605 /*@*/; 00606 char * _GetPass (const char * prompt) 00607 /*@*/; 00608 char * _RequestPass (const char * prompt) 00609 /*@*/; 00610 00614 /*@-typeuse@*/ 00615 typedef enum ftperrCode_e { 00616 FTPERR_NE_ERROR = -1, 00617 FTPERR_NE_LOOKUP = -2, 00618 FTPERR_NE_AUTH = -3, 00619 FTPERR_NE_PROXYAUTH = -4, 00620 FTPERR_NE_CONNECT = -5, 00621 FTPERR_NE_TIMEOUT = -6, 00622 FTPERR_NE_FAILED = -7, 00623 FTPERR_NE_RETRY = -8, 00624 FTPERR_NE_REDIRECT = -9, 00626 FTPERR_BAD_SERVER_RESPONSE = -81, 00627 FTPERR_SERVER_IO_ERROR = -82, 00628 FTPERR_SERVER_TIMEOUT = -83, 00629 FTPERR_BAD_HOST_ADDR = -84, 00630 FTPERR_BAD_HOSTNAME = -85, 00631 FTPERR_FAILED_CONNECT = -86, 00632 FTPERR_FILE_IO_ERROR = -87, 00633 FTPERR_PASSIVE_ERROR = -88, 00634 FTPERR_FAILED_DATA_CONNECT = -89, 00635 FTPERR_FILE_NOT_FOUND = -90, 00636 FTPERR_NIC_ABORT_IN_PROGRESS= -91, 00637 FTPERR_UNKNOWN = -100 00638 } ftperrCode; 00639 /*@=typeuse@*/ 00640 00643 /*@-redecl@*/ 00644 /*@observer@*/ 00645 const char * ftpStrerror(int errorNumber) 00646 /*@*/; 00647 /*@=redecl@*/ 00648 00651 /*@unused@*/ 00652 /*@dependent@*/ /*@null@*/ 00653 void * ufdGetUrlinfo(FD_t fd) 00654 /*@globals fileSystem @*/ 00655 /*@modifies fd, fileSystem @*/; 00656 00659 /*@-redecl@*/ 00660 /*@unused@*/ 00661 /*@observer@*/ 00662 const char * urlStrerror(const char * url) 00663 /*@globals h_errno, internalState @*/ 00664 /*@modifies internalState @*/; 00665 /*@=redecl@*/ 00666 00669 /*@-exportlocal@*/ 00670 int ufdCopy(FD_t sfd, FD_t tfd) 00671 /*@globals fileSystem @*/ 00672 /*@modifies sfd, tfd, fileSystem @*/; 00673 /*@=exportlocal@*/ 00674 00677 int ufdGetFile( /*@killref@*/ FD_t sfd, FD_t tfd) 00678 /*@globals fileSystem, internalState @*/ 00679 /*@modifies sfd, tfd, fileSystem, internalState @*/; 00680 00681 /*@-exportlocal@*/ 00684 /*@observer@*/ /*@unchecked@*/ extern FDIO_t fdio; 00685 00688 /*@observer@*/ /*@unchecked@*/ extern FDIO_t fpio; 00689 00692 /*@observer@*/ /*@unchecked@*/ extern FDIO_t ufdio; 00693 00696 /*@observer@*/ /*@unchecked@*/ extern FDIO_t gzdio; 00697 00700 /*@observer@*/ /*@unchecked@*/ extern FDIO_t bzdio; 00701 00704 /*@observer@*/ /*@unchecked@*/ extern FDIO_t lzdio; 00705 00708 /*@observer@*/ /*@unchecked@*/ extern FDIO_t xzdio; 00709 00710 /*@=exportlocal@*/ 00713 /*@unchecked@*/ /*@only@*/ /*@null@*/ 00714 extern rpmioPool _fdPool; 00715 00719 void rpmioClean(void) 00720 /*@globals _fdPool, fileSystem, internalState @*/ 00721 /*@modifies _fdPool, fileSystem, internalState @*/; 00722 00728 /*@null@*/ 00729 rpmioPool rpmioFreePool(/*@only@*//*@null@*/ rpmioPool pool) 00730 /*@globals fileSystem, internalState @*/ 00731 /*@modifies pool, fileSystem, internalState @*/; 00732 00744 rpmioPool rpmioNewPool(/*@observer@*/ const char * name, 00745 size_t size, int limit, int flags, 00746 /*@null@*/ const char * (*dbg) (void *item), 00747 /*@null@*/ void (*init) (void *item), 00748 /*@null@*/ void (*fini) (void *item)) 00749 /*@globals fileSystem @*/ 00750 /*@modifies fileSystem @*/; 00751 00760 /*@null@*/ 00761 rpmioItem rpmioUnlinkPoolItem(/*@killref@*/ /*@null@*/ rpmioItem item, 00762 const char * msg, const char * fn, unsigned ln) 00763 /*@globals fileSystem @*/ 00764 /*@modifies item, fileSystem @*/; 00765 00774 /*@newref@*/ /*@null@*/ 00775 rpmioItem rpmioLinkPoolItem(/*@returned@*/ /*@null@*/ rpmioItem item, 00776 const char * msg, const char * fn, unsigned ln) 00777 /*@globals fileSystem @*/ 00778 /*@modifies item, fileSystem @*/; 00779 00788 /*@null@*/ 00789 void * rpmioFreePoolItem(/*@killref@*/ /*@null@*/ rpmioItem item, 00790 const char * msg, const char * fn, unsigned ln) 00791 /*@globals fileSystem @*/ 00792 /*@modifies item, fileSystem @*/; 00793 00800 rpmioItem rpmioGetPool(/*@kept@*/ /*@null@*/ rpmioPool pool, size_t size) 00801 /*@globals fileSystem @*/ 00802 /*@modifies pool, fileSystem @*/; 00803 00809 /*@null@*/ 00810 rpmioItem rpmioPutPool(rpmioItem item) 00811 /*@globals fileSystem @*/ 00812 /*@modifies item, fileSystem @*/; 00813 00814 #ifdef __cplusplus 00815 } 00816 #endif 00817 00818 #endif /* H_RPMIO */