# rpmio/rpmio.c File Reference

`#include "system.h"`
`#include <stdarg.h>`
`#include <netdb.h>`
`#include <netinet/in.h>`
`#include <arpa/inet.h>`
`#include <rpmmacro.h>`
`#include <rpmlua.h>`
`#include <rpmio_internal.h>`
`#include <rpmdav.h>`
`#include "ugid.h"`
`#include <rpmlog.h>`
`#include "debug.h"`
`#include <stddef.h>`
Include dependency graph for rpmio.c:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

## Data Structures

struct | _CBuffer
struct | lzfile

## Defines

#define | IPPORT_FTP 21
#define | IPPORT_HTTP 80
#define | inet_aton(cp, inp) rpm_inet_aton(cp,inp)
#define | fdOpen __fdOpen
#define | fdRead __fdRead
#define | fdWrite __fdWrite
#define | fdClose __fdClose
#define | FDNREFS(fd) (fd ? ((FD_t)fd)->nrefs : -9)
#define | FDTO(fd) (fd ? ((FD_t)fd)->rd_timeoutsecs : -99)
#define | FDCPIOPOS(fd) (fd ? ((FD_t)fd)->fd_cpioPos : -99)
#define | FDONLY(fd) assert(fdGetIo(fd) == fdio)
#define | GZDONLY(fd) assert(fdGetIo(fd) == gzdio)
#define | BZDONLY(fd) assert(fdGetIo(fd) == bzdio)
#define | LZDONLY(fd) assert(fdGetIo(fd) == lzdio)
#define | UFDONLY(fd)
#define | fdGetFILE(_fd) ((FILE *)fdGetFp(_fd))
#define | TIMEOUT_SECS 60
#define | IAC ((unsigned char)255)
#define | IP ((unsigned char)244)
#define | DM ((unsigned char)242)
#define | SHUT_RDWR 1+1
#define | kInBufferSize (1 << 15)
#define | FDIOVEC(_fd, _vec) ((fdGetIo(_fd) && fdGetIo(_fd)->_vec) ? fdGetIo(_fd)->_vec : NULL)
#define | _PATH "/bin:/usr/bin:/sbin:/usr/sbin"
#define | alloca_strdup(_s) strcpy(alloca(strlen(_s)+1), (_s))

## Typedefs

typedef struct _CBuffer | CBuffer
typedef struct lzfile | LZFILE

## Functions

static int | rpm_inet_aton (const char *cp, struct in_addr *inp)
static const char * | fdbg (FD_t fd)
off_t | fdSize (FD_t fd)
FD_t | fdDup (int fdno)
static int | fdSeekNot (void *cookie, _libio_pos_t pos, int whence)
static FD_t | XfdLink (void *cookie, const char *msg, const char *file, unsigned line)
static FD_t | XfdFree (FD_t fd, const char *msg, const char *file, unsigned line)
static FD_t | XfdNew (const char *msg, const char *file, unsigned line)
static ssize_t | fdRead (void *cookie, char *buf, size_t count)
static ssize_t | fdWrite (void *cookie, const char *buf, size_t count)
static int | fdSeek (void *cookie, _libio_pos_t pos, int whence)
static int | fdClose (void *cookie)
static FD_t | fdOpen (const char *path, int flags, mode_t mode)
int | fdWritable (FD_t fd, int secs)
int | fdReadable (FD_t fd, int secs)
int | fdFgets (FD_t fd, char *buf, size_t len)
const char * | ftpStrerror (int errorNumber)
const char * | urlStrerror (const char *url)
static int | mygethostbyname (const char *host, struct in_addr *address)
static int | getHostAddress (const char *host, struct in_addr *address)
static int | tcpConnect (FD_t ctrl, const char *host, int port)
static int | checkResponse (void *uu, FD_t ctrl, int *ecp, char **str)
static int | ftpCheckResponse (urlinfo u, char **str)
static int | ftpCommand (urlinfo u, char **str,...)
static int | ftpLogin (urlinfo u)
int | ftpReq (FD_t data, const char *ftpCmd, const char *ftpArg)
void | urlSetCallback (rpmCallbackFunction notify, void *notifyData, int notifyCount)
int | ufdCopy (FD_t sfd, FD_t tfd)
static int | urlConnect (const char *url, urlinfo *uret)
int | ufdGetFile (FD_t sfd, FD_t tfd)
int | ftpCmd (const char *cmd, const char *url, const char *arg2)
static int | ftpAbort (urlinfo u, FD_t data)
static int | ftpFileDone (urlinfo u, FD_t data)
static int | httpResp (urlinfo u, FD_t ctrl, char **str)
static int | httpReq (FD_t ctrl, const char *httpCmd, const char *httpArg)
void * | ufdGetUrlinfo (FD_t fd)
static ssize_t | ufdRead (void *cookie, char *buf, size_t count)
static ssize_t | ufdWrite (void *cookie, const char *buf, size_t count)
static int | ufdSeek (void *cookie, _libio_pos_t pos, int whence)
int | ufdClose (void *cookie)
FD_t | ftpOpen (const char *url, int flags, mode_t mode, urlinfo *uret)
static FD_t | ufdOpen (const char *url, int flags, mode_t mode)
static size_t | MyReadFile (FILE *file, void *data, size_t size)
static int | MyReadFileAndCheck (FILE *file, void *data, size_t size)
static int | LzmaReadCompressed (void *object, const unsigned char **buffer, size_t *size)
static void * | lzdFileno (FD_t fd)
static FD_t | lzdWriteOpen (int fdno, int fopen, const char *mode)
static FD_t | lzdReadOpen (int fdno, int fopen)
static FD_t | lzdOpen (const char *path, const char *mode)
static FD_t | lzdFdopen (void *cookie, const char *fmode)
static int | lzdFlush (FD_t fd)
static ssize_t | lzdRead (void *cookie, char *buf, size_t count)
static ssize_t | lzdWrite (void *cookie, const char *buf, size_t count)
static int | lzdSeek (void *cookie, _libio_pos_t pos, int whence)
static int | lzdClose (void *cookie)
static const char * | getFdErrstr (FD_t fd)
const char * | Fstrerror (FD_t fd)
| strerror(3) clone.
size_t | Fread (void *buf, size_t size, size_t nmemb, FD_t fd)
| fread(3) clone.
size_t | Fwrite (const void *buf, size_t size, size_t nmemb, FD_t fd)
| fwrite(3) clone.
int | Fseek (FD_t fd, _libio_off_t offset, int whence)
| fseek(3) clone.
int | Fclose (FD_t fd)
| fclose(3) clone.
static void | cvtfmode (const char *m, char *stdio, size_t nstdio, char *other, size_t nother, const char **end, int *f)
| Convert stdio fmode to open(2) mode, filtering out zlib/bzlib flags.
FD_t | Fdopen (FD_t ofd, const char *fmode)
FD_t | Fopen (const char *path, const char *fmode)
| fopen(3) clone.
int | Fflush (FD_t fd)
| fflush(3) clone.
int | Ferror (FD_t fd)
| ferror(3) clone.
int | Fileno (FD_t fd)
| fileno(3) clone.
int | Fcntl (FD_t fd, int op, void *lip)
| fcntl(2) clone.
int | rpmioMkpath (const char *path, mode_t mode, uid_t uid, gid_t gid)
| Insure that directories in path exist, creating as needed.
int | rpmioAccess (const char *FN, const char *path, int mode)
| Check FN access, expanding relative paths and twiddles.
int | rpmioSlurp (const char *fn, uint8_t **bp, ssize_t *blenp)
| Read an entire file into a buffer.
void | rpmioClean (void)
| Free all memory allocated by rpmio usage.

