# lib/psm.h File Reference

Package state machine to handle a package from a transaction set. More...

`#include "fsm.h"`
`#include "depends.h"`

Go to the source code of this file.

## Data Structures

struct | sharedFileInfo
struct | transactionFileInfo_s
struct | psm_s

## Defines

#define | TFIMAGIC 0x09697923
#define | PSM_VERBOSE 0x8000
#define | PSM_INTERNAL 0x4000
#define | PSM_SYSCALL 0x2000
#define | PSM_DEAD 0x1000
#define | _fv(_a) ((_a) | PSM_VERBOSE)
#define | _fi(_a) ((_a) | PSM_INTERNAL)
#define | _fs(_a) ((_a) | (PSM_INTERNAL | PSM_SYSCALL))
#define | _fd(_a) ((_a) | (PSM_INTERNAL | PSM_DEAD))

## Typedefs

typedef enum pkgStage_e | pkgStage

## Enumerations

enum

pkgStage_e {
PSM_UNKNOWN = 0, PSM_INIT = 1, PSM_PRE = 2, PSM_PROCESS = 3,
PSM_POST = 4, PSM_UNDO = 5, PSM_FINI = 6, PSM_PKGINSTALL = 7,
PSM_PKGERASE = 8, PSM_PKGCOMMIT = 10, PSM_PKGSAVE = 12, PSM_CREATE = 17,
PSM_NOTIFY = 22, PSM_DESTROY = 23, PSM_COMMIT = 25, PSM_CHROOT_IN = 51,
PSM_CHROOT_OUT = 52, PSM_SCRIPT = 53, PSM_TRIGGERS = 54, PSM_IMMED_TRIGGERS = 55,
PSM_RPMIO_FLAGS = 56, PSM_RPMDB_LOAD = 97, PSM_RPMDB_ADD = 98, PSM_RPMDB_REMOVE = 99
}

## Functions

void | loadFi (Header h, TFI_t fi)
| Load data from header into transaction file element info.
void | freeFi (TFI_t fi)
| Destroy transaction element file info.
const char *const | fiTypeString (TFI_t fi)
| Return formatted string representation of package disposition.
int | psmStage (PSM_t psm, pkgStage stage)
| Package state machine driver.

## Detailed Description

Package state machine to handle a package from a transaction set.

Definition in file psm.h.

## Define Documentation

#define _fd | ( | _a |  | ) | ((_a) | (PSM_INTERNAL | PSM_DEAD))

| Definition at line 119 of file psm.h.

#define _fi | ( | _a |  | ) | ((_a) | PSM_INTERNAL)

| Definition at line 117 of file psm.h.

#define _fs | ( | _a |  | ) | ((_a) | (PSM_INTERNAL | PSM_SYSCALL))

| Definition at line 118 of file psm.h.

#define _fv | ( | _a |  | ) | ((_a) | PSM_VERBOSE)

| Definition at line 116 of file psm.h.

#define PSM_DEAD 0x1000

| Definition at line 115 of file psm.h.

#define PSM_INTERNAL 0x4000

| Definition at line 113 of file psm.h.

#define PSM_SYSCALL 0x2000

| Definition at line 114 of file psm.h.

#define PSM_VERBOSE 0x8000

| Definition at line 112 of file psm.h.

#define TFIMAGIC 0x09697923

| Definition at line 94 of file psm.h. Referenced by rpmRunTransactions(), and rpmVerifyScript().

## Typedef Documentation

typedef enum pkgStage_e pkgStage

| Referenced by pkgStageString(), and psmStage().

## Enumeration Type Documentation

enum pkgStage_e

Enumeration values:

  PSM_UNKNOWN |
  PSM_INIT |
  PSM_PRE |
  PSM_PROCESS |
  PSM_POST |
  PSM_UNDO |
  PSM_FINI |
  PSM_PKGINSTALL |
  PSM_PKGERASE |
  PSM_PKGCOMMIT |
  PSM_PKGSAVE |
  PSM_CREATE |
  PSM_NOTIFY |
  PSM_DESTROY |
  PSM_COMMIT |
  PSM_CHROOT_IN |
  PSM_CHROOT_OUT |
  PSM_SCRIPT |
  PSM_TRIGGERS |
  PSM_IMMED_TRIGGERS |
  PSM_RPMIO_FLAGS |
  PSM_RPMDB_LOAD |
  PSM_RPMDB_ADD |
  PSM_RPMDB_REMOVE |

