rpm  4.5
Files | Data Structures | Macros | Typedefs | Enumerations | Functions
PAYLOAD.
Collaboration diagram for PAYLOAD.:

Files

file  cpio.c
 Handle cpio payloads within rpm packages.
 
file  cpio.h
 Structures used to handle cpio payloads within rpm packages.
 
file  fsm.c
 File state machine to handle a payload from a package.
 
file  fsm.h
 File state machine to handle a payload within an rpm package.
 
file  psm.c
 Package state machine to handle a package from a transaction set.
 
file  psm.h
 Package state machine to handle a package from a transaction set.
 
file  rpmlib.h
 In Memoriam: Steve Taylor stayl.nosp@m.or@r.nosp@m.edhat.nosp@m..com was here, now he's not.
 
file  tar.c
 Handle tar payloads within rpm packages.
 
file  tar.h
 Structures used to handle tar payloads within rpm packages.
 

Data Structures

struct  cpioCrcPhysicalHeader
 Cpio archive header information. More...
 
struct  dnli_s
 Directory name iterator. More...
 
struct  hardLink_s
 Keeps track of the set of all hard links to a file in an archive. More...
 
struct  fsmIterator_s
 Iterator across package file info, forward on install, backward on erase. More...
 
struct  fsm_s
 File name and stat information. More...
 
struct  tarHeader_s
 Tar archive header information. More...
 

Macros

#define CPIOERR_CHECK_ERRNO   0x00008000
 

Typedefs

typedef enum cpioMapFlags_e cpioMapFlags
 
typedef struct dnli_sDNLI_t
 Directory name iterator. More...
 

Enumerations

enum  cpioErrorReturns {
  CPIOERR_BAD_MAGIC = (2 ), CPIOERR_BAD_HEADER = (3 ), CPIOERR_OPEN_FAILED = (4 | 0x00008000 ), CPIOERR_CHMOD_FAILED = (5 | 0x00008000 ),
  CPIOERR_CHOWN_FAILED = (6 | 0x00008000 ), CPIOERR_WRITE_FAILED = (7 | 0x00008000 ), CPIOERR_UTIME_FAILED = (8 | 0x00008000 ), CPIOERR_UNLINK_FAILED = (9 | 0x00008000 ),
  CPIOERR_RENAME_FAILED = (10 | 0x00008000 ), CPIOERR_SYMLINK_FAILED = (11 | 0x00008000 ), CPIOERR_STAT_FAILED = (12 | 0x00008000 ), CPIOERR_LSTAT_FAILED = (13 | 0x00008000 ),
  CPIOERR_MKDIR_FAILED = (14 | 0x00008000 ), CPIOERR_RMDIR_FAILED = (15 | 0x00008000 ), CPIOERR_MKNOD_FAILED = (16 | 0x00008000 ), CPIOERR_MKFIFO_FAILED = (17 | 0x00008000 ),
  CPIOERR_LINK_FAILED = (18 | 0x00008000 ), CPIOERR_READLINK_FAILED = (19 | 0x00008000 ), CPIOERR_READ_FAILED = (20 | 0x00008000 ), CPIOERR_COPY_FAILED = (21 | 0x00008000 ),
  CPIOERR_LSETFCON_FAILED = (22 | 0x00008000 ), CPIOERR_HDR_SIZE = (23 ), CPIOERR_HDR_TRAILER = (24 ), CPIOERR_UNKNOWN_FILETYPE = (25 ),
  CPIOERR_MISSING_HARDLINK = (26 ), CPIOERR_DIGEST_MISMATCH = (27 ), CPIOERR_INTERNAL = (28 ), CPIOERR_UNMAPPED_FILE = (29 ),
  CPIOERR_ENOENT = (30 ), CPIOERR_ENOTEMPTY = (31 )
}
 
