lib/fsm.c - File state machine to handle a payload from a package.
#include 'system.h'
#include 'psm.h'
#include 'rpmerr.h'
#include 'debug.h'
#define alloca_strdup(_s) strcpy(alloca(strlen(_s)+1), (_s))
#define SUFFIX_RPMORIG '.rpmorig'
#define SUFFIX_RPMSAVE '.rpmsave'
#define SUFFIX_RPMNEW '.rpmnew'
#define IS_DEV_LOG(_x)
#define _fafilter(_a)
#define _tsmask (RPMTRANS_FLAG_PKGCOMMIT | RPMTRANS_FLAG_COMMIT)
rpmTransactionSet fsmGetTs (const FSM_t fsm)
Retrieve transaction set from file state machine iterator.
TFI_t fsmGetFi (const FSM_t fsm)
Retrieve transaction element file info from file state machine iterator.
const char * fsmFsPath (const FSM_t fsm, const struct stat *st, const char *subdir, const char *suffix)
void * mapFreeIterator (const void *p)
void * mapInitIterator (const void *a, const void *b)
int mapNextIterator (void *a)
int cpioStrCmp (const void *a, const void *b)
int mapFind (void *a, const char *fsmPath)
void * dnlFreeIterator (const void *a)
int dnlCount (const DNLI_t dnli)
int dnlIndex (const DNLI_t dnli)
void * dnlInitIterator (const FSM_t fsm, int reverse)
const char * dnlNextIterator (DNLI_t dnli)
int saveHardLink (FSM_t fsm)
void * freeHardLink (struct hardLink_s *li)
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 rpmTransactionSet ts, const TFI_t 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.
int fsmMapPath (FSM_t fsm)
Map next file path and action.
int fsmMapAttrs (FSM_t fsm)
Map file stat(2) info.
int expandRegular (FSM_t fsm)
int writeFile (FSM_t fsm, int writeData)
int writeLinkedFile (FSM_t fsm)
int fsmMakeLinks (FSM_t fsm)
int fsmCommitLinks (FSM_t fsm)
int fsmRmdirs (FSM_t fsm)
Remove (if created) directories not explicitly included in package.
int fsmMkdirs (FSM_t fsm)
Create (if necessary) directories not explicitly included in package.
int fsmStage (FSM_t fsm, fileStage stage)
File state machine driver.
const char *const fileActionString (fileAction a)
Return formatted string representation of file disposition.
const char *const fileStageString (fileStage a)
Return formatted string representation of file stages.
int _fsm_debug = 0
int strict_erasures = 0
File state machine to handle a payload from a package.
Value:
(!((_a) == FA_CREATE || (_a) == FA_ERASE || (_a) == FA_COPYIN || (_a) == FA_COPYOUT) ? fileActionString(_a) : '')
Definition at line 18 of file fsm.c.
Referenced by ftpNLST(), readPackageHeaders(), relocateFileList(), and writeFile().
Value:
((_x) != NULL && strlen(_x) >= (sizeof('/dev/log')-1) && !strncmp((_x), '/dev/log', sizeof('/dev/log')-1) && ((_x)[sizeof('/dev/log')-1] == ' ' || (_x)[sizeof('/dev/log')-1] == ';'))
Definition at line 1204 of file fsm.c.
Definition at line 44 of file fsm.c.
Definition at line 42 of file fsm.c.
Definition at line 43 of file fsm.c.
Return formatted string representation of file disposition.
Parameters:
Returns: formatted string
Definition at line 2131 of file fsm.c.
References FA_ALTNAME, FA_BACKUP, FA_COPYIN, FA_COPYOUT, FA_CREATE, FA_ERASE, FA_SAVE, FA_SKIP, FA_SKIPMULTILIB, FA_SKIPNETSHARED, FA_SKIPNSTATE, FA_UNKNOWN, and fileAction.
Return formatted string representation of file stages.
Parameters:
Returns: formatted string
Definition at line 2151 of file fsm.c.
References fileStage, FSM_CHMOD, FSM_CHOWN, FSM_CHROOT, FSM_COMMIT, FSM_CREATE, FSM_DESTROY, FSM_DREAD, FSM_DWRITE, FSM_EAT, FSM_FINI, FSM_HREAD, FSM_HWRITE, FSM_INIT, FSM_LCHOWN, FSM_LINK, 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_PKGUNDO, 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_TRAILER, FSM_UNDO, FSM_UNKNOWN, FSM_UNLINK, FSM_UTIME, FSM_VERIFY, FSM_WCLOSE, FSM_WOPEN, and FSM_WRITE.
Destroy file state machine instance.
Parameters:
Returns: always NULL
Definition at line 438 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.
Retrieve transaction element file info from file state machine iterator.
Parameters:
Returns: transaction element file info
Definition at line 34 of file fsm.c.
References fsmIterator_s::fi, and fsm_s::iter.
Referenced by dnlInitIterator(), fsmMapAttrs(), fsmMapPath(), fsmMkdirs(), fsmStage(), saveHardLink(), and writeFile().
Retrieve transaction set from file state machine iterator.
Parameters:
Returns: transaction set
Definition at line 27 of file fsm.c.
References fsm_s::iter, and fsmIterator_s::ts.
Referenced by fsmMapAttrs(), fsmStage(), and writeFile().
Map file stat(2) info.
Parameters:
Definition at line 616 of file fsm.c.
References CPIO_MAP_GID, CPIO_MAP_MODE, CPIO_MAP_TYPE, CPIO_MAP_UID, transactionFileInfo_s::dperms, transactionFileInfo_s::fc, transactionFileInfo_s::fgids, transactionFileInfo_s::fmd5s, fsm_s::fmd5sum, transactionFileInfo_s::fmodes, transactionFileInfo_s::fmtimes, transactionFileInfo_s::fperms, transactionFileInfo_s::frdevs, fsmGetFi(), fsmGetTs(), transactionFileInfo_s::fuids, transactionFileInfo_s::gid, int_32, fsm_s::ix, fsm_s::mapFlags, RPMTRANS_FLAG_NOMD5, fsm_s::sb, rpmTransactionSet_s::transFlags, and transactionFileInfo_s::uid.
Map next file path and action.
Parameters:
Definition at line 521 of file fsm.c.
References _free(), fsm_s::action, transactionFileInfo_s::action, transactionFileInfo_s::actions, fsm_s::astriplen, transactionFileInfo_s::astriplen, fsm_s::baseName, transactionFileInfo_s::bnl, CPIO_MAP_PATH, transactionFileInfo_s::dil, fsm_s::dirName, transactionFileInfo_s::dnl, FA_ALTNAME, FA_BACKUP, FA_COPYIN, FA_COPYOUT, FA_CREATE, FA_ERASE, FA_SAVE, FA_SKIP, FA_SKIPMULTILIB, FA_SKIPNETSHARED, FA_SKIPNSTATE, FA_UNKNOWN, transactionFileInfo_s::fc, fsm_s::fflags, transactionFileInfo_s::fflags, transactionFileInfo_s::flags, transactionFileInfo_s::fmapflags, fsmFsPath(), fsmGetFi(), transactionFileInfo_s::fstates, fsm_s::ix, fsm_s::mapFlags, transactionFileInfo_s::mapflags, fsm_s::nsuffix, fsm_s::osuffix, fsm_s::path, RPMFILE_GHOST, RPMFILE_STATE_NETSHARED, RPMFILE_STATE_NOTINSTALLED, fsm_s::sb, fsm_s::subdir, fsm_s::suffix, SUFFIX_RPMNEW, SUFFIX_RPMORIG, SUFFIX_RPMSAVE, and transactionFileInfo_s::type.
Create (if necessary) directories not explicitly included in package.
Parameters:
Returns: 0 on success
Definition at line 1072 of file fsm.c.
References _, CPIOERR_LSTAT_FAILED, dnlCount(), dnlFreeIterator(), dnlIndex(), dnlInitIterator(), dnlNextIterator(), transactionFileInfo_s::dperms, FSM_LSTAT, FSM_MKDIR, fsmGetFi(), fsmStage(), RPMMESS_DEBUG, rpmMessage, stpcpy(), xcalloc(), and xrealloc().
Remove (if created) directories not explicitly included in package.
Parameters:
Returns: 0 on success
Definition at line 1021 of file fsm.c.
References dnlCount(), dnlFreeIterator(), dnlIndex(), dnlInitIterator(), dnlNextIterator(), FSM_RMDIR, fsmStage(), and stpcpy().
Load external data into file state machine.
Parameters:
Returns: 0 on success
Definition at line 454 of file fsm.c.
References transactionFileInfo_s::ap, transactionFileInfo_s::archiveSize, fsm_s::archiveSize, fsm_s::cfd, fsm_s::failedFile, fdGetCpioPos(), fdLink, fdSetCpioPos(), fileStage, FSM_CREATE, FSM_PKGINSTALL, fsmStage(), fsm_s::goal, transactionFileInfo_s::h, rpmTransactionSet_s::id, fsm_s::iter, availablePackage::key, mapInitIterator(), rpmTransactionSet_s::notify, rpmTransactionSet_s::notifyData, fsm_s::rc, RPMCALLBACK_INST_START, and fsm_s::sufbuf.
Referenced by cpio_doio(), and psmStage().
File state machine driver.
Parameters:
Returns: 0 on success
Definition at line 1211 of file fsm.c.
References _, _free(), _fsm_debug, fsm_s::action, alloca(), transactionFileInfo_s::ap, transactionFileInfo_s::archiveSize, fsm_s::astriplen, fsm_s::cfd, fsm_s::commit, CPIO_ALL_HARDLINKS, CPIO_FOLLOW_SYMLINKS, CPIO_TRAILER, CPIOERR_CHMOD_FAILED, CPIOERR_CHOWN_FAILED, CPIOERR_HDR_SIZE, CPIOERR_HDR_TRAILER, CPIOERR_LINK_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(), fdGetCpioPos(), fdSetCpioPos(), Ferror(), fsm_s::fflags, fileStage, fileStageString(), hardLink_s::filex, fiTypeString(), transactionFileInfo_s::fmodes, transactionFileInfo_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_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(), fsmMapPath(), fsmMkdirs(), fsmRmdirs(), Fwrite(), fsm_s::goal, transactionFileInfo_s::h, IS_DEV_LOG, fsm_s::iter, fsm_s::ix, availablePackage::key, lchown, fsm_s::ldn, fsm_s::ldnalloc, fsm_s::ldnlen, fsm_s::li, Link(), hardLink_s::linkIndex, fsm_s::links, hardLink_s::linksLeft, Lstat(), mapFind(), fsm_s::mapFlags, mapNextIterator(), Mkdir(), fsm_s::mkdirsdone, hardLink_s::next, hardLink_s::nlink, rpmTransactionSet_s::notify, rpmTransactionSet_s::notifyData, 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::rfd, Rmdir(), RPMCALLBACK_INST_PROGRESS, RPMDEBUG_RMDIR, RPMDEBUG_UNLINK, RPMERR_RMDIR, RPMERR_UNLINK, rpmError, RPMFILE_MISSINGOK, RPMMESS_DEBUG, RPMMESS_WARNING, rpmMessage, S_ISLNK, S_ISSOCK, saveHardLink(), fsm_s::sb, hardLink_s::sb, fsm_s::stage, Stat(), stpcpy(), strict_erasures, fsm_s::subdir, fsm_s::sufbuf, fsm_s::suffix, rpmTransactionSet_s::transFlags, 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 cpioHeaderRead(), cpioHeaderWrite(), cpioTrailerWrite(), expandRegular(), fsmCommitLinks(), fsmMakeLinks(), fsmMkdirs(), fsmRmdirs(), fsmSetup(), fsmTeardown(), saveHardLink(), writeFile(), and writeLinkedFile().
Clean file state machine.
Parameters:
Returns: 0 on success
Definition at line 504 of file fsm.c.
References fsm_s::cfd, fsm_s::failedFile, fdFree, FSM_DESTROY, fsmStage(), fsm_s::iter, mapFreeIterator(), and fsm_s::rc.
Referenced by cpio_doio(), and psmStage().
Create file state machine instance.
Returns: file state machine data
Definition at line 432 of file fsm.c.
References xcalloc().
Definition at line 20 of file fsm.c.
Definition at line 24 of file fsm.c.
Generated automatically by Doxygen for rpm from the source code.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |