psm.h File Reference
PAYLOAD.

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

`#include <rpmsq.h>`
Include dependency graph for psm.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

## Data Structures

struct | rpmpsm_s

## Macros

#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))
#define | rpmpsmUnlink(_psm, _msg) ((rpmpsm)rpmioUnlinkPoolItem((rpmioItem)(_psm), _msg, __FILE__, __LINE__))
#define | rpmpsmLink(_psm, _msg) ((rpmpsm)rpmioLinkPoolItem((rpmioItem)(_psm), _msg, __FILE__, __LINE__))
#define | rpmpsmFree(_psm, _msg) ((rpmpsm)rpmioFreePoolItem((rpmioItem)(_psm), _msg, __FILE__, __LINE__))
#define | rpmpsmUNSAFE rpmpsmSTAGE

## Typedefs

typedef struct rpmpsm_s * | rpmpsm
| Package state machine data. More...
typedef enum pkgStage_e | pkgStage
typedef enum rpmScriptID_e | rpmScriptID
| Scriptlet identifiers. More...
typedef enum rpmScriptState_e | rpmScriptState
| Scriptlet states (when installed). More...
typedef enum rpmpsmFlags_e | rpmpsmFlags
| PSM control bits. More...

## 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
}

enum | rpmScriptID_e { RPMSCRIPT_UNKNOWN = 0, RPMSCRIPT_PRETRANS = 1, RPMSCRIPT_TRIGGERPREIN = 2, RPMSCRIPT_PREIN = 3, RPMSCRIPT_POSTIN = 4, RPMSCRIPT_TRIGGERIN = 5, RPMSCRIPT_TRIGGERUN = 6, RPMSCRIPT_PREUN = 7, RPMSCRIPT_POSTUN = 8, RPMSCRIPT_TRIGGERPOSTUN = 9, RPMSCRIPT_POSTTRANS = 10, RPMSCRIPT_VERIFY = 16, RPMSCRIPT_SANITYCHECK = 17, RPMSCRIPT_MAX = 32 }
| Scriptlet identifiers. More...
enum | rpmScriptState_e { RPMSCRIPT_STATE_UNKNOWN = 0, RPMSCRIPT_STATE_EXEC = (1 << 16), RPMSCRIPT_STATE_REAPED = (1 << 17), RPMSCRIPT_STATE_SELINUX = (1 << 24), RPMSCRIPT_STATE_EMULATOR = (1 << 25), RPMSCRIPT_STATE_LUA = (1 << 26) }
| Scriptlet states (when installed). More...
enum | rpmpsmFlags_e { RPMPSM_FLAGS_DEBUG = (1 << 0), RPMPSM_FLAGS_CHROOTDONE = (1 << 1), RPMPSM_FLAGS_UNORDERED = (1 << 2), RPMPSM_FLAGS_GOTTRIGGERS = (1 << 3) }
| PSM control bits. More...

## Functions

rpmpsm | rpmpsmUnlink (rpmpsm psm, const char *msg)
| Unreference a package state machine instance. More...
rpmpsm | rpmpsmLink (rpmpsm psm, const char *msg)
| Reference a package state machine instance. More...
rpmpsm | rpmpsmFree (rpmpsm psm, const char *msg)
| Destroy a package state machine. More...
rpmpsm | rpmpsmNew (rpmts ts, rpmte te, rpmfi fi)
| Create and load a package state machine. More...
rpmRC | rpmpsmStage (rpmpsm psm, pkgStage stage)
| Package state machine driver. More...

## Variables

int | _psm_debug

## Detailed Description

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

Definition in file psm.h.

## Macro Definition Documentation

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

Definition at line 31 of file psm.h.

Referenced by fdFini(), and rpmInstallSourcePackage().

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

Definition at line 29 of file psm.h.

Referenced by rpmfiFini().

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

Definition at line 30 of file psm.h.

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

Definition at line 28 of file psm.h.

#define PSM_DEAD 0x1000

Definition at line 27 of file psm.h.

#define PSM_INTERNAL 0x4000

Definition at line 25 of file psm.h.

#define PSM_SYSCALL 0x2000