## Variables

int | noLibio = 1
static int | ftpTimeoutSecs = 60
int | _rpmio_debug = 0
int | _av_debug = 0
int | _ftp_debug = 0
int | _dav_debug = 0
static struct FDIO_s | fdio_s
FDIO_t | fdio = &fdio_s
static rpmCallbackFunction | urlNotify = NULL
static void * | urlNotifyData = NULL
static int | urlNotifyCount = -1
static struct FDIO_s | ufdio_s
FDIO_t | ufdio = &ufdio_s
static struct FDIO_s | lzdio_s
FDIO_t | lzdio = &lzdio_s
static const char * | _path = "/bin:/usr/bin:/sbin:/usr/sbin"
static struct FDIO_s | fpio_s
FDIO_t | fpio = &fpio_s

## Detailed Description

Definition in file rpmio.c.

## Define Documentation

#define _PATH "/bin:/usr/bin:/sbin:/usr/sbin"

Definition at line 4131 of file rpmio.c.

#define alloca_strdup | ( | _s |  | ) | strcpy(alloca(strlen(_s)+1), (_s))

Definition at line 4135 of file rpmio.c.

#define BZDONLY | ( | fd |  | ) | assert(fdGetIo(fd) == bzdio)

Definition at line 127 of file rpmio.c.

#define DM ((unsigned char)242)

Definition at line 1664 of file rpmio.c.

Referenced by ftpAbort().

#define fdClose __fdClose

Definition at line 109 of file rpmio.c.

Referenced by Fclose(), Fopen(), ftpAbort(), ftpLogin(), ftpReq(), httpReq(), and ufdClose().

#define FDCPIOPOS | ( | fd |  | ) | (fd ? ((FD_t)fd)->fd_cpioPos : -99)

Definition at line 123 of file rpmio.c.

#define fdGetFILE | ( | _fd |  | ) | ((FILE *)fdGetFp(_fd))

Definition at line 132 of file rpmio.c.

Referenced by argvFgets(), Fclose(), Ferror(), Fflush(), Fread(), Fseek(), Fwrite(), rdcl(), rpmdsCpuinfo(), rpmdsSysinfoFile(), and ufdClose().

#define FDIOVEC | ( | _fd,
|  | _vec |  | ) | ((fdGetIo(_fd) && fdGetIo(_fd)->_vec) ? fdGetIo(_fd)->_vec : NULL)

Definition at line 3544 of file rpmio.c.

Referenced by Fclose(), Fread(), Fseek(), and Fwrite().

#define FDNREFS | ( | fd |  | ) | (fd ? ((FD_t)fd)->nrefs : -9)

Definition at line 121 of file rpmio.c.

Referenced by XfdFree(), and XfdLink().

#define FDONLY | ( | fd |  | ) | assert(fdGetIo(fd) == fdio)

Definition at line 125 of file rpmio.c.

#define fdOpen __fdOpen

Definition at line 103 of file rpmio.c.

Referenced by Fopen(), and ufdOpen().

#define fdRead __fdRead

Definition at line 105 of file rpmio.c.

Referenced by fdFgets(), and ufdRead().

#define FDTO | ( | fd |  | ) | (fd ? ((FD_t)fd)->rd_timeoutsecs : -99)

Definition at line 122 of file rpmio.c.

#define fdWrite __fdWrite

Definition at line 107 of file rpmio.c.

Referenced by ftpAbort(), ftpCommand(), ftpReq(), httpReq(), and ufdWrite().

#define GZDONLY | ( | fd |  | ) | assert(fdGetIo(fd) == gzdio)

Definition at line 126 of file rpmio.c.

#define IAC ((unsigned char)255)

Definition at line 1658 of file rpmio.c.

Referenced by ftpAbort().

#define inet_aton | ( | cp,
|  | inp |  | ) | rpm_inet_aton(cp,inp)

Definition at line 82 of file rpmio.c.

Referenced by ftpReq(), and getHostAddress().

#define IP ((unsigned char)244)

Definition at line 1661 of file rpmio.c.

Referenced by ftpAbort().

#define IPPORT_FTP 21

Definition at line 75 of file rpmio.c.

Referenced by ftpLogin(), and urlSplit().

#define IPPORT_HTTP 80

Definition at line 78 of file rpmio.c.

Referenced by urlSplit().

#define kInBufferSize (1 << 15)

Definition at line 2731 of file rpmio.c.

Referenced by LzmaReadCompressed().

#define LZDONLY | ( | fd |  | ) | assert(fdGetIo(fd) == lzdio)

Definition at line 128 of file rpmio.c.

Referenced by lzdSeek().

#define SHUT_RDWR 1+1

Definition at line 1667 of file rpmio.c.

Referenced by ftpAbort().

#define TIMEOUT_SECS 60

Definition at line 143 of file rpmio.c.

#define UFDONLY | ( | fd |  | ) |

Definition at line 130 of file rpmio.c.

Referenced by ufdClose(), ufdRead(), and ufdWrite().

## Typedef Documentation

typedef struct _CBuffer CBuffer

typedef struct lzfile LZFILE

## Function Documentation

static int checkResponse | ( | void * | uu,
|  | FD_t | ctrl,
|  | int * | ecp,
|  | char ** | str |
| ) |  |  | `[static]`

Definition at line 953 of file rpmio.c.

References _ftp_debug, _url_iobuf_size, urlinfo_s::allow, urlinfo_s::buf, urlinfo_s::bufAlloced, _FD_s::contentLength, fdFgets(), fdWritable(), FTPERR_BAD_SERVER_RESPONSE, urlinfo_s::httpVersion, _FD_s::persist, RPMURL_SERVER_HASRANGE, URLSANE, _FD_s::wr_chunked, and xcalloc().

Referenced by ftpCheckResponse(), and httpResp().

static void cvtfmode | ( | const char * | m,
|  | char * | stdio,
|  | size_t | nstdio,
|  | char * | other,
|  | size_t | nother,
|  | const char ** | end,
|  | int * | f |
| ) |  |  | `[inline, static]`

Convert stdio fmode to open(2) mode, filtering out zlib/bzlib flags.

returns stdio[0] = NUL on error.

Todo:
  glibc also supports ",ccs="

- glibc: m use mmap'd input

- glibc: c no cancel
- gzopen: [0-9] is compression level
- gzopen: 'f' is filtered (Z_FILTERED)
- gzopen: 'h' is Huffman encoding (Z_HUFFMAN_ONLY)
- bzopen: [1-9] is block size (modulo 100K)
- bzopen: 's' is smallmode
- HACK: '.' terminates, rest is type of I/O

Definition at line 3725 of file rpmio.c.

Referenced by Fdopen(), and Fopen().

int Fclose | ( | FD_t | fd | ) |

fclose(3) clone.

Definition at line 3624 of file rpmio.c.

References FDIO_s::close, DBGIO, fdbg(), fdClose, fdFree, fdGetFdno(), fdGetFILE, FDIOVEC, fdLink, _FDSTACK_s::fdno, fdPop(), FDSANE, fdSetFp(), _FDSTACK_s::fp, fpio, _FD_s::fps, _FDSTACK_s::io, _FD_s::nfps, noLibio, _FD_s::persist, _FD_s::req, and ufdClose().

Referenced by addFileToTagAux(), closeCallback(), closeSpec(), cpio_doio(), dodigest(), doIcon(), fsmStage(), IDTXglob(), isCompressed(), makeGPGSignature(), makeHDRSignature(), manageFile(), processPackageFiles(), readLineFromOFI(), rpmcliSign(), rpmdbExportInfo(), rpmdsCpuinfo(), rpmdsSysinfoFile(), rpmfd_dealloc(), rpmfd_free(), rpmfd_init(), rpmgiFree(), rpmgiLoadManifest(), rpmgiNext(), rpmgiOpen(), rpmgiReadHeader(), rpmHeaderFromFD(), rpmHeaderFromFile(), rpmInstallSource(), rpmInstallSourcePackage(), rpmioSlurp(), rpmLoadMacroFile(), rpmpsmStage(), rpmShowProgress(), rpmSingleHeaderFromFD(), rpmTempFile(), rpmts_dealloc(), rpmts_free(), rpmts_HdrFromFdno(), rpmtsCallback(), rpmtsRollback(), rpmtsSolve(), runScript(), showVerifyPackage(), ufdGetFile(), unsatisfiedDepend(), urlGetFile(), writeRPM(), and XurlFree().

int Fcntl | ( | FD_t | fd,
|  | int | op,
|  | void * | lip |
| ) |  |  |

fcntl(2) clone.

Definition at line 4074 of file rpmio.c.

References Fileno().

static const char* fdbg | ( | FD_t | fd | ) | `[static]`

Definition at line 172 of file rpmio.c.

References _FD_s::bytesRemain, bzdio, fdio, _FDSTACK_s::fdno, _FDSTACK_s::fp, fpio, _FD_s::fps, gzdio, _FDSTACK_s::io, lzdio, _FD_s::nfps, _FD_s::rd_timeoutsecs, ufdio, _FD_s::wr_chunked, and xzdio.

Referenced by Fclose(), fdClose(), fdDup(), Fdopen(), fdOpen(), fdRead(), fdSeek(), fdWrite(), Ferror(), Fileno(), Fread(), Fseek(), Fwrite(), lzdClose(), ufdOpen(), XfdFree(), and XfdLink().

static int fdClose | ( | void * | cookie | ) | `[static]`

Definition at line 502 of file rpmio.c.

References c2f(), DBGIO, fdbg(), fdFileno, fdFree, fdSetFdno(), FDSTAT_CLOSE, fdstat_enter(), fdstat_exit(), and _FD_s::req.

FD_t fdDup | ( | int | fdno | ) |

Definition at line 267 of file rpmio.c.

References DBGIO, fdbg(), fdNew, fdSetFdno(), and fdSetOpen().

Referenced by cpio_doio(), dodigest(), rpmHeaderFromFD(), rpmpsmStage(), rpmSingleHeaderFromFD(), rpmts_HdrFromFdno(), rpmts_setattro(), rpmtsCallback(), runScript(), showVerifyPackage(), and ufdOpen().

FD_t Fdopen | ( | FD_t | ofd,
|  | const char * | fmode |
| ) |  |  |

Definition at line 3800 of file rpmio.c.

References _rpmio_debug, FDIO_s::close, cvtfmode(), DBGIO, fdbg(), fdGetFp(), fdLink, fdPush(), FDSANE, fdSetFp(), Fileno(), fpio, lzdFdopen(), noLibio, FDIO_s::read, FDIO_s::seek, and FDIO_s::write.

Referenced by cpio_doio(), Fopen(), rpmpsmStage(), and rpmReadPackageManifest().

static FD_t fdOpen | ( | const char * | path,
|  | int | flags,
|  | mode_t | mode |
| ) |  |  | `[static]`

Definition at line 534 of file rpmio.c.

References DBGIO, fdbg(), fdNew, fdSetFdno(), fdSetOpen(), and _FD_s::flags.

static ssize_t fdRead | ( | void * | cookie,
|  | char * | buf,
|  | size_t | count |
| ) |  |  | `[static]`

