lib/fsm.h File Reference

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

#include "cpio.h"

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

Defines

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

Variables

int _fsm_debug

Detailed Description

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

Definition in file fsm.h.


Define Documentation

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

Definition at line 26 of file fsm.h.

#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* const fileActionString ( fileAction  a  ) 

Return formatted string representation of file disposition.

Parameters:
a file dispostion
Returns:
formatted string

Definition at line 2454 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* const fileStageString ( fileStage  a  ) 
FSM_t freeFSM ( FSM_t  fsm  ) 

Destroy file state machine instance.

Parameters:
fsm file state machine
Returns:
always NULL

Definition at line 533 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:
fsm file state machine
Returns:
transaction element file info

Definition at line 58 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:
fsm file state machine
Returns:
transaction set

Definition at line 51 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 
)

File state machine driver.

Parameters:
fsm file state machine
nstage next stage
Returns:
0 on success

Definition at line 406 of file fsm.c.

References _fsm_threads, fsmStage(), fsmThread(), fsm_s::nstage, rpmsqJoin(), and rpmsqThread().

Referenced by cpioHeaderRead(), cpioHeaderWrite(), cpioTrailerWrite(), expandRegular(), fsmCommitLinks(), fsmMakeLinks(), fsmMkdirs(), fsmRmdirs(), fsmStage(), saveHardLink(), writeFile(), and writeLinkedFile().

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

Load external data into file state machine.

Parameters:
fsm file state machine
goal 
ts transaction set
fi transaction element file info
cfd 
Return values:
archiveSize pointer to archive size
failedFile pointer to first file name that failed.
Returns:
0 on success

Definition at line 551 of file fsm.c.

References rpmfi_s::archivePos, fsm_s::archiveSize, rpmfi_s::archiveSize, fsm_s::cfd, fsm_s::failedFile, fdGetCpioPos(), fdLink, fdSetCpioPos(), FSM_CREATE, FSM_PKGBUILD, FSM_PKGINSTALL, fsmUNSAFE, fsm_s::goal, fsm_s::iter, mapInitIterator(), fsm_s::rc, RPMCALLBACK_INST_START, rpmtsGetTid(), rpmtsNotify(), fsm_s::sufbuf, and rpmfi_s::te.

Referenced by cpio_doio(), and rpmpsmStage().

int fsmStage ( FSM_t  fsm,
fileStage  stage 
)

File state machine driver.

Parameters:
fsm file state machine
stage next stage
Returns:
0 on success

Definition at line 1429 of file fsm.c.

References _, _fafilter, _free(), _fsm_debug, _tsmask, fsm_s::action, rpmfi_s::archivePos, rpmfi_s::archiveSize, fsm_s::astriplen, fsm_s::cfd, fsm_s::commit, CPIO_ALL_HARDLINKS, CPIO_FOLLOW_SYMLINKS, CPIO_SBIT_CHECK, CPIO_TRAILER, CPIOERR_CHMOD_FAILED, CPIOERR_CHOWN_FAILED, CPIOERR_ENOENT, CPIOERR_ENOTEMPTY, CPIOERR_HDR_SIZE, 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, cpioHeaderRead(), cpioHeaderWrite(), cpioTrailerWrite(), hardLink_s::createdPath, fsm_s::diskchecked, fsm_s::dnlx, errno, fsm_s::exists, expandRegular(), 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, rpmfi_s::fmodes, rpmfi_s::fmtimes, 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, IS_DEV_LOG, fsm_s::iter, fsm_s::ix, fsm_s::ldn, fsm_s::ldnalloc, fsm_s::ldnlen, left, fsm_s::li, Link(), hardLink_s::linkIndex, fsm_s::links, hardLink_s::linksLeft, lsetfilecon, Lstat(), mapFind(), fsm_s::mapFlags, mapNextIterator(), Mkdir(), fsm_s::mkdirsdone, hardLink_s::next, hardLink_s::nlink, fsm_s::nsuffix, opath, 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::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(), saveHardLink(), hardLink_s::sb, fsm_s::sb, fsm_s::stage, Stat(), strict_erasures, fsm_s::subdir, fsm_s::sufbuf, fsm_s::suffix, rpmfi_s::te, Unlink(), 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:
fsm file state machine
Returns:
0 on success

Definition at line 607 of file fsm.c.

References 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 527 of file fsm.c.

References xcalloc().

Referenced by rpmfiNew().


Variable Documentation

Definition at line 38 of file fsm.c.


Generated on 31 Jul 2012 for rpm by  doxygen 1.6.1