enum  cpioMapFlags_e {
  CPIO_MAP_PATH = (1 << 0), CPIO_MAP_MODE = (1 << 1), CPIO_MAP_UID = (1 << 2), CPIO_MAP_GID = (1 << 3),
  CPIO_FOLLOW_SYMLINKS = (1 << 4), CPIO_MAP_ABSOLUTE = (1 << 5), CPIO_MAP_ADDDOT = (1 << 6), CPIO_ALL_HARDLINKS = (1 << 7),
  CPIO_MAP_TYPE = (1 << 8), CPIO_SBIT_CHECK = (1 << 9), CPIO_PAYLOAD_LIST = (1 << 10), CPIO_PAYLOAD_EXTRACT = (1 << 11),
  CPIO_PAYLOAD_CREATE = (1 << 12)
}
 

Functions

const char * cpioStrerror (int rc)
 Return formatted error message on payload handling failure. More...
 
static const char * fsmFsPath (const FSM_t fsm, const struct stat *st, const char *subdir, const char *suffix)
 Build path to file from file info, ornamented with subdir and suffix. More...
 
static void * mapFreeIterator (void *p)
 Destroy file info iterator. More...
 
static void * mapInitIterator (rpmts ts, rpmfi fi)
 Create file info iterator. More...
 
static int mapNextIterator (void *a)
 Return next index into file info. More...
 
static int cpioStrCmp (const void *a, const void *b)
 
static int mapFind (FSMI_t iter, const char *fsmPath)
 Locate archive path in file info. More...
 
static void * dnlFreeIterator (const void *a)
 Destroy directory name iterator. More...
 
static int dnlCount (const DNLI_t dnli)
 
static int dnlIndex (const DNLI_t dnli)
 
static void * dnlInitIterator (const FSM_t fsm, int reverse)
 Create directory name iterator. More...
 
static const char * dnlNextIterator (DNLI_t dnli)
 Return next directory name (from file info). More...
 
static int saveHardLink (FSM_t fsm)
 Save hard link in chain. More...
 
static void * freeHardLink (struct hardLink_s *li)
 Destroy set of hard links. More...
 
static int extractRegular (FSM_t fsm)
 Create file from payload stream. More...
 
static int writeFile (FSM_t fsm, int writeData)
 Write next item to payload stream. More...
 
static int writeLinkedFile (FSM_t fsm)
 Write set of linked files to payload stream. More...
 
static int fsmMakeLinks (FSM_t fsm)
 Create pending hard links to existing file. More...
 
static int fsmCommitLinks (FSM_t fsm)
 Commit hard linked file set atomically. More...
 

RPMTS

typedef struct fsmIterator_sFSMI_t
 Iterator across package file info, forward on install, backward on erase. More...
 
typedef struct fsm_sFSM_t
 File state machine data. More...
 

Detailed Description

Macro Definition Documentation

#define CPIOERR_CHECK_ERRNO   0x00008000
Note
CPIO_CHECK_ERRNO bit is set only if errno is valid.

Definition at line 18 of file cpio.h.

Referenced by cpioStrerror().

Typedef Documentation

typedef struct dnli_s * DNLI_t

Directory name iterator.

typedef struct fsm_s* FSM_t

File state machine data.

Definition at line 802 of file rpmlib.h.

typedef struct fsmIterator_s* FSMI_t

Iterator across package file info, forward on install, backward on erase.

Definition at line 797 of file rpmlib.h.

Enumeration Type Documentation

Enumerator
CPIOERR_BAD_MAGIC 
CPIOERR_BAD_HEADER 
CPIOERR_OPEN_FAILED 
CPIOERR_CHMOD_FAILED 
CPIOERR_CHOWN_FAILED 
CPIOERR_WRITE_FAILED 
CPIOERR_UTIME_FAILED 
CPIOERR_UNLINK_FAILED 
CPIOERR_RENAME_FAILED 
CPIOERR_SYMLINK_FAILED 
CPIOERR_STAT_FAILED 
CPIOERR_LSTAT_FAILED 
CPIOERR_MKDIR_FAILED 
CPIOERR_RMDIR_FAILED 
CPIOERR_MKNOD_FAILED 
CPIOERR_MKFIFO_FAILED 
CPIOERR_LINK_FAILED 
CPIOERR_READLINK_FAILED 
CPIOERR_READ_FAILED 
CPIOERR_COPY_FAILED 
CPIOERR_LSETFCON_FAILED 
CPIOERR_HDR_SIZE 
CPIOERR_HDR_TRAILER 
CPIOERR_UNKNOWN_FILETYPE 
CPIOERR_MISSING_HARDLINK 
CPIOERR_DIGEST_MISMATCH 
CPIOERR_INTERNAL 
CPIOERR_UNMAPPED_FILE 
CPIOERR_ENOENT 
CPIOERR_ENOTEMPTY 