Definition at line 409 of file rpmio.c.

References _FD_s::bytesRemain, c2f(), DBGIO, fdbg(), fdFileno, fdstat_enter(), fdstat_exit(), FDSTAT_READ, fdUpdateDigests(), _FD_s::ndigests, _FD_s::req, and _FD_s::xar.

int fdReadable | ( | FD_t | fd,
|  | int | secs |
| ) |  |  |

Definition at line 618 of file rpmio.c.

References errno, fdFileno, and _FD_s::req.

Referenced by fdFgets(), ftpAbort(), ufdClose(), and ufdRead().

static int fdSeek | ( | void * | cookie,
|  | _libio_pos_t | pos,
|  | int | whence |
| ) |  |  | `[inline, static]`

Definition at line 480 of file rpmio.c.

References _FD_s::bytesRemain, c2f(), DBGIO, fdbg(), fdFileno, fdstat_enter(), fdstat_exit(), and FDSTAT_SEEK.

Referenced by ufdSeek().

static int fdSeekNot | ( | void * | cookie,
|  | _libio_pos_t | pos,
|  | int | whence |
| ) |  |  | `[inline, static]`

Definition at line 285 of file rpmio.c.

References c2f(), and FDSANE.

off_t fdSize | ( | FD_t | fd | ) |

Definition at line 240 of file rpmio.c.

References _FD_s::contentLength, DBGIO, FDSANE, Fileno(), URL_IS_DASH, URL_IS_FTP, URL_IS_HKP, URL_IS_HTTP, URL_IS_HTTPS, URL_IS_PATH, URL_IS_UNKNOWN, and _FD_s::urlType.

Referenced by rpmioSlurp().

int fdWritable | ( | FD_t | fd,
|  | int | secs |
| ) |  |  |

Definition at line 563 of file rpmio.c.

References _rpmio_debug, errno, fdFileno, and _FD_s::req.

Referenced by checkResponse(), ftpLogin(), httpReq(), and ufdWrite().

static ssize_t fdWrite | ( | void * | cookie,
|  | const char * | buf,
|  | size_t | count |
| ) |  |  | `[static]`

Definition at line 449 of file rpmio.c.

References _FD_s::bytesRemain, c2f(), DBGIO, fdbg(), fdFileno, fdstat_enter(), fdstat_exit(), FDSTAT_WRITE, fdUpdateDigests(), _FD_s::ndigests, and _FD_s::req.

int Ferror | ( | FD_t | fd | ) |

ferror(3) clone.

Definition at line 4009 of file rpmio.c.

References DBGIO, _FD_s::errcookie, fdbg(), fdFileno, fdGetFILE, fpio, _FD_s::fps, _FDSTACK_s::io, _FD_s::nfps, _FD_s::req, and _FD_s::syserrno.

Referenced by addFileToTagAux(), cpio_copy(), dodigest(), doIcon(), fsmStage(), IDTXglob(), isCompressed(), makeGPGSignature(), makeHDRSignature(), manageFile(), processPackageFiles(), rdLead(), readFile(), readLineFromOFI(), rpmcliSign(), rpmdsCpuinfo(), rpmdsSysinfoFile(), rpmfd_Fopen(), rpmfd_init(), rpmgiOpen(), rpmInstallSource(), rpmioSlurp(), rpmLoadMacroFile(), rpmpsmStage(), rpmShowProgress(), rpmTempFile(), rpmtsSolve(), rpmWriteHeader(), runScript(), unsatisfiedDepend(), urlGetFile(), and writeRPM().

int Fflush | ( | FD_t | fd | ) |

fflush(3) clone.

Definition at line 3983 of file rpmio.c.

References fdGetFILE, fdGetFp(), fdGetIo(), and fpio.

Referenced by copyFile(), cpio_doio(), extractRegular(), rpmpsmStage(), and writeRPM().

int Fileno | ( | FD_t | fd | ) |

fileno(3) clone.

Definition at line 4056 of file rpmio.c.

References DBGIO, fdbg(), _FDSTACK_s::fdno, _FD_s::fps, _FD_s::nfps, and _FD_s::req.

Referenced by cpio_doio(), extractRegular(), Fcntl(), Fdopen(), fdSize(), printSize(), rpmpsmStage(), rpmReadPackageFile(), rpmTempFile(), rpmtsCallback(), runScript(), ufdOpen(), writeFile(), and writeRPM().

FD_t Fopen | ( | const char * | path,
|  | const char * | fmode |
| ) |  |  |

fopen(3) clone.

Definition at line 3914 of file rpmio.c.

References _rpmio_debug, cvtfmode(), fdClose, fdFileno, fdGetFdno(), fdGetFp(), Fdopen(), fdOpen, fdPush(), fpio, _FD_s::req, ufdOpen(), URL_IS_DASH, URL_IS_FTP, URL_IS_HKP, URL_IS_HTTP, URL_IS_HTTPS, URL_IS_PATH, URL_IS_UNKNOWN, and urlIsURL().

Referenced by addFileToTagAux(), dodigest(), doIcon(), fsmStage(), IDTXglob(), isCompressed(), makeGPGSignature(), makeHDRSignature(), manageFile(), processPackageFiles(), readLineFromOFI(), rpmcliSign(), rpmdbExportInfo(), rpmdsCpuinfo(), rpmdsSysinfoFile(), rpmfd_Fopen(), rpmfd_init(), rpmgiOpen(), rpmHeaderFromFile(), rpmInstallSource(), rpmioSlurp(), rpmLoadMacroFile(), rpmpsmStage(), rpmShowProgress(), rpmTempFile(), rpmtsRollback(), rpmtsSolve(), runScript(), unsatisfiedDepend(), urlGetFile(), and writeRPM().

size_t Fread | ( | void * | buf,
|  | size_t | size,
|  | size_t | nmemb,
|  | FD_t | fd |
| ) |  |  |

fread(3) clone.

Definition at line 3547 of file rpmio.c.

References DBGIO, fdbg(), fdGetFILE, fdGetIo(), FDIOVEC, FDSANE, fpio, and FDIO_s::read.

Referenced by copyFile(), cpio_copy(), dodigest(), doIcon(), fsmStage(), isCompressed(), makeGPGSignature(), readFile(), rpmioSlurp(), rpmReadPackageFile(), ufdCopy(), unsatisfiedDepend(), and writeRPM().

