diff options
author | jbj <devnull@localhost> | 2000-08-23 13:11:53 +0000 |
---|---|---|
committer | jbj <devnull@localhost> | 2000-08-23 13:11:53 +0000 |
commit | 60938f2a87994c321eb3aecd855c680b738376c4 (patch) | |
tree | 41d702f2c32ed8a2124377fd280ba37dab421e0a /lib | |
parent | 5f308b88fdd39a6f656f0e25501c8d565e087e53 (diff) | |
download | rpm-60938f2a87994c321eb3aecd855c680b738376c4.tar.gz rpm-60938f2a87994c321eb3aecd855c680b738376c4.tar.bz2 rpm-60938f2a87994c321eb3aecd855c680b738376c4.zip |
doxygen/lclint annotations.
CVS patchset: 4107
CVS date: 2000/08/23 13:11:53
Diffstat (limited to 'lib')
-rw-r--r-- | lib/rpmlib.h | 254 | ||||
-rw-r--r-- | lib/uninstall.c | 75 |
2 files changed, 267 insertions, 62 deletions
diff --git a/lib/rpmlib.h b/lib/rpmlib.h index d8af9933f..61d5df7a2 100644 --- a/lib/rpmlib.h +++ b/lib/rpmlib.h @@ -18,47 +18,86 @@ extern "C" { #endif /** + * Return package signatures and header from file handle. + * @param fd file handle + * @retval signatures address of signatures pointer (or NULL) + * @retval hdr address of header pointer (or NULL) + * @return 0 on success, 1 on bad magic, 2 on error */ int rpmReadPackageInfo(FD_t fd, /*@out@*/ Header * signatures, - /*@out@*/ Header * hdr); + /*@out@*/ Header * hdr) /*@modifies *signatures, *hdr @*/; /** + * Return package header and lead info from file handle. + * @param fd file handle + * @retval hdr address of header (or NULL) + * @retval isSource + * @retval major + * @retval minor + * @return 0 on success, 1 on bad magic, 2 on error */ int rpmReadPackageHeader(FD_t fd, /*@out@*/ Header * hdr, - /*@out@*/ int * isSource, /*@out@*/ int * major, /*@out@*/ int * minor); + /*@out@*/ int * isSource, /*@out@*/ int * major, + /*@out@*/ int * minor) /*@modifies *hdr, *isSource, *major, *minor @*/; /** + * Return name, version, release strings from header. + * @param h header + * @retval np address of name pointer (or NULL) + * @retval vp address of version pointer (or NULL) + * @retval rp address of release pointer (or NULL) + * @return 0 always */ int headerNVR(Header h, /*@out@*/ const char **np, /*@out@*/ const char **vp, - /*@out@*/ const char **rp); + /*@out@*/ const char **rp) /*@modifies *np, *vp, *rp @*/; /** + * @param h header */ -void rpmBuildFileList(Header h, /*@out@*/ const char *** fileListPtr, - /*@out@*/ int * fileCountPtr); +void rpmBuildFileList(Header h,/*@out@*/ const char *** fileListPtr, + /*@out@*/ int * fileCountPtr) + /*@modifies *fileListPtr, *fileCountPtr @*/; -/* +/** + * Retrieve tag info from header. * XXX This is a "dressed" entry to headerGetEntry to do: * 1) DIRNAME/BASENAME/DIRINDICES -> FILENAMES tag conversions. * 2) i18n lookaside (if enabled). + * + * @param h header + * @param tag tag + * @retval type address of tag value data type + * @retval p address of pointer to tag value + * @retval c address of number of values + * @return 0 on success, 1 on bad magic, 2 on error */ int rpmHeaderGetEntry(Header h, int_32 tag, /*@out@*/ int_32 *type, - /*@out@*/ void **p, /*@out@*/int_32 *c); + /*@out@*/ void **p, /*@out@*/ int_32 *c) + /*@modifies *type, *p, *c @*/; -/* +/** + * Retrieve tag info from header. * XXX Yet Another dressed entry to unify signature/header tag retrieval. + * @param leadp rpm lead + * @param h header + * @param sigs signatures + * @param tag tag + * @retval type address of tag value data type + * @retval p address of pointer to tag value + * @retval c address of number of values + * @return 0 on success, 1 on bad magic, 2 on error */ int rpmPackageGetEntry(void *leadp, Header sigs, Header h, - int_32 tag, int_32 *type, void **p, int_32 *c); - - /* 0 = success */ - /* 1 = bad magic */ - /* 2 = error */ + int_32 tag, int_32 *type, void **p, int_32 *c) + /*@modifies *type, *p, *c @*/; +/** */ extern const struct headerTagTableEntry rpmTagTable[]; +/** */ extern const int rpmTagTableSize; /* this chains to headerDefaultFormats[] */ +/** */ extern const struct headerSprintfExtension rpmHeaderFormats[]; /* these pseudo-tags are used by the dbi iterator interface */ @@ -332,10 +371,15 @@ extern const struct headerSprintfExtension rpmHeaderFormats[]; #define xfree(_p) free((void *)_p) +/** rpmrc.c **/ + +/** + */ const char * rpmGetVar(int var); -void rpmSetVar(int var, const char *val); -/** rpmrc.c **/ +/** + */ +void rpmSetVar(int var, const char *val); #define RPM_MACHTABLE_INSTARCH 0 #define RPM_MACHTABLE_INSTOS 1 @@ -343,17 +387,46 @@ void rpmSetVar(int var, const char *val); #define RPM_MACHTABLE_BUILDOS 3 #define RPM_MACHTABLE_COUNT 4 /* number of arch/os tables */ +/** + */ int rpmReadConfigFiles(const char * file, const char * target); + +/** + */ int rpmReadRC(const char * file); + +/** + */ void rpmGetArchInfo( /*@out@*/ const char ** name, /*@out@*/ int * num); + +/** + */ void rpmGetOsInfo( /*@out@*/ const char ** name, /*@out@*/ int * num); + +/** + */ int rpmMachineScore(int type, const char * name); + +/** + */ int rpmShowRC(FILE *f); + +/** + */ void rpmSetTables(int archTable, int osTable); /* only used by build code */ + /* if either are NULL, they are set to the default value (munged uname()) pushed through a translation table (if appropriate) */ +/** + */ void rpmSetMachine(const char * arch, const char * os); + +/** + */ void rpmGetMachine( /*@out@*/ const char **arch, /*@out@*/ const char **os); + +/** + */ void rpmFreeRpmrc(void); /* ==================================================================== */ @@ -361,12 +434,18 @@ void rpmFreeRpmrc(void); typedef /*@abstract@*/ struct rpmdb_s * rpmdb; /** - * @param dbp address of rpm database + * @param root path to top of install tree + * @retval dbp address of rpm database + * @return */ int rpmdbOpen (const char * root, /*@out@*/ rpmdb * dbp, int mode, int perms); /* 0 on error */ /** + * Initialize database. + * @param root path to top of install tree + * @param perms database permissions + * @return */ int rpmdbInit(const char * root, int perms); /* nonzero on error */ @@ -386,7 +465,9 @@ int rpmdbClose ( /*@only@*/ rpmdb rpmdb); int rpmdbSync (rpmdb rpmdb); /** + * Open all database indices. * @param rpmdb rpm database + * @return 0 always */ int rpmdbOpenAll (rpmdb rpmdb); @@ -513,6 +594,7 @@ int rpmdbRemove(rpmdb db, unsigned int offset); int rpmdbAdd(rpmdb rpmdb, Header dbentry); /** + * @param root path to top of install tree */ int rpmdbRebuild(const char * root); @@ -526,22 +608,39 @@ typedef struct rpmRelocation_s { /** + * Install source package. + * @param root path to top of install tree + * @param fd file handle + * @retval specFile address of spec file name + * @param notify progress callback + * @param notifyData progress callback private data + * @retval cooke address of cookie pointer + * @return 0 on success, 1 on bad magic, 2 on error */ int rpmInstallSourcePackage(const char * root, FD_t fd, const char ** specFile, rpmCallbackFunction notify, void * notifyData, char ** cookie); /** + * Compare headers to determine which header is "newer". + * @param first 1st header + * @param second 2nd header + * @return result of comparison */ int rpmVersionCompare(Header first, Header second); /** + * @param root path to top of install tree + * @param h header */ int rpmVerifyFile(const char * root, Header h, int filenum, /*@out@*/ int * result, int omitMask); /** + * @param root path to top of install tree + * @param h header + * @param err file handle */ int rpmVerifyScript(const char * root, Header h, FD_t err); @@ -561,46 +660,66 @@ struct rpmDependencyConflict { enum { RPMDEP_SENSE_REQUIRES, RPMDEP_SENSE_CONFLICTS } sense; } ; -/* db may be NULL, but don't do things which require the database! */ /** - * @param db rpm database + * Create an empty transaction set. + * @param rpmdb rpm database (may be NULL if database is not accessed) + * @param rootdir path to top of install tree + * @return rpm transaction set */ -/*@only@*/ rpmTransactionSet rpmtransCreateSet( /*@only@*/ rpmdb db, +/*@only@*/ rpmTransactionSet rpmtransCreateSet( /*@only@*/ rpmdb rpmdb, const char * rootdir); -/* if fd is NULL, the callback specified in rpmtransCreateSet() is used to - open and close the file descriptor. If Header is NULL, the fd is always - used, otherwise fd is only needed (and only opened) for actual package - installation - - returns 0 on success, 1 on I/O error, 2 if the package needs capabilities - which are not implemented */ - /** + * Add package to be installed to unordered transaction set. + * + * If fd is NULL, the callback specified in rpmtransCreateSet() is used to + * open and close the file descriptor. If Header is NULL, the fd is always + * used, otherwise fd is only needed (and only opened) for actual package + * installation. + * + * @param rpmdep rpm transaction set + * @param h package header + * @param fd package file handle + * @param key package private data + * @param update is package being upgraded? + * @param relocs package file relocations + * @return 0 on success, 1 on I/O error, 2 needs capabilities */ int rpmtransAddPackage(rpmTransactionSet rpmdep, Header h, FD_t fd, /*@owned@*/ const void * key, int update, rpmRelocation * relocs); /** + * Add package to universe of possible packages to install in transaction set. + * @param rpmdep rpm transaction set + * @param h header + * @param key package private data */ void rpmtransAvailablePackage(rpmTransactionSet rpmdep, Header h, /*@owned@*/ const void * key); /** + * Add package to be removed to unordered transaction set. + * @param rpmdep rpm transaction set + * @param dboffset rpm database instance */ void rpmtransRemovePackage(rpmTransactionSet rpmdep, int dboffset); /** + * Destroy transaction set. + * @param rpmdep rpm transaction set */ void rpmtransFree( /*@only@*/ rpmTransactionSet rpmdep); /** + * @param ts rpm transaction set + * @param fd file handle */ void rpmtransSetScriptFd(rpmTransactionSet ts, FD_t fd); /* this checks for dependency satisfaction, but *not* ordering */ /** + * @param rpmdep rpm transaction set */ int rpmdepCheck(rpmTransactionSet rpmdep, /*@exposed@*/ /*@out@*/ struct rpmDependencyConflict ** conflicts, @@ -611,10 +730,14 @@ int rpmdepCheck(rpmTransactionSet rpmdep, satisfied a "best-try" ordering is returned. */ /** + * @param order rpm transaction set */ int rpmdepOrder(rpmTransactionSet order); /** + * Destroy dependency conflicts. + * @param conflicts dependency conflicts + * @param numConflicts no. of dependency conflicts */ void rpmdepFreeConflicts( /*@only@*/ struct rpmDependencyConflict * conflicts, int numConflicts); @@ -630,19 +753,33 @@ void rpmdepFreeConflicts( /*@only@*/ struct rpmDependencyConflict * conflicts, #define RPMTRANS_FLAG_MULTILIB (1 << 8) /** + * Compare two versioned dependency ranges, looking for overlap. + * @param AName 1st dependncy name string + * @param AEVR 1st dependency [epoch:]version[-release] string + * @param AFlags 1st dependency logical range qualifiers + * @param BName 2nd dependncy name string + * @param BEVR 2nd dependency [epoch:]version[-release] string + * @param BFlags 2nd dependency logical range qualifiers + * @return 1 if dependencies overlap, 0 otherwise */ int rpmRangesOverlap(const char *AName, const char *AEVR, int AFlags, - const char *BName, const char *BEVR, int BFlags); + const char *BName, const char *BEVR, int BFlags) /*@*/; /** + * Check dependency against internal rpmlib feature provides. + * @param keyName dependency name string + * @param keyEVR dependency [epoch:]version[-release] string + * @param keyFlags dependency logical range qualifiers + * @return 1 if dependency overlaps, 0 otherwise */ int rpmCheckRpmlibProvides(const char * keyName, const char * keyEVR, - int keyFlags); + int keyFlags) /*@*/; /** */ -void rpmShowRpmlibProvides(FILE * fp); +void rpmShowRpmlibProvides(FILE * fp) /*@modifies *fp @*/; +/** */ typedef enum rpmProblemType_e { RPMPROB_BADARCH, RPMPROB_BADOS, RPMPROB_PKG_INSTALLED, @@ -656,6 +793,7 @@ typedef enum rpmProblemType_e { RPMPROB_BADARCH, RPMPROB_BADPRETRANS } rpmProblemType; +/** */ typedef /*@abstract@*/ struct rpmProblem_s { Header h, altH; /*@dependent@*/ const void * key; @@ -665,22 +803,42 @@ typedef /*@abstract@*/ struct rpmProblem_s { unsigned long ulong1; } rpmProblem; +/** */ typedef /*@abstract@*/ struct rpmProblemSet_s { int numProblems; int numProblemsAlloced; rpmProblem * probs; } * rpmProblemSet; -void printDepFlags(FILE *fp, const char *version, int flags); +/** + */ +void printDepFlags(FILE *fp, const char *version, int flags) + /*@modifies *fp @*/; + +/** + */ void printDepProblems(FILE *fp, struct rpmDependencyConflict *conflicts, - int numConflicts); + int numConflicts) /*@modifies *fp @*/; + +/** + */ +/*@only@*/ const char * rpmProblemString(rpmProblem prob) /*@*/; + +/** + */ +void rpmProblemPrint(FILE *fp, rpmProblem prob) /*@modifies *fp @*/; -/*@only@*/ const char * rpmProblemString(rpmProblem prob); -void rpmProblemPrint(FILE *fp, rpmProblem prob); -void rpmProblemSetPrint(FILE *fp, rpmProblemSet probs); +/** + */ +void rpmProblemSetPrint(FILE *fp, rpmProblemSet probs) /*@modifies *fp @*/; +/** + */ void rpmProblemSetFree( /*@only@*/ rpmProblemSet probs); +/** + * @param ts rpm transaction set + */ int rpmRunTransactions(rpmTransactionSet ts, rpmCallbackFunction notify, void * notifyData, rpmProblemSet okProbs, /*@out@*/ rpmProblemSet * newProbs, int flags, @@ -785,13 +943,25 @@ struct oldrpmlead { /* for version 1 packages */ #define RPMSIG_NOKEY 3 /* Do not have the key to check this signature */ #define RPMSIG_NOTTRUSTED 4 /* We have the key but it is not trusted */ +/** + */ void rpmFreeSignature(Header h); +/** + */ int rpmVerifySignature(const char *file, int_32 sigTag, void *sig, int count, char *result); +/** + */ void freeFilesystems(void); + +/** + */ int rpmGetFilesystemList( /*@out@*/ const char *** listptr, /*@out@*/int * num); + +/** + */ int rpmGetFilesystemUsage(const char ** filelist, int_32 * fssizes, int numFiles, /*@out@*/ uint_32 ** usagesPtr, int flags); @@ -865,13 +1035,13 @@ int showMatches(QVA_t *qva, /*@only@*/ /*@null@*/ rpmdbMatchIterator mi, * @param tag tag value * @return name of tag */ -/*@observer@*/ const char *const tagName(int tag); +/*@observer@*/ const char *const tagName(int tag) /*@*/; /** * @param targstr name of tag * @return tag value */ -int tagValue(const char *tagstr); +int tagValue(const char *tagstr) /*@*/; extern int specedit; extern struct poptOption rpmQueryPoptTable[]; @@ -942,6 +1112,8 @@ int rpmVerify(QVA_t *qva, enum rpmQVSources source, const char *arg); /** + * @param rootdir path to top of install tree + * @param argv array of package file names (NULL terminated) */ int rpmInstall(const char * rootdir, const char ** argv, int installFlags, int interfaceFlags, int probFilter, rpmRelocation * relocations); @@ -952,6 +1124,8 @@ int rpmInstallSource(const char * prefix, const char * arg, const char ** specFi char ** cookie); /** + * @param rootdir path to top of install tree + * @param argv array of package file names (NULL terminated) */ int rpmErase(const char * rootdir, const char ** argv, int uninstallFlags, int interfaceFlags); @@ -964,12 +1138,14 @@ int rpmErase(const char * rootdir, const char ** argv, int uninstallFlags, #define CHECKSIG_GPG (1 << 2) /** + * @param argv array of package file names (NULL terminated) */ -int rpmCheckSig(int flags, const char **argv); +int rpmCheckSig(int flags, const char ** argv); /** + * @param argv array of package file names (NULL terminated) */ -int rpmReSign(int add, char *passPhrase, const char **argv); +int rpmReSign(int add, char *passPhrase, const char ** argv); #define ADD_SIGNATURE 1 #define NEW_SIGNATURE 0 diff --git a/lib/uninstall.c b/lib/uninstall.c index 5ee47d968..ef14682c3 100644 --- a/lib/uninstall.c +++ b/lib/uninstall.c @@ -12,6 +12,14 @@ static char * SCRIPT_PATH = "PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin"; #define SUFFIX_RPMSAVE ".rpmsave" +/** + * Remove (or rename) file according to file disposition. + * @param file file + * @param flags + * @param mode file type + * @param action file disposition + * @return + */ static int removeFile(const char * file, unsigned int flags, short mode, enum fileActions action) { @@ -74,8 +82,7 @@ static int removeFile(const char * file, unsigned int flags, short mode, return 0; } -/** */ -int removeBinaryPackage(const char * prefix, rpmdb db, unsigned int offset, +int removeBinaryPackage(const char * rootdir, rpmdb rpmdb, unsigned int offset, Header h, int flags, rpmCallbackFunction notify, void * notifyData, const void * pkgKey, @@ -97,23 +104,23 @@ int removeBinaryPackage(const char * prefix, rpmdb db, unsigned int offset, * When we run scripts, we pass an argument which is the number of * versions of this package that will be installed when we are finished. */ - if ((scriptArg = rpmdbCountPackages(db, name)) < 0) + if ((scriptArg = rpmdbCountPackages(rpmdb, name)) < 0) return 1; scriptArg -= 1; if (!(flags & RPMTRANS_FLAG_NOTRIGGERS)) { /* run triggers from this package which are keyed on installed packages */ - if (runImmedTriggers(prefix, db, RPMSENSE_TRIGGERUN, h, -1, scriptFd)) + if (runImmedTriggers(rootdir, rpmdb, RPMSENSE_TRIGGERUN, h, -1, scriptFd)) return 2; /* run triggers which are set off by the removal of this package */ - if (runTriggers(prefix, db, RPMSENSE_TRIGGERUN, h, -1, scriptFd)) + if (runTriggers(rootdir, rpmdb, RPMSENSE_TRIGGERUN, h, -1, scriptFd)) return 1; } if (!(flags & RPMTRANS_FLAG_TEST)) { - rc = runInstScript(prefix, h, RPMTAG_PREUN, RPMTAG_PREUNPROG, scriptArg, + rc = runInstScript(rootdir, h, RPMTAG_PREUN, RPMTAG_PREUNPROG, scriptArg, (flags & RPMTRANS_FLAG_NOSCRIPTS), scriptFd); if (rc) return 1; @@ -133,15 +140,15 @@ int removeBinaryPackage(const char * prefix, rpmdb db, unsigned int offset, int type; char * fileName; int fnmaxlen; - int prefixlen = (prefix && !(prefix[0] == '/' && prefix[1] == '\0')) - ? strlen(prefix) : 0; + int rdlen = (rootdir && !(rootdir[0] == '/' && rootdir[1] == '\0')) + ? strlen(rootdir) : 0; headerGetEntry(h, RPMTAG_DIRINDEXES, NULL, (void **) &dirIndexes, NULL); headerGetEntry(h, RPMTAG_DIRNAMES, NULL, (void **) &dirNames, NULL); - /* Get buffer for largest possible prefix + dirname + filename. */ + /* Get buffer for largest possible rootdir + dirname + filename. */ fnmaxlen = 0; for (i = 0; i < fileCount; i++) { size_t fnlen; @@ -150,14 +157,14 @@ int removeBinaryPackage(const char * prefix, rpmdb db, unsigned int offset, if (fnlen > fnmaxlen) fnmaxlen = fnlen; } - fnmaxlen += prefixlen + sizeof("/"); /* XXX one byte too many */ + fnmaxlen += rootdir + sizeof("/"); /* XXX one byte too many */ fileName = alloca(fnmaxlen); - if (prefixlen) { - strcpy(fileName, prefix); + if (rdlen) { + strcpy(fileName, rootdir); (void)rpmCleanPath(fileName); - prefixlen = strlen(fileName); + rdlen = strlen(fileName); } else *fileName = '\0'; @@ -177,7 +184,7 @@ int removeBinaryPackage(const char * prefix, rpmdb db, unsigned int offset, for (i = fileCount - 1; i >= 0; i--) { /* XXX this assumes that dirNames always starts/ends with '/' */ - (void)stpcpy(stpcpy(fileName+prefixlen, dirNames[dirIndexes[i]]), baseNames[i]); + (void)stpcpy(stpcpy(fileName+rdlen, dirNames[dirIndexes[i]]), baseNames[i]); rpmMessage(RPMMESS_DEBUG, _(" file: %s action: %s\n"), fileName, fileActionString(actions[i])); @@ -204,24 +211,36 @@ int removeBinaryPackage(const char * prefix, rpmdb db, unsigned int offset, if (!(flags & RPMTRANS_FLAG_TEST)) { rpmMessage(RPMMESS_DEBUG, _("running postuninstall script (if any)\n")); - rc = runInstScript(prefix, h, RPMTAG_POSTUN, RPMTAG_POSTUNPROG, + rc = runInstScript(rootdir, h, RPMTAG_POSTUN, RPMTAG_POSTUNPROG, scriptArg, (flags & RPMTRANS_FLAG_NOSCRIPTS), scriptFd); /* XXX postun failures are not cause for erasure failure. */ } if (!(flags & RPMTRANS_FLAG_NOTRIGGERS)) { /* Run postun triggers which are set off by this package's removal. */ - rc = runTriggers(prefix, db, RPMSENSE_TRIGGERPOSTUN, h, -1, scriptFd); + rc = runTriggers(rootdir, rpmdb, RPMSENSE_TRIGGERPOSTUN, h, + -1, scriptFd); if (rc) return 2; } if (!(flags & RPMTRANS_FLAG_TEST)) - rpmdbRemove(db, offset); + rpmdbRemove(rpmdb, offset); return 0; } +/** + * @param h header + * @param root path to top of install tree + * @param progArgc + * @param progArgv + * @param script + * @param arg1 + * @param arg2 + * @param errfd + * @return + */ static int runScript(Header h, const char * root, int progArgc, const char ** progArgv, const char * script, int arg1, int arg2, FD_t errfd) { @@ -401,7 +420,6 @@ static int runScript(Header h, const char * root, int progArgc, const char ** pr return 0; } -/** */ int runInstScript(const char * root, Header h, int scriptTag, int progTag, int arg, int norunScripts, FD_t err) { @@ -432,9 +450,22 @@ int runInstScript(const char * root, Header h, int scriptTag, int progTag, return rc; } -static int handleOneTrigger(const char * root, rpmdb db, int sense, Header sourceH, - Header triggeredH, int arg1correction, int arg2, - char * triggersAlreadyRun, FD_t scriptFd) +/** + * @param root path to top of install tree + * @param db rpm database + * @param sense + * @param sourceH + * @param triggeredH + * @param arg1correction + * @param arg2 + * @param triggersAlreadyRun + * @param scriptFd + * @return + */ +static int handleOneTrigger(const char * root, rpmdb db, int sense, + Header sourceH, Header triggeredH, + int arg1correction, int arg2, + char * triggersAlreadyRun, FD_t scriptFd) { const char ** triggerNames; const char ** triggerEVR; @@ -520,7 +551,6 @@ static int handleOneTrigger(const char * root, rpmdb db, int sense, Header sourc return rc; } -/** */ int runTriggers(const char * root, rpmdb db, int sense, Header h, int countCorrection, FD_t scriptFd) { @@ -549,7 +579,6 @@ int runTriggers(const char * root, rpmdb db, int sense, Header h, return rc; } -/** */ int runImmedTriggers(const char * root, rpmdb db, int sense, Header h, int countCorrection, FD_t scriptFd) { |