Definition at line 22 of file cpio.h.

Enumerator
CPIO_MAP_PATH 
CPIO_MAP_MODE 
CPIO_MAP_UID 
CPIO_MAP_GID 
CPIO_FOLLOW_SYMLINKS 

only for building.

CPIO_MAP_ABSOLUTE 
CPIO_MAP_ADDDOT 
CPIO_ALL_HARDLINKS 

fail if hardlinks are missing.

CPIO_MAP_TYPE 

only for building.

CPIO_SBIT_CHECK 
CPIO_PAYLOAD_LIST 
CPIO_PAYLOAD_EXTRACT 
CPIO_PAYLOAD_CREATE 

Definition at line 58 of file cpio.h.

Function Documentation

static int cpioStrCmp ( const void *  a,
const void *  b 
)
static

Definition at line 175 of file fsm.c.

References urlPath().

Referenced by mapFind().

const char* cpioStrerror ( int  rc)
static int dnlCount ( const DNLI_t  dnli)
inlinestatic

Definition at line 265 of file fsm.c.

References dnli_s::fi.

Referenced by fsmMkdirs(), and fsmRmdirs().

static void* dnlFreeIterator ( const void *  a)
static

Destroy directory name iterator.

Parameters
adirectory name iterator
Return values
NULLalways

Definition at line 253 of file fsm.c.

References _free(), and dnli_s::active.

Referenced by fsmMkdirs(), and fsmRmdirs().

static int dnlIndex ( const DNLI_t  dnli)
inlinestatic

Definition at line 273 of file fsm.c.

References dnli_s::isave.

Referenced by fsmMkdirs(), and fsmRmdirs().

static void* dnlInitIterator ( const FSM_t  fsm,
int  reverse 
)
static

Create directory name iterator.

Parameters
fsmfile state machine data
reversetraverse directory names in reverse order?
Returns
directory name iterator

Definition at line 288 of file fsm.c.

References dnli_s::active, D_, dnli_s::fi, fsmGetFi(), dnli_s::i, reverse, dnli_s::reverse, RPMMESS_DEBUG, rpmMessage, urlPath(), xcalloc(), and XFA_SKIPPING.

Referenced by fsmMkdirs(), and fsmRmdirs().

static const char* dnlNextIterator ( DNLI_t  dnli)
static

Return next directory name (from file info).

Parameters
dnlidirectory name iterator
Returns
next directory name

Definition at line 379 of file fsm.c.

References dnli_s::active, dnli_s::fi, dnli_s::i, dnli_s::isave, and dnli_s::reverse.

Referenced by fsmMkdirs(), and fsmRmdirs().

static int extractRegular ( FSM_t  fsm)
static

Create file from payload stream.

Parameters
fsmfile state machine data
Returns
0 on success

Definition at line 859 of file fsm.c.

References _free(), CPIOERR_DIGEST_MISMATCH, fsm_s::digest, fsm_s::digestlen, fdFiniDigest(), fsm_s::fdigest, fsm_s::fdigestalgo, fdInitDigest(), Fflush(), FSM_DREAD, FSM_NOTIFY, FSM_WCLOSE, FSM_WOPEN, FSM_WRITE, fsmNext(), left, fsm_s::sb, fsm_s::wfd, fsm_s::wrlen, fsm_s::wrnb, and fsm_s::wrsize.

Referenced by fsmStage().

static void* freeHardLink ( struct hardLink_s li)
static

Destroy set of hard links.

Parameters
liset of hard links
Returns
NULL always

Definition at line 524 of file fsm.c.

References _free(), hardLink_s::filex, and hardLink_s::nsuffix.

Referenced by freeFSM(), and fsmStage().

static int fsmCommitLinks ( FSM_t  fsm)
static

Commit hard linked file set atomically.

Parameters
fsmfile state machine data
Returns
0 on success