int Fseek | ( | FD_t | fd,
|  | _libio_off_t | offset,
|  | int | whence |
| ) |  |  |

fseek(3) clone.

Definition at line 3592 of file rpmio.c.

References DBGIO, fdbg(), fdGetFILE, fdGetIo(), FDIOVEC, FDSANE, fpio, and FDIO_s::seek.

const char* Fstrerror | ( | FD_t | fd | ) |

strerror(3) clone.

Definition at line 3536 of file rpmio.c.

References errno, FDSANE, and getFdErrstr().

Referenced by copyFile(), cpio_copy(), doIcon(), IDTXglob(), isCompressed(), manageFile(), processPackageFiles(), rdLead(), readFile(), readLineFromOFI(), rpmcliSign(), rpmfd_Fopen(), rpmfd_init(), rpmgiOpen(), rpmInstallSource(), rpmpsmStage(), rpmReadPackageFile(), rpmReSign(), rpmShowProgress(), rpmtsSolve(), rpmWriteHeader(), urlGetFile(), and writeRPM().

static int ftpAbort | ( | urlinfo | u,
|  | FD_t | data |
| ) |  |  | `[static]`

Definition at line 1670 of file rpmio.c.

References urlinfo_s::buf, urlinfo_s::bufAlloced, urlinfo_s::ctrl, DBGIO, DM, fdClose, fdFileno, fdFree, _FDSTACK_s::fdno, fdReadable(), fdWrite, _FD_s::fps, ftpCheckResponse(), FTPERR_NIC_ABORT_IN_PROGRESS, FTPERR_SERVER_IO_ERROR, _FD_s::ftpFileDoneNeeded, IAC, IP, _FD_s::rd_timeoutsecs, FDIO_s::read, SHUT_RDWR, ufdio, and URLSANE.

Referenced by ufdClose().

static int ftpCheckResponse | ( | urlinfo | u,
|  | char ** | str |
| ) |  |  | `[static]`

Definition at line 1116 of file rpmio.c.

References checkResponse(), urlinfo_s::ctrl, FTPERR_BAD_SERVER_RESPONSE, FTPERR_FILE_NOT_FOUND, FTPERR_NIC_ABORT_IN_PROGRESS, and URLSANE.

Referenced by ftpAbort(), ftpCommand(), ftpFileDone(), ftpLogin(), and ftpReq().

static int ftpCommand | ( | urlinfo | u,
|  | char ** | str,
|  |  | ... |
| ) |  |  | `[static]`

Definition at line 1142 of file rpmio.c.

References _ftp_debug, alloca(), urlinfo_s::ctrl, fdWrite, ftpCheckResponse(), FTPERR_SERVER_IO_ERROR, stpcpy(), and URLSANE.

Referenced by ftpCmd(), ftpLogin(), and ftpReq().

static int ftpFileDone | ( | urlinfo | u,
|  | FD_t | data |
| ) |  |  | `[static]`

Definition at line 1731 of file rpmio.c.

References urlinfo_s::ctrl, fdFree, ftpCheckResponse(), _FD_s::ftpFileDoneNeeded, and URLSANE.

Referenced by ufdClose().

static int ftpLogin | ( | urlinfo | u | ) | `[static]`

Definition at line 1180 of file rpmio.c.

References alloca(), urlinfo_s::ctrl, errno, fdClose, fdFileno, fdLink, fdSetSyserrno(), fdWritable(), ftpCheckResponse(), ftpCommand(), FTPERR_BAD_HOSTNAME, ftpStrerror(), urlinfo_s::host, IPPORT_FTP, urlinfo_s::password, urlinfo_s::port, urlinfo_s::proxyh, urlinfo_s::proxyp, urlinfo_s::proxyu, tcpConnect(), URLSANE, and urlinfo_s::user.

Referenced by urlConnect().

const char* ftpStrerror | ( | int | errorNumber | ) |

Definition at line 736 of file rpmio.c.

References _, FTPERR_BAD_HOST_ADDR, FTPERR_BAD_HOSTNAME, FTPERR_BAD_SERVER_RESPONSE, FTPERR_FAILED_CONNECT, FTPERR_FAILED_DATA_CONNECT, FTPERR_FILE_IO_ERROR, FTPERR_FILE_NOT_FOUND, FTPERR_NE_AUTH, FTPERR_NE_CONNECT, FTPERR_NE_ERROR, FTPERR_NE_FAILED, FTPERR_NE_LOOKUP, FTPERR_NE_PROXYAUTH, FTPERR_NE_REDIRECT, FTPERR_NE_RETRY, FTPERR_NE_TIMEOUT, FTPERR_NIC_ABORT_IN_PROGRESS, FTPERR_PASSIVE_ERROR, FTPERR_SERVER_IO_ERROR, FTPERR_SERVER_TIMEOUT, and FTPERR_UNKNOWN.

Referenced by ftpLogin(), ftpReq(), httpReq(), prepFetch(), tcpConnect(), ufdCopy(), and urlStrerror().

size_t Fwrite | ( | const void * | buf,
|  | size_t | size,
|  | size_t | nmemb,
|  | FD_t | fd |
| ) |  |  |

fwrite(3) clone.

Definition at line 3569 of file rpmio.c.

References DBGIO, fdbg(), fdGetFILE, fdGetIo(), FDIOVEC, FDSANE, fpio, and FDIO_s::write.

Referenced by copyFile(), cpio_copy(), fsmStage(), rpmWriteHeader(), runScript(), ufdCopy(), writeRPM(), wrLead(), and wrSignature().

static const char* getFdErrstr | ( | FD_t | fd | ) | `[static]`

Definition at line 3503 of file rpmio.c.

References _FD_s::errcookie, fdGetIo(), and _FD_s::syserrno.

Referenced by Fstrerror().

static int getHostAddress | ( | const char * | host,
|  | struct in_addr * | address |
| ) |  |  | `[static]`

Definition at line 833 of file rpmio.c.

References errno, FTPERR_BAD_HOST_ADDR, FTPERR_BAD_HOSTNAME, inet_aton, mygethostbyname(), and xisdigit().

Referenced by tcpConnect().

static int httpReq | ( | FD_t | ctrl,
|  | const char * | httpCmd,
|  | const char * | httpArg |
| ) |  |  | `[static]`