Definition at line 120 of file psm.h.

## Function Documentation

const char* const fiTypeString | ( | TFI_t | fi | ) |

Return formatted string representation of package disposition.

Parameters:

  a | package dispostion

Returns:
  formatted string

Definition at line 235 of file psm.c.

References TFI_t, and transactionFileInfo_s::type.

Referenced by fsmStage().

void freeFi | ( | TFI_t | fi | ) |

Destroy transaction element file info.

Parameters:

  fi | transaction element file info

Definition at line 188 of file psm.c.

References _free(), transactionFileInfo_s::actions, transactionFileInfo_s::apath, transactionFileInfo_s::bnl, transactionFileInfo_s::dil, transactionFileInfo_s::dnl, transactionFileInfo_s::fflags, transactionFileInfo_s::fgids, transactionFileInfo_s::fgroup, transactionFileInfo_s::flangs, transactionFileInfo_s::flinks, transactionFileInfo_s::fmapflags, transactionFileInfo_s::fmd5s, transactionFileInfo_s::fmodes, freeFSM(), transactionFileInfo_s::fsizes, transactionFileInfo_s::fsm, transactionFileInfo_s::fstates, transactionFileInfo_s::fuids, transactionFileInfo_s::fuser, transactionFileInfo_s::h, headerFree(), transactionFileInfo_s::hfd, HFD_t, transactionFileInfo_s::name, transactionFileInfo_s::obnl, transactionFileInfo_s::odnl, transactionFileInfo_s::release, transactionFileInfo_s::replaced, transactionFileInfo_s::replacedSizes, TFI_t, transactionFileInfo_s::type, and transactionFileInfo_s::version.

Referenced by freeFl(), freePackage(), freeSpec(), rpmInstallSourcePackage(), and rpmVerifyScript().

void loadFi | ( | Header | h,
|  | TFI_t | fi
| ) |

Load data from header into transaction file element info.

Parameters:

  h | header
  fi | transaction element file info

Definition at line 72 of file psm.c.

References transactionFileInfo_s::action, transactionFileInfo_s::actions, transactionFileInfo_s::archiveSize, transactionFileInfo_s::bnl, transactionFileInfo_s::bnlmax, CPIO_ALL_HARDLINKS, CPIO_MAP_ABSOLUTE, CPIO_MAP_ADDDOT, CPIO_MAP_GID, CPIO_MAP_MODE, CPIO_MAP_PATH, CPIO_MAP_UID, transactionFileInfo_s::dc, transactionFileInfo_s::dil, transactionFileInfo_s::dnl, transactionFileInfo_s::dnlmax, transactionFileInfo_s::dperms, transactionFileInfo_s::epoch, FA_UNKNOWN, transactionFileInfo_s::fc, transactionFileInfo_s::fflags, transactionFileInfo_s::flags, transactionFileInfo_s::flangs, transactionFileInfo_s::flinks, transactionFileInfo_s::fmd5s, transactionFileInfo_s::fmodes, transactionFileInfo_s::fmtimes, transactionFileInfo_s::fperms, transactionFileInfo_s::frdevs, transactionFileInfo_s::fsizes, transactionFileInfo_s::fsm, transactionFileInfo_s::fstates, transactionFileInfo_s::h, transactionFileInfo_s::hae, HAE_t, Header, headerFree(), headerLink(), transactionFileInfo_s::hfd, HFD_t, transactionFileInfo_s::hge, HGE_t, transactionFileInfo_s::hme, HME_t, transactionFileInfo_s::hre, HRE_t, transactionFileInfo_s::mapflags, transactionFileInfo_s::name, newFSM(), transactionFileInfo_s::release, transactionFileInfo_s::replacedSizes, RPMTAG_ARCHIVESIZE, RPMTAG_BASENAMES, RPMTAG_DIRINDEXES, RPMTAG_DIRNAMES, RPMTAG_EPOCH, RPMTAG_FILEFLAGS, RPMTAG_FILELANGS, RPMTAG_FILELINKTOS, RPMTAG_FILEMD5S, RPMTAG_FILEMODES, RPMTAG_FILEMTIMES, RPMTAG_FILERDEVS, RPMTAG_FILESIZES, RPMTAG_FILESTATES, RPMTAG_NAME, RPMTAG_RELEASE, RPMTAG_VERSION, TFI_t, transactionFileInfo_s::type, uint_32, transactionFileInfo_s::version, xcalloc(), xmalloc(), and xstrdup().