Definition at line 26 of file psm.h.

#define PSM_VERBOSE 0x8000

Definition at line 24 of file psm.h.

#define rpmpsmFree | ( |  | _psm,
|  |  | _msg
| ) |  | ((rpmpsm)rpmioFreePoolItem((rpmioItem)(_psm), _msg, __FILE__, __LINE__))

Definition at line 218 of file psm.h.

#define rpmpsmLink | ( |  | _psm,
|  |  | _msg
| ) |  | ((rpmpsm)rpmioLinkPoolItem((rpmioItem)(_psm), _msg, __FILE__, __LINE__))

Definition at line 205 of file psm.h.

#define rpmpsmUnlink | ( |  | _psm,
|  |  | _msg
| ) |  | ((rpmpsm)rpmioUnlinkPoolItem((rpmioItem)(_psm), _msg, __FILE__, __LINE__))

Definition at line 193 of file psm.h.

#define rpmpsmUNSAFE rpmpsmSTAGE

Definition at line 241 of file psm.h.

## Typedef Documentation

typedef enum pkgStage_e pkgStage

typedef enum rpmpsmFlags_e rpmpsmFlags

PSM control bits.

typedef enum rpmScriptID_e rpmScriptID

Scriptlet identifiers.

typedef enum rpmScriptState_e rpmScriptState

Scriptlet states (when installed).

## Enumeration Type Documentation

enum pkgStage_e

Enumerator
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 32 of file psm.h.

enum rpmpsmFlags_e

PSM control bits.

Enumerator
RPMPSM_FLAGS_DEBUG | (unimplemented)
RPMPSM_FLAGS_CHROOTDONE | Was chroot(2) done?
RPMPSM_FLAGS_UNORDERED | Are all pre-requsites done?
RPMPSM_FLAGS_GOTTRIGGERS | Triggers were retrieved?

Definition at line 106 of file psm.h.

enum rpmScriptID_e

Scriptlet identifiers.

Enumerator
RPMSCRIPT_UNKNOWN | unknown scriptlet
RPMSCRIPT_PRETRANS | pretrans scriptlet
RPMSCRIPT_TRIGGERPREIN | triggerprein scriptlet
RPMSCRIPT_PREIN | pre scriptlet
RPMSCRIPT_POSTIN | post scriptlet
RPMSCRIPT_TRIGGERIN | triggerin scriptlet
RPMSCRIPT_TRIGGERUN | triggerun scriptlet
RPMSCRIPT_PREUN | preun scriptlet
RPMSCRIPT_POSTUN | postun scriptlet
RPMSCRIPT_TRIGGERPOSTUN | triggerpostun scriptlet
RPMSCRIPT_POSTTRANS | posttrans scriptlet
RPMSCRIPT_VERIFY | verify scriptlet
RPMSCRIPT_SANITYCHECK | sanitycheck scriptlet
RPMSCRIPT_MAX |

Definition at line 71 of file psm.h.

enum rpmScriptState_e

Scriptlet states (when installed).

Enumerator
RPMSCRIPT_STATE_UNKNOWN |
RPMSCRIPT_STATE_EXEC | scriptlet was exec'd
RPMSCRIPT_STATE_REAPED | scriptlet was reaped
RPMSCRIPT_STATE_SELINUX | scriptlet exec by SELinux
RPMSCRIPT_STATE_EMULATOR | scriptlet exec in emulator
RPMSCRIPT_STATE_LUA | scriptlet exec with lua

Definition at line 92 of file psm.h.

## Function Documentation

rpmpsm rpmpsmFree | ( | rpmpsm | psm,
|  | const char * | msg
| ) |  |

Destroy a package state machine.

Parameters

  psm | package state machine

Returns
  NULL on last dereference

Referenced by _processFailedPackage(), rpmtsRun(), and rpmVerifyScript().

rpmpsm rpmpsmLink | ( | rpmpsm | psm,
|  | const char * | msg
| ) |  |

Reference a package state machine instance.

Parameters

  psm | package state machine
  msg |

Returns
  new package state machine reference

Referenced by rpmpsmNew().