Definition at line 1779 of file rpmio.c.

References _ftp_debug, alloca(), errno, fdClose, fdFileno, fdLink, fdSetSyserrno(), fdWritable(), fdWrite, FTPERR_BAD_HOSTNAME, FTPERR_SERVER_IO_ERROR, ftpStrerror(), urlinfo_s::host, httpResp(), urlinfo_s::httpVersion, urlinfo_s::port, urlinfo_s::proxyh, urlinfo_s::proxyp, tcpConnect(), urlinfo_s::url, _FD_s::url, URLSANE, VERSION, and _FD_s::wr_chunked.

Referenced by ufdOpen().

static int httpResp | ( | urlinfo | u,
|  | FD_t | ctrl,
|  | char ** | str |
| ) |  |  | `[static]`

Definition at line 1750 of file rpmio.c.

References _ftp_debug, checkResponse(), FTPERR_FILE_NOT_FOUND, FTPERR_UNKNOWN, _FD_s::syserrno, and URLSANE.

Referenced by httpReq().

static int lzdClose | ( | void * | cookie | ) | `[static]`

Definition at line 3034 of file rpmio.c.

References _free(), _rpmio_debug, c2f(), DBGIO, _FD_s::errcookie, fdbg(), fdFree, FDSTAT_CLOSE, fdstat_enter(), fdstat_exit(), fdstat_print(), _CBuffer::File, lzfile::g_InBuffer, lzdFileno(), lzfile::pid, rpmIsDebug, and lzfile::state.

static FD_t lzdFdopen | ( | void * | cookie,
|  | const char * | fmode |
| ) |  |  | `[static]`

Definition at line 2932 of file rpmio.c.

References c2f(), fdFileno, fdSetFdno(), lzdReadOpen(), and lzdWriteOpen().

Referenced by Fdopen().

static void* lzdFileno | ( | FD_t | fd | ) | `[inline, static]`

Definition at line 2775 of file rpmio.c.

References FDSANE, _FDSTACK_s::fp, _FD_s::fps, _FDSTACK_s::io, lzdio, and _FD_s::nfps.

Referenced by lzdClose(), lzdFlush(), lzdRead(), and lzdWrite().

static int lzdFlush | ( | FD_t | fd | ) | `[static]`

Definition at line 2952 of file rpmio.c.

References _CBuffer::File, lzfile::g_InBuffer, and lzdFileno().

static FD_t lzdOpen | ( | const char * | path,
|  | const char * | mode |
| ) |  |  | `[static]`

Definition at line 2911 of file rpmio.c.

References lzdReadOpen(), and lzdWriteOpen().

static ssize_t lzdRead | ( | void * | cookie,
|  | char * | buf,
|  | size_t | count |
| ) |  |  | `[static]`

Definition at line 2966 of file rpmio.c.

References _FD_s::bytesRemain, c2f(), _FD_s::errcookie, fdstat_enter(), fdstat_exit(), FDSTAT_READ, fdUpdateDigests(), _CBuffer::File, lzfile::g_InBuffer, _CBuffer::InCallback, lzdFileno(), _FD_s::ndigests, and lzfile::state.

static FD_t lzdReadOpen | ( | int | fdno,
|  | int | fopen |
| ) |  |  | `[static]`

Definition at line 2860 of file rpmio.c.

References _free(), error(), fdLink, fdNew, fdPop(), fdPush(), _CBuffer::File, lzfile::g_InBuffer, _CBuffer::InCallback, lzdio, LzmaReadCompressed(), MyReadFileAndCheck(), lzfile::properties, lzfile::state, xcalloc(), and xmalloc().

Referenced by lzdFdopen(), and lzdOpen().

static int lzdSeek | ( | void * | cookie,
|  | _libio_pos_t | pos,
|  | int | whence |
| ) |  |  | `[inline, static]`

Definition at line 3024 of file rpmio.c.

References c2f(), and LZDONLY.

static ssize_t lzdWrite | ( | void * | cookie,
|  | const char * | buf,
|  | size_t | count |
| ) |  |  | `[static]`

Definition at line 3000 of file rpmio.c.

References _FD_s::bytesRemain, c2f(), _FD_s::errcookie, fdstat_enter(), fdstat_exit(), FDSTAT_WRITE, fdUpdateDigests(), _CBuffer::File, lzfile::g_InBuffer, lzdFileno(), and _FD_s::ndigests.

static FD_t lzdWriteOpen | ( | int | fdno,
|  | int | fopen,
|  | const char * | mode |
| ) |  |  | `[static]`

Definition at line 2794 of file rpmio.c.

References _free(), fdLink, fdNew, fdPop(), fdPush(), _CBuffer::File, lzfile::g_InBuffer, lzdio, lzfile::pid, rpmGetPath(), and xcalloc().

Referenced by lzdFdopen(), and lzdOpen().

static int LzmaReadCompressed | ( | void * | object,
|  | const unsigned char ** | buffer,
|  | size_t * | size |
| ) |  |  | `[static]`

Definition at line 2765 of file rpmio.c.

References _CBuffer::Buffer, _CBuffer::File, kInBufferSize, and MyReadFile().

Referenced by lzdReadOpen().

static int mygethostbyname | ( | const char * | host,
|  | struct in_addr * | address |
| ) |  |  | `[static]`

Definition at line 815 of file rpmio.c.

Referenced by getHostAddress().

static size_t MyReadFile | ( | FILE * | file,
|  | void * | data,
|  | size_t | size |
| ) |  |  | `[static]`

Definition at line 2750 of file rpmio.c.

Referenced by LzmaReadCompressed(), and MyReadFileAndCheck().

static int MyReadFileAndCheck | ( | FILE * | file,
|  | void * | data,
|  | size_t | size |
| ) |  |  | `[static]`

Definition at line 2758 of file rpmio.c.

References MyReadFile().

Referenced by lzdReadOpen().

static int rpm_inet_aton | ( | const char * | cp,
|  | struct in_addr * | inp |
| ) |  |  | `[static]`

Definition at line 83 of file rpmio.c.

int rpmioAccess | ( | const char * | FN,
|  | const char * | path,
|  | int | mode |
| ) |  |  |

Check FN access, expanding relative paths and twiddles.

