rpm  4.5
Data Structures | Macros | Typedefs | Enumerations | Functions | Variables
fsm.h File Reference

File state machine to handle a payload within an rpm package. More...

#include "cpio.h"
Include dependency graph for fsm.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

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...
 

Macros

#define FSM_VERBOSE   0x8000
 
#define FSM_INTERNAL   0x4000
 
#define FSM_SYSCALL   0x2000
 
#define FSM_DEAD   0x1000
 
#define _fv(_a)   ((_a) | FSM_VERBOSE)
 
#define _fi(_a)   ((_a) | FSM_INTERNAL)
 
#define _fs(_a)   ((_a) | (FSM_INTERNAL | FSM_SYSCALL))
 
#define _fd(_a)   ((_a) | (FSM_INTERNAL | FSM_DEAD))
 

Typedefs

typedef enum fileStage_e fileStage
 

Enumerations

enum  fileStage_e {
  FSM_UNKNOWN = 0, FSM_INIT = (( 1 ) | ( 0x4000 | 0x1000 )), FSM_PRE = (( 2 ) | ( 0x4000 | 0x1000 )), FSM_PROCESS = (( 3 ) | 0x8000 ),
  FSM_POST = (( 4 ) | ( 0x4000 | 0x1000 )), FSM_UNDO = 5, FSM_FINI = 6, FSM_PKGINSTALL = (( 7 ) | ( 0x4000 | 0x1000 )),
  FSM_PKGERASE = (( 8 ) | ( 0x4000 | 0x1000 )), FSM_PKGBUILD = (( 9 ) | ( 0x4000 | 0x1000 )), FSM_PKGCOMMIT = (( 10 ) | ( 0x4000 | 0x1000 )), FSM_PKGUNDO = (( 11 ) | ( 0x4000 | 0x1000 )),
  FSM_CREATE = (( 17 ) | ( 0x4000 | 0x1000 )), FSM_MAP = (( 18 ) | ( 0x4000 | 0x1000 )), FSM_MKDIRS = (( 19 ) | 0x4000 ), FSM_RMDIRS = (( 20 ) | 0x4000 ),
  FSM_MKLINKS = (( 21 ) | 0x4000 ), FSM_NOTIFY = (( 22 ) | ( 0x4000 | 0x1000 )), FSM_DESTROY = (( 23 ) | ( 0x4000 | 0x1000 )), FSM_VERIFY = (( 24 ) | ( 0x4000 | 0x1000 )),
  FSM_COMMIT = (( 25 ) | ( 0x4000 | 0x1000 )), FSM_UNLINK = (( 33 ) | ( 0x4000 | 0x2000 )), FSM_RENAME = (( 34 ) | ( 0x4000 | 0x2000 )), FSM_MKDIR = (( 35 ) | ( 0x4000 | 0x2000 )),
  FSM_RMDIR = (( 36 ) | ( 0x4000 | 0x2000 )), FSM_LSETFCON = (( 39 ) | ( 0x4000 | 0x2000 )), FSM_CHOWN = (( 40 ) | ( 0x4000 | 0x2000 )), FSM_LCHOWN = (( 41 ) | ( 0x4000 | 0x2000 )),
  FSM_CHMOD = (( 42 ) | ( 0x4000 | 0x2000 )), FSM_UTIME = (( 43 ) | ( 0x4000 | 0x2000 )), FSM_SYMLINK = (( 44 ) | ( 0x4000 | 0x2000 )), FSM_LINK = (( 45 ) | ( 0x4000 | 0x2000 )),
  FSM_MKFIFO = (( 46 ) | ( 0x4000 | 0x2000 )), FSM_MKNOD = (( 47 ) | ( 0x4000 | 0x2000 )), FSM_LSTAT = (( 48 ) | ( 0x4000 | 0x2000 )), FSM_STAT = (( 49 ) | ( 0x4000 | 0x2000 )),
  FSM_READLINK = (( 50 ) | ( 0x4000 | 0x2000 )), FSM_CHROOT = (( 51 ) | ( 0x4000 | 0x2000 )), FSM_NEXT = (( 65 ) | ( 0x4000 | 0x1000 )), FSM_EAT = (( 66 ) | ( 0x4000 | 0x1000 )),
  FSM_POS = (( 67 ) | ( 0x4000 | 0x1000 )), FSM_PAD = (( 68 ) | ( 0x4000 | 0x1000 )), FSM_TRAILER = (( 69 ) | ( 0x4000 | 0x1000 )), FSM_HREAD = (( 70 ) | ( 0x4000 | 0x1000 )),
  FSM_HWRITE = (( 71 ) | ( 0x4000 | 0x1000 )), FSM_DREAD = (( 72 ) | ( 0x4000 | 0x2000 )), FSM_DWRITE = (( 73 ) | ( 0x4000 | 0x2000 )), FSM_ROPEN = (( 129 ) | ( 0x4000 | 0x2000 )),
  FSM_READ = (( 130 ) | ( 0x4000 | 0x2000 )), FSM_RCLOSE = (( 131 ) | ( 0x4000 | 0x2000 )), FSM_WOPEN = (( 132 ) | ( 0x4000 | 0x2000 )), FSM_WRITE = (( 133 ) | ( 0x4000 | 0x2000 )),
  FSM_WCLOSE = (( 134 ) | ( 0x4000 | 0x2000 ))
}
 

Functions

const char * fileStageString (fileStage a)
 Return formatted string representation of file stages. More...
 
const char * fileActionString (fileAction a)
 Return formatted string representation of file disposition. More...
 
FSM_t newFSM (void)
 Create file state machine instance. More...
 
FSM_t freeFSM (FSM_t fsm)
 Destroy file state machine instance. More...
 
int fsmSetup (FSM_t fsm, fileStage goal, const char *afmt, const rpmts ts, const rpmfi fi, FD_t cfd, unsigned int *archiveSize, const char **failedFile)
 Load external data into file state machine. More...
 
int fsmTeardown (FSM_t fsm)
 Clean file state machine. More...
 
rpmts fsmGetTs (const FSM_t fsm)
 Retrieve transaction set from file state machine iterator. More...
 
rpmfi fsmGetFi (const FSM_t fsm)
 Retrieve transaction element file info from file state machine iterator. More...
 
int fsmMapPath (FSM_t fsm)
 Map next file path and action. More...
 
int fsmMapAttrs (FSM_t fsm)
 Map file stat(2) info. More...
 
int fsmNext (FSM_t fsm, fileStage nstage)
 File state machine driver. More...
 
int fsmStage (FSM_t fsm, fileStage stage)
 File state machine driver. More...
 

Variables

int _fsm_debug
 

Detailed Description

File state machine to handle a payload within an rpm package.

Definition in file fsm.h.

Macro Definition Documentation

#define _fd (   _a)    ((_a) | (FSM_INTERNAL | FSM_DEAD))

Definition at line 26 of file fsm.h.

Referenced by headerRead(), and headerWrite().

#define _fi (   _a)    ((_a) | FSM_INTERNAL)

Definition at line 24 of file fsm.h.

#define _fs (   _a)    ((_a) | (FSM_INTERNAL | FSM_SYSCALL))

Definition at line 25 of file fsm.h.

#define _fv (   _a)    ((_a) | FSM_VERBOSE)

Definition at line 23 of file fsm.h.

#define FSM_DEAD   0x1000

Definition at line 21 of file fsm.h.

Referenced by fsmStage().

#define FSM_INTERNAL   0x4000

Definition at line 19 of file fsm.h.

Referenced by fsmStage().

#define FSM_SYSCALL   0x2000

Definition at line 20 of file fsm.h.

Referenced by fsmStage().

#define FSM_VERBOSE   0x8000

Definition at line 18 of file fsm.h.

Referenced by fsmStage().

Typedef Documentation

typedef enum fileStage_e fileStage

Enumeration Type Documentation

