rpm
4.5
|
00001 #ifndef H_RPMTS 00002 #define H_RPMTS 00003 00009 #include "rpmps.h" 00010 #include "rpmsw.h" 00011 #include "rpmsx.h" 00012 00013 /*@-exportlocal@*/ 00014 /*@unchecked@*/ 00015 extern int _rpmts_debug; 00016 /*@unchecked@*/ 00017 extern int _rpmts_stats; 00018 /*@unchecked@*/ 00019 extern int _fps_debug; 00020 /*@=exportlocal@*/ 00021 00025 typedef enum rpmVSFlags_e { 00026 RPMVSF_DEFAULT = 0, 00027 RPMVSF_NOHDRCHK = (1 << 0), 00028 RPMVSF_NEEDPAYLOAD = (1 << 1), 00029 /* bit(s) 2-7 unused */ 00030 RPMVSF_NOSHA1HEADER = (1 << 8), 00031 RPMVSF_NOMD5HEADER = (1 << 9), /* unimplemented */ 00032 RPMVSF_NODSAHEADER = (1 << 10), 00033 RPMVSF_NORSAHEADER = (1 << 11), 00034 /* bit(s) 12-15 unused */ 00035 RPMVSF_NOSHA1 = (1 << 16), /* unimplemented */ 00036 RPMVSF_NOMD5 = (1 << 17), 00037 RPMVSF_NODSA = (1 << 18), 00038 RPMVSF_NORSA = (1 << 19) 00039 /* bit(s) 20-31 unused */ 00040 } rpmVSFlags; 00041 00045 typedef enum rpmTSType_e { 00046 RPMTRANS_TYPE_NORMAL = 0, 00047 RPMTRANS_TYPE_ROLLBACK = (1 << 0), 00048 RPMTRANS_TYPE_AUTOROLLBACK = (1 << 1) 00049 } rpmTSType; 00050 00051 #define _RPMVSF_NODIGESTS \ 00052 ( RPMVSF_NOSHA1HEADER | \ 00053 RPMVSF_NOMD5HEADER | \ 00054 RPMVSF_NOSHA1 | \ 00055 RPMVSF_NOMD5 ) 00056 00057 #define _RPMVSF_NOSIGNATURES \ 00058 ( RPMVSF_NODSAHEADER | \ 00059 RPMVSF_NORSAHEADER | \ 00060 RPMVSF_NODSA | \ 00061 RPMVSF_NORSA ) 00062 00063 #define _RPMVSF_NOHEADER \ 00064 ( RPMVSF_NOSHA1HEADER | \ 00065 RPMVSF_NOMD5HEADER | \ 00066 RPMVSF_NODSAHEADER | \ 00067 RPMVSF_NORSAHEADER ) 00068 00069 #define _RPMVSF_NOPAYLOAD \ 00070 ( RPMVSF_NOSHA1 | \ 00071 RPMVSF_NOMD5 | \ 00072 RPMVSF_NODSA | \ 00073 RPMVSF_NORSA ) 00074 00078 typedef enum rpmtsOpX_e { 00079 RPMTS_OP_TOTAL = 0, 00080 RPMTS_OP_CHECK = 1, 00081 RPMTS_OP_ORDER = 2, 00082 RPMTS_OP_FINGERPRINT = 3, 00083 RPMTS_OP_REPACKAGE = 4, 00084 RPMTS_OP_INSTALL = 5, 00085 RPMTS_OP_ERASE = 6, 00086 RPMTS_OP_SCRIPTLETS = 7, 00087 RPMTS_OP_COMPRESS = 8, 00088 RPMTS_OP_UNCOMPRESS = 9, 00089 RPMTS_OP_DIGEST = 10, 00090 RPMTS_OP_SIGNATURE = 11, 00091 RPMTS_OP_DBADD = 12, 00092 RPMTS_OP_DBREMOVE = 13, 00093 RPMTS_OP_DBGET = 14, 00094 RPMTS_OP_DBPUT = 15, 00095 RPMTS_OP_DBDEL = 16, 00096 RPMTS_OP_READHDR = 17, 00097 RPMTS_OP_MAX = 18 00098 } rpmtsOpX; 00099 00100 #if defined(_RPMTS_INTERNAL) 00101 00102 #include "rpmhash.h" /* XXX hashTable */ 00103 #include "rpmal.h" /* XXX availablePackage/relocateFileList ,*/ 00104 00105 /*@unchecked@*/ 00106 /*@-exportlocal@*/ 00107 extern int _cacheDependsRC; 00108 /*@=exportlocal@*/ 00109 00112 typedef /*@abstract@*/ struct diskspaceInfo_s * rpmDiskSpaceInfo; 00113 00117 struct diskspaceInfo_s { 00118 unsigned long f_bsize; 00119 unsigned long f_frsize; 00120 unsigned long long f_blocks; 00121 unsigned long long f_bfree; 00122 signed long long f_bavail; 00123 unsigned long long f_files; 00124 unsigned long long f_ffree; 00125 signed long long f_favail; 00126 unsigned long f_fsid; 00127 unsigned long f_flag; 00128 unsigned long f_namemax; 00130 signed long long bneeded; 00131 signed long long ineeded; 00132 dev_t dev; 00133 }; 00134 00138 #define adj_fs_blocks(_nb) (((_nb) * 21) / 20) 00139 00140 #define BLOCK_ROUND(size, block) (((size) + (block) - 1) / (block)) 00141 00144 typedef enum tsStage_e { 00145 TSM_UNKNOWN = 0, 00146 TSM_INSTALL = 7, 00147 TSM_ERASE = 8, 00148 } tsmStage; 00149 00153 struct rpmts_s { 00154 rpmdepFlags depFlags; 00155 rpmtransFlags transFlags; 00156 tsmStage goal; 00157 rpmTSType type; 00159 /*@refcounted@*/ /*@null@*/ 00160 rpmdb sdb; 00161 int sdbmode; 00162 /*@null@*/ 00163 int (*solve) (rpmts ts, rpmds key, const void * data) 00164 /*@modifies ts @*/; 00165 /*@relnull@*/ 00166 const void * solveData; 00167 int nsuggests; 00168 /*@only@*/ /*@null@*/ 00169 const void ** suggests; 00171 /*@observer@*/ /*@null@*/ 00172 rpmCallbackFunction notify; 00173 /*@observer@*/ /*@null@*/ 00174 rpmCallbackData notifyData; 00176 /*@null@*/ 00177 rpmPRCO PRCO; 00179 /*@refcounted@*/ /*@null@*/ 00180 rpmps probs; 00181 rpmprobFilterFlags ignoreSet; 00184 int filesystemCount; 00185 /*@dependent@*/ /*@null@*/ 00186 const char ** filesystems; 00187 /*@only@*/ /*@null@*/ 00188 rpmDiskSpaceInfo dsi; 00190 /*@refcounted@*/ /*@null@*/ 00191 rpmdb rdb; 00192 int dbmode; 00193 /*@only@*/ 00194 hashTable ht; 00196 /*@only@*/ /*@null@*/ 00197 int * removedPackages; 00198 int numRemovedPackages; 00199 int allocedRemovedPackages; 00201 /*@only@*/ 00202 rpmal addedPackages; 00203 int numAddedPackages; 00205 /*@only@*/ 00206 rpmal erasedPackages; 00207 int numErasedPackages; 00209 #ifndef DYING 00210 /*@only@*/ 00211 rpmal availablePackages; 00212 int numAvailablePackages; 00213 #endif 00214 00215 /*@refcounted@*/ /*@null@*/ 00216 rpmsx sx; 00218 /*@null@*/ 00219 rpmte relocateElement; 00221 /*@owned@*/ /*@relnull@*/ 00222 rpmte * order; 00223 int orderCount; 00224 int orderAlloced; 00225 int unorderedSuccessors; 00226 int ntrees; 00227 int maxDepth; 00229 /*@dependent@*/ 00230 rpmte teInstall; 00231 /*@dependent@*/ 00232 rpmte teErase; 00234 int selinuxEnabled; 00235 int chrootDone; 00236 /*@only@*/ /*@null@*/ 00237 const char * rootDir; 00238 /*@only@*/ /*@null@*/ 00239 const char * currDir; 00240 /*@null@*/ 00241 FD_t scriptFd; 00242 int delta; 00243 int_32 tid; 00245 uint_32 color; 00246 uint_32 prefcolor; 00248 rpmVSFlags vsflags; 00250 /*@observer@*/ /*@dependent@*/ /*@null@*/ 00251 const char * fn; 00252 int_32 sigtag; 00253 int_32 sigtype; 00254 /*@null@*/ 00255 const void * sig; 00256 int_32 siglen; 00258 /*@only@*/ /*@null@*/ 00259 const unsigned char * pkpkt; 00260 size_t pkpktlen; 00261 unsigned char pksignid[8]; 00263 struct rpmop_s ops[RPMTS_OP_MAX]; 00264 00265 /*@null@*/ 00266 pgpDig dig; 00268 /*@null@*/ 00269 Spec spec; 00271 #ifdef DYING 00272 /*@kept@*/ /*@null@*/ 00273 rpmtsScore score; 00274 #endif 00275 00276 uint_32 arbgoal; 00278 /*@refs@*/ 00279 int nrefs; 00280 }; 00281 #endif /* _RPMTS_INTERNAL */ 00282 00283 #ifdef __cplusplus 00284 extern "C" { 00285 #endif 00286 00292 int rpmtsCheck(rpmts ts) 00293 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 00294 /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/; 00295 int rpmrbCheck(rpmts ts) 00296 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 00297 /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/; 00298 00315 int rpmtsOrder(rpmts ts) 00316 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 00317 /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/; 00318 int rpmrbOrder(rpmts ts) 00319 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 00320 /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/; 00321 00339 int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet) 00340 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 00341 /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/; 00342 int rpmrbRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet) 00343 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 00344 /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/; 00345 00354 rpmRC rpmtsRollback(rpmts rbts, rpmprobFilterFlags ignoreSet, 00355 int running, rpmte rbte) 00356 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 00357 /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/; 00358 00365 /*@unused@*/ /*@null@*/ 00366 rpmts rpmtsUnlink (/*@killref@*/ /*@only@*/ rpmts ts, 00367 const char * msg) 00368 /*@modifies ts @*/; 00369 00371 /*@-exportlocal@*/ 00372 /*@null@*/ 00373 rpmts XrpmtsUnlink (/*@killref@*/ /*@only@*/ rpmts ts, 00374 const char * msg, const char * fn, unsigned ln) 00375 /*@modifies ts @*/; 00376 /*@=exportlocal@*/ 00377 #define rpmtsUnlink(_ts, _msg) XrpmtsUnlink(_ts, _msg, __FILE__, __LINE__) 00378 00385 /*@unused@*/ 00386 rpmts rpmtsLink (rpmts ts, const char * msg) 00387 /*@modifies ts @*/; 00388 00390 rpmts XrpmtsLink (rpmts ts, 00391 const char * msg, const char * fn, unsigned ln) 00392 /*@modifies ts @*/; 00393 #define rpmtsLink(_ts, _msg) XrpmtsLink(_ts, _msg, __FILE__, __LINE__) 00394 00400 int rpmtsCloseDB(rpmts ts) 00401 /*@globals fileSystem @*/ 00402 /*@modifies ts, fileSystem @*/; 00403 00410 int rpmtsOpenDB(rpmts ts, int dbmode) 00411 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 00412 /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/; 00413 00421 int rpmtsInitDB(rpmts ts, int dbmode) 00422 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 00423 /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/; 00424 00430 int rpmtsRebuildDB(rpmts ts) 00431 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 00432 /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/; 00433 00439 int rpmtsVerifyDB(rpmts ts) 00440 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 00441 /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/; 00442 00451 /*@only@*/ /*@null@*/ 00452 rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmTag rpmtag, 00453 /*@null@*/ const void * keyp, size_t keylen) 00454 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 00455 /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/; 00456 00462 /*@-exportlocal@*/ 00463 rpmRC rpmtsFindPubkey(rpmts ts) 00464 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 00465 /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState */; 00466 /*@=exportlocal@*/ 00467 00473 /*@-exportlocal@*/ 00474 int rpmtsCloseSDB(rpmts ts) 00475 /*@globals fileSystem @*/ 00476 /*@modifies ts, fileSystem @*/; 00477 /*@=exportlocal@*/ 00478 00485 /*@-exportlocal@*/ 00486 int rpmtsOpenSDB(rpmts ts, int dbmode) 00487 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 00488 /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/; 00489 /*@=exportlocal@*/ 00490 00498 /*@-exportlocal@*/ 00499 int rpmtsSolve(rpmts ts, rpmds ds, const void * data) 00500 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 00501 /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/; 00502 /*@=exportlocal@*/ 00503 00511 /*@unused@*/ 00512 int rpmtsAvailable(rpmts ts, const rpmds ds) 00513 /*@globals fileSystem @*/ 00514 /*@modifies ts, fileSystem @*/; 00515 00523 int rpmtsSetSolveCallback(rpmts ts, 00524 int (*solve) (rpmts ts, rpmds ds, const void * data), 00525 const void * solveData) 00526 /*@modifies ts @*/; 00527 00533 rpmTSType rpmtsType(rpmts ts) 00534 /*@*/; 00535 00546 void rpmtsSetType(rpmts ts, rpmTSType type) 00547 /*@modifies ts @*/; 00548 00554 uint_32 rpmtsARBGoal(rpmts ts) 00555 /*@*/; 00556 00562 void rpmtsSetARBGoal(rpmts ts, uint_32 goal) 00563 /*@modifies ts @*/; 00564 00570 /*@null@*/ 00571 rpmps rpmtsProblems(rpmts ts) 00572 /*@modifies ts @*/; 00573 00578 void rpmtsCleanDig(rpmts ts) 00579 /*@modifies ts @*/; 00580 00585 void rpmtsClean(rpmts ts) 00586 /*@globals fileSystem, internalState @*/ 00587 /*@modifies ts, fileSystem , internalState@*/; 00588 00593 void rpmtsEmpty(rpmts ts) 00594 /*@globals fileSystem, internalState @*/ 00595 /*@modifies ts, fileSystem, internalState @*/; 00596 00602 /*@null@*/ 00603 rpmts rpmtsFree(/*@killref@*/ /*@only@*//*@null@*/ rpmts ts) 00604 /*@globals fileSystem, internalState @*/ 00605 /*@modifies ts, fileSystem, internalState @*/; 00606 00612 rpmVSFlags rpmtsVSFlags(rpmts ts) 00613 /*@*/; 00614 00621 rpmVSFlags rpmtsSetVSFlags(rpmts ts, rpmVSFlags vsflags) 00622 /*@modifies ts @*/; 00623 00630 int rpmtsUnorderedSuccessors(rpmts ts, int first) 00631 /*@modifies ts @*/; 00632 00638 /*@observer@*/ /*@null@*/ 00639 extern const char * rpmtsRootDir(rpmts ts) 00640 /*@*/; 00641 00647 void rpmtsSetRootDir(rpmts ts, /*@null@*/ const char * rootDir) 00648 /*@modifies ts @*/; 00649 00655 /*@observer@*/ /*@null@*/ 00656 extern const char * rpmtsCurrDir(rpmts ts) 00657 /*@*/; 00658 00664 void rpmtsSetCurrDir(rpmts ts, /*@null@*/ const char * currDir) 00665 /*@modifies ts @*/; 00666 00672 /*@null@*/ 00673 FD_t rpmtsScriptFd(rpmts ts) 00674 /*@*/; 00675 00681 void rpmtsSetScriptFd(rpmts ts, /*@null@*/ FD_t scriptFd) 00682 /*@modifies ts, scriptFd @*/; 00683 00689 int rpmtsSELinuxEnabled(rpmts ts) 00690 /*@*/; 00691 00697 int rpmtsChrootDone(rpmts ts) 00698 /*@*/; 00699 00706 int rpmtsSetChrootDone(rpmts ts, int chrootDone) 00707 /*@modifies ts @*/; 00708 00714 /*@null@*/ 00715 rpmsx rpmtsREContext(const rpmts ts) 00716 /*@modifies ts @*/; 00717 00724 int rpmtsSetREContext(rpmts ts, rpmsx sx) 00725 /*@modifies ts, sx @*/; 00726 00732 int_32 rpmtsGetTid(rpmts ts) 00733 /*@*/; 00734 00741 int_32 rpmtsSetTid(rpmts ts, int_32 tid) 00742 /*@modifies ts @*/; 00743 00749 int_32 rpmtsSigtag(const rpmts ts) 00750 /*@*/; 00751 00757 int_32 rpmtsSigtype(const rpmts ts) 00758 /*@*/; 00759 00765 /*@observer@*/ /*@null@*/ 00766 extern const void * rpmtsSig(const rpmts ts) 00767 /*@*/; 00768 00774 int_32 rpmtsSiglen(const rpmts ts) 00775 /*@*/; 00776 00786 int rpmtsSetSig(rpmts ts, 00787 int_32 sigtag, int_32 sigtype, 00788 /*@kept@*/ /*@null@*/ const void * sig, int_32 siglen) 00789 /*@modifies ts @*/; 00790 00796 /*@exposed@*/ /*@null@*/ 00797 pgpDig rpmtsDig(rpmts ts) 00798 /*@*/; 00799 00805 /*@exposed@*/ /*@null@*/ 00806 pgpDigParams rpmtsSignature(const rpmts ts) 00807 /*@*/; 00808 00814 /*@-exportlocal@*/ 00815 /*@exposed@*/ /*@null@*/ 00816 pgpDigParams rpmtsPubkey(const rpmts ts) 00817 /*@*/; 00818 /*@=exportlocal@*/ 00819 00825 /*@null@*/ 00826 rpmdb rpmtsGetRdb(rpmts ts) 00827 /*@*/; 00828 00834 /*@null@*/ 00835 rpmPRCO rpmtsPRCO(rpmts ts) 00836 /*@*/; 00837 00843 int rpmtsInitDSI(const rpmts ts) 00844 /*@globals fileSystem, internalState @*/ 00845 /*@modifies ts, fileSystem, internalState @*/; 00846 00856 void rpmtsUpdateDSI(const rpmts ts, dev_t dev, 00857 uint_32 fileSize, uint_32 prevSize, uint_32 fixupSize, 00858 fileAction action) 00859 /*@modifies ts @*/; 00860 00866 void rpmtsCheckDSIProblems(const rpmts ts, const rpmte te) 00867 /*@modifies ts @*/; 00868 00880 /*@null@*/ 00881 void * rpmtsNotify(rpmts ts, rpmte te, 00882 rpmCallbackType what, unsigned long long amount, unsigned long long total) 00883 /*@*/; 00884 00890 int rpmtsNElements(rpmts ts) 00891 /*@*/; 00892 00899 /*@null@*/ /*@dependent@*/ 00900 rpmte rpmtsElement(rpmts ts, int ix) 00901 /*@*/; 00902 00908 rpmprobFilterFlags rpmtsFilterFlags(rpmts ts) 00909 /*@*/; 00910 00916 rpmtransFlags rpmtsFlags(rpmts ts) 00917 /*@*/; 00918 00925 rpmtransFlags rpmtsSetFlags(rpmts ts, rpmtransFlags transFlags) 00926 /*@modifies ts @*/; 00927 00933 rpmdepFlags rpmtsDFlags(rpmts ts) 00934 /*@*/; 00935 00942 rpmdepFlags rpmtsSetDFlags(rpmts ts, rpmdepFlags depFlags) 00943 /*@modifies ts @*/; 00944 00950 /*@null@*/ 00951 Spec rpmtsSpec(rpmts ts) 00952 /*@*/; 00953 00960 /*@null@*/ 00961 Spec rpmtsSetSpec(rpmts ts, /*@null@*/ Spec spec) 00962 /*@modifies ts @*/; 00963 00969 /*@null@*/ 00970 rpmte rpmtsRelocateElement(rpmts ts) 00971 /*@*/; 00972 00979 /*@null@*/ 00980 rpmte rpmtsSetRelocateElement(rpmts ts, /*@null@*/ rpmte relocateElement) 00981 /*@modifies ts @*/; 00982 00988 uint_32 rpmtsColor(rpmts ts) 00989 /*@*/; 00990 00996 uint_32 rpmtsPrefColor(rpmts ts) 00997 /*@*/; 00998 01005 uint_32 rpmtsSetColor(rpmts ts, uint_32 color) 01006 /*@modifies ts @*/; 01007 01014 /*@relnull@*/ 01015 rpmop rpmtsOp(rpmts ts, rpmtsOpX opx) 01016 /*@*/; 01017 01029 int rpmtsSetNotifyCallback(rpmts ts, 01030 /*@observer@*/ rpmCallbackFunction notify, 01031 /*@observer@*/ rpmCallbackData notifyData) 01032 /*@modifies ts @*/; 01033 01038 /*@newref@*/ 01039 rpmts rpmtsCreate(void) 01040 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01041 /*@modifies rpmGlobalMacroContext, fileSystem, internalState @*/; 01042 01056 int rpmtsAddInstallElement(rpmts ts, Header h, 01057 /*@exposed@*/ /*@null@*/ const fnpyKey key, int upgrade, 01058 /*@null@*/ rpmRelocation relocs) 01059 /*@globals rpmcliPackagesTotal, rpmGlobalMacroContext, h_errno, 01060 fileSystem, internalState @*/ 01061 /*@modifies ts, h, rpmcliPackagesTotal, rpmGlobalMacroContext, 01062 fileSystem, internalState @*/; 01063 01071 int rpmtsAddEraseElement(rpmts ts, Header h, int dboffset) 01072 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01073 /*@modifies ts, h, rpmGlobalMacroContext, fileSystem, internalState @*/; 01074 01075 #if !defined(SWIG) 01076 #if defined(_RPMTS_INTERNAL) 01077 01083 /*@unused@*/ static inline 01084 int rpmtsPrint(/*@null@*/ rpmts ts, /*@null@*/ FILE * fp) 01085 /*@globals fileSystem @*/ 01086 /*@modifies ts, *fp, fileSystem @*/ 01087 { 01088 int tid = rpmtsGetTid(ts); 01089 time_t ttid = tid; 01090 rpmtsi tsi; 01091 rpmte te; 01092 01093 if (fp == NULL) 01094 fp = stderr; 01095 01096 fprintf(fp, _("=== Transaction at %-24.24s (0x%08x):\n"), ctime(&ttid),tid); 01097 tsi = rpmtsiInit(ts); 01098 while ((te = rpmtsiNext(tsi, 0)) != NULL) 01099 fprintf(fp, "t%s> %s\n", (rpmteType(te) == TR_ADDED ? "I" : "E"), 01100 rpmteNEVRA(te)); 01101 tsi = rpmtsiFree(tsi); 01102 return 0; 01103 } 01104 #endif /* defined(_RPMTS_INTERNAL) */ 01105 #endif /* !defined(SWIG) */ 01106 01107 #ifdef __cplusplus 01108 } 01109 #endif 01110 01111 01112 #endif /* H_RPMTS */