Parameters:

  | FN | file path to check
  | path | colon separated search path (NULL uses $PATH)
  | mode | type of access(2) to check (0 uses X_OK)

Returns:
  0 if accessible

Definition at line 4137 of file rpmio.c.

References _rpmio_debug, Access(), alloca_strdup, F_OK, getenv(), R_OK, rpmCleanPath(), stpcpy(), W_OK, and X_OK.

Referenced by rpmtsCreate(), and unsatisfiedDepend().

void rpmioClean | ( | void |  | ) |

Free all memory allocated by rpmio usage.

Definition at line 4325 of file rpmio.c.

References rpmlogClose(), and urlFreeCache().

Referenced by rpmcliFini().

int rpmioMkpath | ( | const char * | path,
|  | mode_t | mode,
|  | uid_t | uid,
|  | gid_t | gid |
| ) |  |  |

Insure that directories in path exist, creating as needed.

Parameters:

  | path | directory path
  | mode | directory mode (if created)
  | uid | directory uid (if created), or -1 to skip
  | gid | directory uid (if created), or -1 to skip

Returns:
  0 on success, errno (or -1) on error

Definition at line 4082 of file rpmio.c.

References alloca(), Chown(), D_, errno, Mkdir(), rpmlog(), RPMLOG_DEBUG, Stat(), and stpcpy().

Referenced by db3open(), rpmTempFile(), and sql_open().

int rpmioSlurp | ( | const char * | fn,
|  | uint8_t ** | bp,
|  | ssize_t * | blenp |
| ) |  |  |

Read an entire file into a buffer.

Parameters:

  | fn | file name to read