rpmpsm rpmpsmNew | ( | rpmts | ts,
|  | rpmte | te,
|  | rpmfi | fi
| ) |  |

Create and load a package state machine.

Parameters

  ts | transaction set
  te | transaction set element
  fi | file info set

Returns
  new package state machine

Definition at line 1732 of file psm.c.

References rpmpsm_s::fi, rpmpsm_s::IPhe, rpmpsm_s::NVRA, rpmfiLink(), rpmpsmGetPool(), rpmpsmLink(), RPMSCRIPT_MAX, rpmtsLink(), rpmpsm_s::sstates, rpmpsm_s::te, rpmpsm_s::triggers, rpmpsm_s::ts, and xcalloc().

Referenced by _processFailedPackage(), rpmtsRun(), and rpmVerifyScript().

rpmRC rpmpsmStage | ( | rpmpsm | psm,
|  | pkgStage | stage
| ) |  |

Package state machine driver.

Parameters

  psm | package state machine data
  stage | next stage

Returns
  0 on success

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

Definition at line 2091 of file psm.c.

References _, _free(), alloca(), rpmpsm_s::amount, rpmDataType_u::argv, _HE_s::c, rpmpsm_s::cfd, Chdir(), Chroot(), rpmpsm_s::countCorrection, D_, dbiOpen(), errno, F_CLR, F_ISSET, F_SET, FA_COPYOUT, rpmpsm_s::failedFile, Fclose(), rpmpsm_s::fd, fdDup(), Fdopen(), FDSTAT_DIGEST, fdstat_op(), FDSTAT_READ, FDSTAT_WRITE, Ferror(), Fflush(), rpmpsm_s::fi, Fileno(), Fopen(), fsmSetup(), fsmTeardown(), Fstrerror(), rpmpsm_s::goal, hCopyTag(), headerCopyLoad(), headerFini(), headerFree(), headerGet(), headerGetInstance(), headerInit(), headerIsEntry(), headerLink(), headerNew(), headerNext(), headerPut(), headerRegenSigHeader(), headerReload(), headerSetInstance(), headerSprintf(), hLoadTID(), hSaveFlinks(), IOSM_MAP_GID, IOSM_MAP_MODE, IOSM_MAP_PATH, IOSM_MAP_UID, IOSM_PKGBUILD, IOSM_PKGCOMMIT, IOSM_PKGERASE, IOSM_PKGINSTALL, IOSM_SBIT_CHECK, iosmStrerror(), markReplacedFiles(), rpmpsm_s::mi, rpmpsm_s::npkgs_installed, rpmpsm_s::oh, _HE_s::p, rpmpsm_s::payload_format, rpmpsm_s::pkgfn, pkgStageString(), rpmpsm_s::pkgURL, populateInstallHeader(), postPopulateInstallHeader(), rpmpsm_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_TRIGGERS, PSM_UNDO, PSM_UNKNOWN, rpmDataType_u::ptr, rpmpsm_s::rc, RPM_BIN_TYPE, RPM_STRING_TYPE, RPM_UINT32_TYPE, RPMCALLBACK_CPIO_ERROR, RPMCALLBACK_INST_PROGRESS, RPMCALLBACK_INST_START, RPMCALLBACK_UNINST_START, RPMCALLBACK_UNINST_STOP, RPMCALLBACK_UNPACK_ERROR, rpmdbAdd(), rpmdbCountPackages(), RPMDBI_PACKAGES, rpmdbRemove(), rpmdsNew(), rpmfiFC(), RPMFILE_STATE_NORMAL, rpmGenPath(), rpmGetPath(), rpmHeaderFormats, rpmpsm_s::rpmio_flags, rpmlog(), RPMLOG_DEBUG, RPMLOG_ERR, RPMLOG_INFO, rpmmiAddPattern(), rpmmiFree(), rpmmiInstance(), rpmmiNext(), RPMMIRE_STRCMP, rpmMkdirPath(), rpmpkgSizeof(), rpmpkgWrite(), rpmpsmNext(), RPMRC_FAIL, RPMRC_OK, rpmswAdd(), rpmswEnter(), rpmswExit(), RPMTAG_ARCH, RPMTAG_ARCHIVESIZE, RPMTAG_BLINKHDRID, RPMTAG_BLINKNEVRA, RPMTAG_BLINKPKGID, RPMTAG_DEFAULTPREFIX, RPMTAG_DISTEPOCH, RPMTAG_EPOCH, RPMTAG_FILEGROUPNAME, RPMTAG_FILEPATHS, RPMTAG_FILEUSERNAME, RPMTAG_HEADERIMAGE, RPMTAG_HEADERIMMUTABLE, RPMTAG_HEADERSIGNATURES, RPMTAG_INSTALLTID, RPMTAG_NAME, RPMTAG_ORIGBASENAMES, RPMTAG_ORIGPATHS, RPMTAG_OS, RPMTAG_PACKAGEDIGEST, RPMTAG_PACKAGEORIGIN, RPMTAG_PACKAGESTAT, RPMTAG_PAYLOADCOMPRESSOR, RPMTAG_PAYLOADFORMAT, RPMTAG_POSTIN, RPMTAG_POSTINPROG, RPMTAG_POSTUN, RPMTAG_POSTUNPROG, RPMTAG_PREIN, RPMTAG_PREINPROG, RPMTAG_PREUN, RPMTAG_PREUNPROG, RPMTAG_RELEASE, RPMTAG_REMOVETID, RPMTAG_SHA1HEADER, RPMTAG_TRIGGERNAME, RPMTAG_VERSION, rpmTagTable, rpmteA(), rpmteE(), rpmteFd(), rpmteHdrid(), rpmteN(), rpmteNEVR(), rpmteO(), rpmteR(), rpmteSetDBInstance(), rpmteSetHeader(), rpmteV(), RPMTRANS_FLAG_APPLYONLY, RPMTRANS_FLAG_JUSTDB, RPMTRANS_FLAG_NOPOST, RPMTRANS_FLAG_NOPOSTUN, RPMTRANS_FLAG_NOPRE, RPMTRANS_FLAG_NOPREUN, RPMTRANS_FLAG_NORPMDB, RPMTRANS_FLAG_NOTRIGGERIN, RPMTRANS_FLAG_NOTRIGGERPOSTUN, RPMTRANS_FLAG_NOTRIGGERPREIN, RPMTRANS_FLAG_NOTRIGGERUN, RPMTRANS_FLAG_PKGCOMMIT, RPMTRANS_FLAG_TEST, RPMTRANS_TYPE_AUTOROLLBACK, RPMTRANS_TYPE_ROLLBACK, RPMTS_OP_COMPRESS, RPMTS_OP_DBADD, RPMTS_OP_DBREMOVE, RPMTS_OP_DIGEST, RPMTS_OP_UNCOMPRESS, rpmtsChrootDone(), rpmtsColor(), rpmtsCurrDir(), rpmtsFlags(), rpmtsGetRdb(), rpmtsGetTid(), rpmtsInitIterator(), rpmtsNotify(), rpmtsOp(), rpmtsRootDir(), rpmtsSetChrootDone(), rpmtsType(), rpmtsVSFlags(), RPMVSF_NOHDRCHK, runImmedTriggers(), runInstScript(), runTriggers(), rpmpsm_s::scriptArg, rpmpsm_s::scriptTag, rpmpsm_s::sense, snprintf(), rpmpsm_s::stepName, stpcpy(), rpmDataType_u::str, _HE_s::t, _HE_s::tag, tag2sln(), rpmpsm_s::te, rpmpsm_s::total, rpmpsm_s::triggers, rpmpsm_s::ts, rpmDataType_u::ui32p, urlPath(), rpmpsm_s::what, xmalloc(), and xstrdup().

Referenced by _processFailedPackage(), rpmInstallSourcePackage(), rpmpsmNext(), rpmtsRun(), and rpmVerifyScript().

rpmpsm rpmpsmUnlink | ( | rpmpsm | psm,
|  | const char * | msg
| ) |  |

Unreference a package state machine instance.

Parameters

  psm | package state machine
  msg |

Returns
  NULL on last dereference

## Variable Documentation

int _psm_debug

Definition at line 56 of file psm.c.