Referenced by genCpioListAndHeader(), rpmInstallSourcePackage(), rpmRunTransactions(), and rpmVerifyScript().

int psmStage | ( | PSM_t | psm,
|  | pkgStage | stage
| ) |

Package state machine driver.

Todo:
  Packages w/o files never get a callback, hence don't get displayed on install with -v.

Definition at line 1342 of file psm.c.

References _, _free(), transactionFileInfo_s::action, transactionFileInfo_s::actions, psm_s::amount, transactionFileInfo_s::ap, transactionFileInfo_s::apath, transactionFileInfo_s::archiveSize, buildOrigFileList(), psm_s::cfd, psm_s::chrootDone, rpmTransactionSet_s::chrootDone, psm_s::countCorrection, CPIO_MAP_GID, CPIO_MAP_MODE, CPIO_MAP_PATH, CPIO_MAP_UID, cpioStrerror(), rpmTransactionSet_s::currDir, errno, FA_COPYOUT, psm_s::failedFile, transactionFileInfo_s::fc, Fclose(), psm_s::fd, fdDup(), Fdopen(), Ferror(), Fflush(), transactionFileInfo_s::fgids, transactionFileInfo_s::fgroup, psm_s::fi, fileAction, Fileno(), transactionFileInfo_s::fmodes, Fopen(), transactionFileInfo_s::fsm, FSM_PKGBUILD, FSM_PKGCOMMIT, FSM_PKGERASE, FSM_PKGINSTALL, fsmSetup(), fsmTeardown(), transactionFileInfo_s::fstates, Fstrerror(), transactionFileInfo_s::fuids, transactionFileInfo_s::fuser, transactionFileInfo_s::gid, gnameToGid(), psm_s::goal, transactionFileInfo_s::h, Header, HEADER_MAGIC_YES, headerAddEntry(), headerCopy(), headerCopyLoad(), headerFree(), headerFreeData(), headerFreeIterator(), headerGetEntry(), headerInitIterator(), headerIsEntry(), HeaderIterator, headerLink(), headerNew(), headerNextIterator(), headerRegenSigHeader(), headerSprintf(), headerWrite(), transactionFileInfo_s::hfd, HFD_t, transactionFileInfo_s::hge, HGE_t, transactionFileInfo_s::hme, HME_t, hPTR_t, rpmTransactionSet_s::id, int_32, availablePackage::key, transactionFileInfo_s::mapflags, markReplacedFiles(), mergeFiles(), psm_s::mi, transactionFileInfo_s::name, rpmTransactionSet_s::notify, rpmTransactionSet_s::notifyData, psm_s::npkgs_installed, psm_s::oh, psm_s::pkgfn, pkgStage, pkgStageString(), psm_s::pkgURL, psm_s::progTag, PSM_CHROOT_IN, PSM_CHROOT_OUT, PSM_COMMIT, PSM_CREATE, PSM_DESTROY, PSM_FINI, PSM_IMMED_TRIGGERS, PSM_INIT, PSM_NOTIFY, PSM_PKGCOMMIT, PSM_PKGERASE, PSM_PKGINSTALL, PSM_PKGSAVE, PSM_POST, PSM_PRE, PSM_PROCESS, PSM_RPMDB_ADD, PSM_RPMDB_LOAD, PSM_RPMDB_REMOVE, PSM_RPMIO_FLAGS, PSM_SCRIPT, PSM_t, PSM_TRIGGERS, PSM_UNDO, PSM_UNKNOWN, psm_s::rc, transactionFileInfo_s::record, transactionFileInfo_s::release, rpmTransactionSet_s::rootDir, RPM_CHAR_TYPE, RPM_INT32_TYPE, rpmBuildFileList(), RPMCALLBACK_INST_PROGRESS, RPMCALLBACK_UNINST_START, RPMCALLBACK_UNINST_STOP, rpmTransactionSet_s::rpmdb, rpmdbAdd(), rpmdbCountPackages(), rpmdbFreeIterator(), rpmdbGetIteratorOffset(), RPMDBI_PACKAGES, rpmdbInitIterator(), rpmdbNextIterator(), rpmdbRemove(), rpmdbSetIteratorRE(), RPMERR_CPIO, RPMERR_NOSPACE, RPMERR_SCRIPT, rpmError, RPMFILE_STATE_NORMAL, rpmFreeSignature(), rpmGenPath(), rpmGetArchInfo(), rpmGetOsInfo(), rpmGetPath(), rpmHeaderFormats, psm_s::rpmio_flags, RPMLEAD_BINARY, RPMMESS_DEBUG, RPMMESS_VERBOSE, RPMMESS_WARNING, rpmMessage, RPMMIRE_DEFAULT, rpmRC, RPMRC_FAIL, RPMRC_OK, RPMSENSE_TRIGGERIN, RPMSENSE_TRIGGERPOSTUN, RPMSENSE_TRIGGERUN, RPMSIGTYPE_HEADERSIG, RPMTAG_DEFAULTPREFIX, RPMTAG_FILEGROUPNAME, RPMTAG_FILESTATES, RPMTAG_FILEUSERNAME, RPMTAG_HEADERIMAGE, RPMTAG_HEADERIMMUTABLE, RPMTAG_INSTALLTIME, RPMTAG_MULTILIBS, RPMTAG_NAME, RPMTAG_ORIGBASENAMES, RPMTAG_PAYLOADCOMPRESSOR, RPMTAG_POSTIN, RPMTAG_POSTINPROG, RPMTAG_POSTUN, RPMTAG_POSTUNPROG, RPMTAG_PREIN, RPMTAG_PREINPROG, RPMTAG_PREUN, RPMTAG_PREUNPROG, RPMTAG_RELEASE, RPMTAG_REMOVETID, RPMTAG_VERSION, rpmTagTable, RPMTRANS_FLAG_APPLYONLY, RPMTRANS_FLAG_JUSTDB, RPMTRANS_FLAG_MULTILIB, RPMTRANS_FLAG_NOPOST, RPMTRANS_FLAG_NOPOSTUN, RPMTRANS_FLAG_NOPRE, RPMTRANS_FLAG_NOPREUN, RPMTRANS_FLAG_NOTRIGGERIN, RPMTRANS_FLAG_NOTRIGGERPOSTUN, RPMTRANS_FLAG_NOTRIGGERPREIN, RPMTRANS_FLAG_NOTRIGGERUN, RPMTRANS_FLAG_PKGCOMMIT, RPMTRANS_FLAG_TEST, rpmTransactionSet, rpmWriteSignature(), runImmedTriggers(), runInstScript(), runTriggers(), psm_s::scriptArg, psm_s::scriptTag, psm_s::sense, psm_s::stepName, stpcpy(), transactionFileInfo_s::striplen, tag2sln(), TFI_t, psm_s::total, rpmTransactionSet_s::transFlags, psm_s::ts, transactionFileInfo_s::uid, uint_32, unameToUid(), urlPath(), transactionFileInfo_s::version, psm_s::what, writeLead(), xcalloc(), and xmalloc().

Referenced by rpmInstallSourcePackage(), rpmRunTransactions(), and rpmVerifyScript().