Return values:

  | *bp | (malloc'd) buffer address
  | *blenp | (malloc'd) buffer length

Returns:
  0 on success

Definition at line 4269 of file rpmio.c.

References Fclose(), fdSize(), Ferror(), Fopen(), Fread(), xmalloc(), and xrealloc().

Referenced by pgpReadPkts(), processMetadataFile(), rpmnsProbeSignature(), and rpmPlatform().

static int tcpConnect | ( | FD_t | ctrl,
|  | const char * | host,
|  | int | port |
| ) |  |  | `[static]`

Definition at line 862 of file rpmio.c.

References _ftp_debug, errno, fdSetFdno(), fdSetSyserrno(), FTPERR_FAILED_CONNECT, ftpStrerror(), and getHostAddress().

Referenced by ftpLogin(), and httpReq().

int ufdCopy | ( | FD_t | sfd,
|  | FD_t | tfd |
| ) |  |  |

Definition at line 1524 of file rpmio.c.

References DBGIO, Fread(), FTPERR_FILE_IO_ERROR, ftpStrerror(), Fwrite(), RPMCALLBACK_INST_OPEN_FILE, and RPMCALLBACK_INST_PROGRESS.

Referenced by ufdGetFile().

int ufdGetFile | ( | FD_t | sfd,
|  | FD_t | tfd |
| ) |  |  |

Definition at line 1627 of file rpmio.c.

References Fclose(), FDSANE, and ufdCopy().

Referenced by urlGetFile().

void* ufdGetUrlinfo | ( | FD_t | fd | ) |

Definition at line 1893 of file rpmio.c.

References FDSANE, _FD_s::url, and urlLink.

static FD_t ufdOpen | ( | const char * | url,
|  | int | flags,
|  | mode_t | mode |
| ) |  |  | `[static]`

Definition at line 2206 of file rpmio.c.

References _rpmio_debug, _FD_s::bytesRemain, _FD_s::contentLength, DBGIO, fdbg(), fdDup(), fdLink, fdOpen, fdSetIo(), fdSetOpen(), Fileno(), ftpOpen(), ftpReq(), httpReq(), urlinfo_s::openError, _FD_s::rd_timeoutsecs, ufdClose(), ufdio, URL_IS_DASH, URL_IS_FTP, URL_IS_HKP, URL_IS_HTTP, URL_IS_HTTPS, URL_IS_PATH, URL_IS_UNKNOWN, urlPath(), _FD_s::urlType, and _FD_s::wr_chunked.

Referenced by Fopen().

static ssize_t ufdRead | ( | void * | cookie,
|  | char * | buf,
|  | size_t | count |
| ) |  |  | `[static]`

Definition at line 1902 of file rpmio.c.

References _rpmio_debug, _FD_s::bytesRemain, c2f(), errno, fdFileno, fdGetIo(), fdRead, fdReadable(), _FD_s::rd_timeoutsecs, and UFDONLY.

static int ufdSeek | ( | void * | cookie,
|  | _libio_pos_t | pos,
|  | int | whence |
| ) |  |  | `[inline, static]`

Definition at line 2031 of file rpmio.c.

References c2f(), fdSeek(), URL_IS_DASH, URL_IS_FTP, URL_IS_HKP, URL_IS_HTTP, URL_IS_HTTPS, URL_IS_PATH, URL_IS_UNKNOWN, and _FD_s::urlType.

static ssize_t ufdWrite | ( | void * | cookie,
|  | const char * | buf,
|  | size_t | count |
| ) |  |  | `[static]`

Definition at line 1966 of file rpmio.c.

References _rpmio_debug, _FD_s::bytesRemain, c2f(), errno, fdGetFdno(), fdGetIo(), fdWritable(), fdWrite, and UFDONLY.

static int urlConnect | ( | const char * | url,
|  | urlinfo * | uret |
| ) |  |  | `[static]`

Definition at line 1582 of file rpmio.c.

References _FD_s::bytesRemain, _FD_s::contentLength, urlinfo_s::ctrl, D_, fdFileno, fdFree, fdLink, fdNew, fdSetIo(), fdSetOpen(), _FD_s::ftpFileDoneNeeded, ftpLogin(), ftpTimeoutSecs, urlinfo_s::host, urlinfo_s::openError, urlinfo_s::password, _FD_s::rd_timeoutsecs, rpmlog(), RPMLOG_DEBUG, ufdio, _FD_s::url, URL_IS_FTP, urlFree, urlLink, urlSplit(), urlinfo_s::urltype, and urlinfo_s::user.

Referenced by ftpCmd(), and ftpOpen().

void urlSetCallback | ( | rpmCallbackFunction | notify,
|  | void * | notifyData,
|  | int | notifyCount |
| ) |  |  |

Definition at line 1518 of file rpmio.c.

const char* urlStrerror | ( | const char * | url | ) |

Definition at line 791 of file rpmio.c.

References _, errno, ftpStrerror(), urlinfo_s::openError, URL_IS_FTP, URL_IS_HKP, URL_IS_HTTP, URL_IS_HTTPS, urlIsURL(), and urlSplit().

static FD_t XfdFree | ( | FD_t | fd,
|  | const char * | msg,
|  | const char * | file,
|  | unsigned | line |
| ) |  |  | `[inline, static]`

Definition at line 332 of file rpmio.c.

References _free(), DBGREFS, _FD_s::dig, _FD_s::digests, fdbg(), FDNREFS, FDSANE, _FDDIGEST_s::hashctx, _FD_s::ndigests, _FD_s::nrefs, _FD_s::opath, pgpDigFree(), rpmDigestFinal(), _FD_s::stats, and _FD_s::xar.

static FD_t XfdLink | ( | void * | cookie,
|  | const char * | msg,
|  | const char * | file,
|  | unsigned | line |
| ) |  |  | `[inline, static]`

Definition at line 313 of file rpmio.c.

References c2f(), DBGREFS, fdbg(), FDNREFS, and _FD_s::nrefs.

Referenced by XfdNew().

static FD_t XfdNew | ( | const char * | msg,
|  | const char * | file,
|  | unsigned | line |
| ) |  |  | `[inline, static]`

Definition at line 368 of file rpmio.c.

References _FD_s::bytesRemain, _FD_s::contentLength, _FD_s::dig, _FD_s::digests, _FD_s::errcookie, _FD_s::fd_cpioPos, FDMAGIC, _FDSTACK_s::fdno, _FD_s::flags, _FDSTACK_s::fp, _FD_s::fps, _FD_s::ftpFileDoneNeeded, _FDSTACK_s::io, _FD_s::magic, _FD_s::ndigests, _FD_s::nfps, _FD_s::nrefs, _FD_s::oflags, _FD_s::omode, _FD_s::opath, _FD_s::rd_timeoutsecs, _FD_s::stats, _FD_s::syserrno, ufdio, _FD_s::url, URL_IS_UNKNOWN, _FD_s::urlType, _FD_s::wr_chunked, _FD_s::xar, xcalloc(), and XfdLink().

## Variable Documentation

int _av_debug = 0

Definition at line 158 of file rpmio.c.

int _dav_debug = 0

Definition at line 168 of file rpmio.c.

int _ftp_debug = 0

Definition at line 163 of file rpmio.c.

Referenced by checkResponse(), ftpCommand(), ftpLstat(), ftpOpendir(), ftpReadlink(), ftpReq(), ftpStat(), httpReq(), httpResp(), and tcpConnect().

const char* _path = "/bin:/usr/bin:/sbin:/usr/sbin"`[static]`

Definition at line 4133 of file rpmio.c.

int _rpmio_debug = 0

Definition at line 153 of file rpmio.c.

Referenced by Access(), Chmod(), Chown(), Chroot(), Closedir(), fdFgets(), Fdopen(), fdWritable(), Fopen(), Glob(), Globfree(), Lchown(), Link(), Lseek(), Lstat(), lzdClose(), Mkfifo(), Mknod(), Open(), Opendir(), Readdir(), Rename(), rpmioAccess(), Stat(), Symlink(), ufdOpen(), ufdRead(), ufdWrite(), Utime(), and Utimes().

FDIO_t fdio = &fdio_s

Definition at line 561 of file rpmio.c.

Referenced by fdbg(), and XurlFree().

struct FDIO_s fdio_s `[static]`

Initial value:

     {
      fdRead, fdWrite, fdSeek, fdClose, XfdLink, XfdFree, XfdNew, fdFileno,
      fdOpen, NULL, fdGetFp, NULL,  mkdir, chdir, rmdir, rename, unlink
    }

Definition at line 556 of file rpmio.c.

FDIO_t fpio = &fpio_s

Definition at line 4346 of file rpmio.c.

Referenced by Fclose(), fdbg(), Fdopen(), Ferror(), Fflush(), Fopen(), Fread(), Fseek(), Fwrite(), and XurlFree().

struct FDIO_s fpio_s `[static]`

Initial value:

     {
      ufdRead, ufdWrite, fdSeek, ufdClose, XfdLink, XfdFree, XfdNew, fdFileno,
      ufdOpen, NULL, fdGetFp, NULL, Mkdir, Chdir, Rmdir, Rename, Unlink
    }

Definition at line 4341 of file rpmio.c.

int ftpTimeoutSecs = 60`[static]`

Definition at line 148 of file rpmio.c.

Referenced by ftpOpen(), and urlConnect().

FDIO_t lzdio = &lzdio_s

Definition at line 3083 of file rpmio.c.

Referenced by fdbg(), lzdFileno(), lzdReadOpen(), and lzdWriteOpen().

struct FDIO_s lzdio_s `[static]`

Initial value:

     {
      lzdRead, lzdWrite, lzdSeek, lzdClose, XfdLink, XfdFree, XfdNew, fdFileno,
      NULL, lzdOpen, lzdFileno, lzdFlush,   NULL, NULL, NULL, NULL, NULL
    }

Definition at line 3078 of file rpmio.c.

int noLibio = 1

Definition at line 140 of file rpmio.c.

Referenced by Fclose(), Fdopen(), and ufdClose().

FDIO_t ufdio = &ufdio_s

Definition at line 2309 of file rpmio.c.

Referenced by fdbg(), ftpAbort(), ftpOpen(), ufdOpen(), urlConnect(), and XfdNew().

struct FDIO_s ufdio_s `[static]`

Initial value:

     {
      ufdRead, ufdWrite, ufdSeek, ufdClose, XfdLink, XfdFree, XfdNew, fdFileno,
      ufdOpen, NULL, fdGetFp, NULL, Mkdir, Chdir, Rmdir, Rename, Unlink
    }

Definition at line 2304 of file rpmio.c.

rpmCallbackFunction urlNotify = NULL`[static]`

Definition at line 1510 of file rpmio.c.

int urlNotifyCount = -1`[static]`

Definition at line 1516 of file rpmio.c.

void* urlNotifyData = NULL`[static]`

Definition at line 1513 of file rpmio.c.