Enumerator
FSM_UNKNOWN 
FSM_INIT 
FSM_PRE 
FSM_PROCESS 
FSM_POST 
FSM_UNDO 
FSM_FINI 
FSM_PKGINSTALL 
FSM_PKGERASE 
FSM_PKGBUILD 
FSM_PKGCOMMIT 
FSM_PKGUNDO 
FSM_CREATE 
FSM_MAP 
FSM_MKDIRS 
FSM_RMDIRS 
FSM_MKLINKS 
FSM_NOTIFY 
FSM_DESTROY 
FSM_VERIFY 
FSM_COMMIT 
FSM_UNLINK 
FSM_RENAME 
FSM_MKDIR 
FSM_RMDIR 
FSM_LSETFCON 
FSM_CHOWN 
FSM_LCHOWN 
FSM_CHMOD 
FSM_UTIME 
FSM_SYMLINK 
FSM_LINK 
FSM_MKFIFO 
FSM_MKNOD 
FSM_LSTAT 
FSM_STAT 
FSM_READLINK 
FSM_CHROOT 
FSM_NEXT 
FSM_EAT 
FSM_POS 
FSM_PAD 
FSM_TRAILER 
FSM_HREAD 
FSM_HWRITE 
FSM_DREAD 
FSM_DWRITE 
FSM_ROPEN 
FSM_READ 
FSM_RCLOSE 
FSM_WOPEN 
FSM_WRITE 
FSM_WCLOSE 

Definition at line 28 of file fsm.h.

Function Documentation

const char* fileActionString ( fileAction  a)

Return formatted string representation of file disposition.

Parameters
afile dispostion
Returns
formatted string

Definition at line 2553 of file fsm.c.

References FA_ALTNAME, FA_BACKUP, FA_COPYIN, FA_COPYOUT, FA_CREATE, FA_ERASE, FA_SAVE, FA_SKIP, FA_SKIPCOLOR, FA_SKIPNETSHARED, FA_SKIPNSTATE, and FA_UNKNOWN.

const char* fileStageString ( fileStage  a)
FSM_t freeFSM ( FSM_t  fsm)

Destroy file state machine instance.

Parameters
fsmfile state machine
Returns
always NULL

Definition at line 540 of file fsm.c.

References _free(), fsm_s::dnlx, freeHardLink(), fsm_s::iter, fsm_s::ldn, fsm_s::li, fsm_s::links, mapFreeIterator(), hardLink_s::next, and fsm_s::path.

Referenced by rpmfiFree().

rpmfi fsmGetFi ( const FSM_t  fsm)

Retrieve transaction element file info from file state machine iterator.

Parameters
fsmfile state machine
Returns
transaction element file info

Definition at line 59 of file fsm.c.

References fsmIterator_s::fi, and fsm_s::iter.

Referenced by dnlInitIterator(), fsmMapAttrs(), fsmMapFContext(), fsmMapPath(), fsmMkdirs(), fsmStage(), saveHardLink(), and writeFile().

rpmts fsmGetTs ( const FSM_t  fsm)

Retrieve transaction set from file state machine iterator.

Parameters
fsmfile state machine
Returns
transaction set

Definition at line 52 of file fsm.c.

References fsm_s::iter, and fsmIterator_s::ts.

Referenced by fsmMapAttrs(), fsmMapFContext(), fsmMkdirs(), and fsmStage().

int fsmMapAttrs ( FSM_t  fsm)
int fsmMapPath ( FSM_t  fsm)
int fsmNext ( FSM_t  fsm,
fileStage  nstage 
)
int fsmSetup ( FSM_t  fsm,
fileStage  goal,
const char *  afmt,
const rpmts  ts,
const rpmfi  fi,
FD_t  cfd,
unsigned int *  archiveSize,
const char **  failedFile 
)

Load external data into file state machine.

Parameters
fsmfile state machine
goal
afmtarchive format (NULL uses cpio)
tstransaction set
fitransaction element file info
cfdpayload descriptor
Return values
archiveSizepointer to archive size
failedFilepointer to first file name that failed.
Returns
0 on success

Definition at line 558 of file fsm.c.

References _fsm_debug, fsm_s::archiveSize, fsm_s::blksize, fsm_s::cfd, cpioHeaderRead(), cpioHeaderWrite(), cpioTrailerWrite(), fsm_s::failedFile, fdGetCpioPos(), fdLink(), fdSetCpioPos(), FSM_CREATE, FSM_PKGBUILD, FSM_PKGINSTALL, fsmUNSAFE, fsm_s::goal, fsm_s::headerRead, fsm_s::headerWrite, fsm_s::iter, mapInitIterator(), fsm_s::rc, RPMCALLBACK_INST_START, rpmtsGetTid(), rpmtsNotify(), fsm_s::sufbuf, TAR_BLOCK_SIZE, tarHeaderRead(), tarHeaderWrite(), tarTrailerWrite(), and fsm_s::trailerWrite.

Referenced by cpio_doio(), and rpmpsmStage().

int fsmStage ( FSM_t  fsm,
fileStage  stage 
)

File state machine driver.

Parameters
fsmfile state machine
stagenext stage
Returns
0 on success

Definition at line 1493 of file fsm.c.

References _, _fafilter, _free(), _fsm_debug, _tsmask, fsm_s::action, alloca(), fsm_s::astriplen, fsm_s::blksize, fsm_s::cfd, Chmod(), Chown(), fsm_s::commit, CPIO_ALL_HARDLINKS, CPIO_FOLLOW_SYMLINKS, CPIO_PAYLOAD_EXTRACT, CPIO_PAYLOAD_LIST, CPIO_SBIT_CHECK, CPIO_TRAILER, CPIOERR_CHMOD_FAILED, CPIOERR_CHOWN_FAILED, CPIOERR_ENOENT, CPIOERR_ENOTEMPTY, CPIOERR_HDR_TRAILER, CPIOERR_LINK_FAILED, CPIOERR_LSETFCON_FAILED, CPIOERR_LSTAT_FAILED, CPIOERR_MISSING_HARDLINK, CPIOERR_MKDIR_FAILED, CPIOERR_MKFIFO_FAILED, CPIOERR_MKNOD_FAILED, CPIOERR_OPEN_FAILED, CPIOERR_READ_FAILED, CPIOERR_READLINK_FAILED, CPIOERR_RENAME_FAILED, CPIOERR_RMDIR_FAILED, CPIOERR_STAT_FAILED, CPIOERR_SYMLINK_FAILED, CPIOERR_UNKNOWN_FILETYPE, CPIOERR_UNLINK_FAILED, CPIOERR_UNMAPPED_FILE, CPIOERR_UTIME_FAILED, CPIOERR_WRITE_FAILED, hardLink_s::createdPath, fsm_s::diskchecked, fsm_s::dnlx, errno, fsm_s::exists, extractRegular(), FA_ERASE, FA_UNKNOWN, fsm_s::failedFile, Fclose(), fsm_s::fcontext, fdGetCpioPos(), fdSetCpioPos(), FDSTAT_DIGEST, fdstat_op(), Ferror(), fsm_s::fflags, fileStageString(), hardLink_s::filex, Fopen(), Fread(), freeHardLink(), FSM_CHMOD, FSM_CHOWN, FSM_CHROOT, FSM_COMMIT, FSM_CREATE, FSM_DEAD, FSM_DESTROY, FSM_DREAD, FSM_DWRITE, FSM_EAT, FSM_FINI, FSM_HREAD, FSM_HWRITE, FSM_INIT, FSM_INTERNAL, FSM_LCHOWN, FSM_LINK, FSM_LSETFCON, FSM_LSTAT, FSM_MAP, FSM_MKDIR, FSM_MKDIRS, FSM_MKFIFO, FSM_MKLINKS, FSM_MKNOD, FSM_NEXT, FSM_NOTIFY, FSM_PAD, FSM_PKGBUILD, FSM_PKGCOMMIT, FSM_PKGERASE, FSM_PKGINSTALL, FSM_POS, FSM_POST, FSM_PRE, FSM_PROCESS, FSM_RCLOSE, FSM_READ, FSM_READLINK, FSM_RENAME, FSM_RMDIR, FSM_RMDIRS, FSM_ROPEN, FSM_STAT, FSM_SYMLINK, FSM_SYSCALL, FSM_TRAILER, FSM_UNDO, FSM_UNKNOWN, FSM_UNLINK, FSM_UTIME, FSM_VERBOSE, FSM_VERIFY, FSM_WCLOSE, FSM_WOPEN, FSM_WRITE, fsmCommitLinks(), fsmFsPath(), fsmGetFi(), fsmGetTs(), fsmMakeLinks(), fsmMapAttrs(), fsmMapFContext(), fsmMapPath(), fsmMkdirs(), fsmNext(), fsmRmdirs(), fsmUNSAFE, Fwrite(), fsm_s::goal, fsm_s::headerRead, fsm_s::headerWrite, IS_DEV_LOG, fsm_s::iter, fsm_s::ix, Lchown(), fsm_s::ldn, fsm_s::ldnalloc, fsm_s::ldnlen, left, fsm_s::li, Link(), hardLink_s::linkIndex, fsm_s::links, hardLink_s::linksLeft, fsm_s::lpath, lsetfilecon, Lstat(), mapFind(), fsm_s::mapFlags, mapNextIterator(), Mkdir(), fsm_s::mkdirsdone, Mkfifo(), Mknod(), hardLink_s::next, hardLink_s::nlink, fsm_s::nsuffix, fsm_s::opath, fsm_s::osb, fsm_s::osuffix, fsm_s::path, fsm_s::postpone, fsm_s::rc, fsm_s::rdb, fsm_s::rdbuf, fsm_s::rdlen, fsm_s::rdnb, fsm_s::rdsize, Readlink(), Rename(), fsm_s::repackaged, fsm_s::rfd, Rmdir(), RPMCALLBACK_INST_PROGRESS, RPMDEBUG_RMDIR, RPMDEBUG_UNLINK, RPMERR_RMDIR, RPMERR_UNLINK, rpmError, RPMFILE_GHOST, RPMFILE_MISSINGOK, rpmfiTypeString(), RPMMESS_DEBUG, RPMMESS_WARNING, rpmMessage, rpmswAdd(), RPMTS_OP_DIGEST, rpmtsFlags(), rpmtsNotify(), rpmtsOp(), S_ISLNK, S_ISSOCK, saveHardLink(), hardLink_s::sb, fsm_s::sb, fsm_s::stage, Stat(), stpcpy(), strict_erasures, fsm_s::subdir, fsm_s::sufbuf, fsm_s::suffix, Symlink(), fsm_s::trailerWrite, Unlink(), urlPath(), Utime(), fsm_s::wfd, fsm_s::wrb, fsm_s::wrbuf, writeFile(), writeLinkedFile(), fsm_s::wrlen, fsm_s::wrnb, fsm_s::wrsize, XFA_SKIPPING, xmalloc(), and xstrdup().

Referenced by fsmNext(), and fsmThread().

int fsmTeardown ( FSM_t  fsm)

Clean file state machine.

Parameters
fsmfile state machine
Returns
0 on success

Definition at line 637 of file fsm.c.

References _fsm_debug, fsm_s::cfd, fsm_s::failedFile, fdFree(), FSM_DESTROY, fsmUNSAFE, fsm_s::iter, mapFreeIterator(), and fsm_s::rc.

Referenced by cpio_doio(), and rpmpsmStage().

FSM_t newFSM ( void  )

Create file state machine instance.

Returns
file state machine

Definition at line 534 of file fsm.c.

References xcalloc().

Referenced by rpmfiNew().

Variable Documentation

int _fsm_debug

Definition at line 39 of file fsm.c.