Definition at line 1214 of file fsm.c.

References _free(), fsm_s::action, hardLink_s::filex, FSM_COMMIT, FSM_MAP, fsmNext(), fsm_s::ix, fsm_s::li, fsm_s::links, hardLink_s::next, hardLink_s::nlink, fsm_s::nsuffix, fsm_s::path, hardLink_s::sb, fsm_s::sb, and XFA_SKIPPING.

Referenced by fsmStage().

static const char* fsmFsPath ( const FSM_t  fsm,
const struct stat *  st,
const char *  subdir,
const char *  suffix 
)
static

Build path to file from file info, ornamented with subdir and suffix.

Parameters
fsmfile state machine data
stfile stat info
subdirsubdir to use (NULL disables)
suffixsuffix to use (NULL disables)
Return values
pathto file

Definition at line 80 of file fsm.c.

References fsm_s::baseName, fsm_s::dirName, stpcpy(), and xmalloc().

Referenced by fsmMapPath(), and fsmStage().

static int fsmMakeLinks ( FSM_t  fsm)
static

Create pending hard links to existing file.

Parameters
fsmfile state machine data
Returns
0 on success

Definition at line 1148 of file fsm.c.

References _free(), fsm_s::action, CPIOERR_ENOENT, hardLink_s::createdPath, fsm_s::failedFile, hardLink_s::filex, FSM_LINK, FSM_MAP, FSM_VERIFY, fsmNext(), fsmUNSAFE, fsm_s::ix, fsm_s::li, hardLink_s::linksLeft, hardLink_s::nlink, fsm_s::nsuffix, fsm_s::opath, fsm_s::path, XFA_SKIPPING, and xstrdup().

Referenced by fsmStage().

static int mapFind ( FSMI_t  iter,
const char *  fsmPath 
)
static

Locate archive path in file info.

Parameters
iterfile info iterator
fsmPatharchive path
Returns
index into file info, -1 if archive path was not found

Definition at line 211 of file fsm.c.

References cpioStrCmp(), fsmIterator_s::fi, fsmIterator_s::i, and mapNextIterator().

Referenced by fsmStage().

static void* mapFreeIterator ( void *  p)
static

Destroy file info iterator.

Parameters
pfile info iterator
Return values
NULLalways

Definition at line 114 of file fsm.c.

References _free(), fsmIterator_s::fi, rpmfiUnlink(), rpmtsFree(), and fsmIterator_s::ts.

Referenced by freeFSM(), and fsmTeardown().

static void* mapInitIterator ( rpmts  ts,
rpmfi  fi 
)
static

Create file info iterator.

Parameters
tstransaction set
fitransaction element file info
Returns
file info iterator

Definition at line 135 of file fsm.c.

References FA_COPYOUT, fsmIterator_s::fi, fsmIterator_s::i, fsmIterator_s::isave, fsmIterator_s::reverse, rpmfiLink(), rpmteType(), rpmtsLink(), TR_REMOVED, fsmIterator_s::ts, and xcalloc().

Referenced by fsmSetup().

static int mapNextIterator ( void *  a)
static

Return next index into file info.

Parameters
afile info iterator
Returns
next index, -1 on termination

Definition at line 154 of file fsm.c.

References fsmIterator_s::fi, fsmIterator_s::i, fsmIterator_s::isave, and fsmIterator_s::reverse.

Referenced by fsmStage(), and mapFind().

static int saveHardLink ( FSM_t  fsm)
static
static int writeFile ( FSM_t  fsm,
int  writeData 
)
static
static int writeLinkedFile ( FSM_t  fsm)
static

Write set of linked files to payload stream.

Parameters
fsmfile state machine data
Returns
0 on success

Definition at line 1069 of file fsm.c.

References _free(), fsm_s::astriplen, fsm_s::failedFile, hardLink_s::filex, FSM_MAP, fsmNext(), fsm_s::headerWrite, fsm_s::ix, fsm_s::li, fsm_s::lpath, hardLink_s::nlink, fsm_s::nsuffix, fsm_s::path, stpcpy(), tarHeaderWrite(), urlPath(), writeFile(), xmalloc(), and xstrdup().

Referenced by fsmStage().