lib/rpmts.h

Go to the documentation of this file.
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),    /* unimplemented */
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) 16-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_MAX                = 17
00097 } rpmtsOpX;
00098 
00099 #if defined(_RPMTS_INTERNAL)
00100 
00101 #include "rpmhash.h"    /* XXX hashTable */
00102 #include "rpmal.h"      /* XXX availablePackage/relocateFileList ,*/
00103 
00104 /**********************
00105  * Transaction Scores *
00106  **********************
00107  *
00108  * In order to allow instance counts to be adjusted properly when an
00109  * autorollback transaction is ran, we keep a list that is indexed
00110  * by rpm name of whether the rpm has been installed or erased.  This listed
00111  * is only updated:
00112  *
00113  *      iif autorollbacks are enabled.
00114  *      iif this is not a rollback or autorollback transaction.
00115  *
00116  * When creating an autorollback transaction, its rpmts points to the same
00117  * rpmtsScore object as the running transaction.  So when the autorollback
00118  * transaction runs it can see where each package was in the running transaction
00119  * at the point the running transaction failed, and thus on a per package
00120  * basis make adjustments to the instance counts.
00121  *
00122  * XXX: Jeff, I am not convinced that this does not need to be in its own file
00123  *      (i.e. rpmtsScore.{h,c}), but I first wanted to get it working.
00124  */
00125 struct rpmtsScoreEntry_s {
00126     char *         N;                   
00127     rpmElementType te_types;            
00128     int            installed;           
00129     int            erased;              
00130 };
00131 
00132 typedef /*@abstract@*/ struct rpmtsScoreEntry_s * rpmtsScoreEntry;
00133 
00134 struct rpmtsScore_s {
00135         int entries;                    
00136         rpmtsScoreEntry * scores;       
00137         int nrefs;                      
00138 };
00139 
00140 typedef /*@abstract@*/ struct rpmtsScore_s * rpmtsScore;
00141 
00142 
00150 rpmRC rpmtsScoreInit(rpmts runningTS, rpmts rollbackTS)
00151         /*@globals fileSystem @*/
00152         /*@modifies runningTS, rollbackTS, fileSystem @*/;
00153 
00159 /*@-exportlocal@*/
00160 /*@null@*/
00161 rpmtsScore rpmtsScoreFree(/*@only@*/ /*@null@*/ rpmtsScore score)
00162         /*@modifies score @*/;
00163 /*@=exportlocal@*/
00164 
00170 /*@exposed@*/ /*@null@*/
00171 rpmtsScore rpmtsGetScore(rpmts ts)
00172         /*@*/;
00173 
00179 /*@null@*/
00180 rpmtsScoreEntry rpmtsScoreGetEntry(rpmtsScore score, const char *N)
00181         /*@*/;
00182 
00188 /**************************
00189  * END Transaction Scores *
00190  **************************/
00191 
00192 /*@unchecked@*/
00193 /*@-exportlocal@*/
00194 extern int _cacheDependsRC;
00195 /*@=exportlocal@*/
00196 
00199 typedef /*@abstract@*/ struct diskspaceInfo_s * rpmDiskSpaceInfo;
00200 
00203 struct diskspaceInfo_s {
00204     dev_t dev;                  
00205     signed long bneeded;        
00206     signed long ineeded;        
00207     int bsize;                  
00208     signed long long bavail;    
00209     signed long long iavail;    
00210 };
00211 
00215 #define adj_fs_blocks(_nb)      (((_nb) * 21) / 20)
00216 
00217 /* argon thought a shift optimization here was a waste of time...  he's
00218    probably right :-( */
00219 #define BLOCK_ROUND(size, block) (((size) + (block) - 1) / (block))
00220 
00223 typedef enum tsStage_e {
00224     TSM_UNKNOWN         =  0,
00225     TSM_INSTALL         =  7,
00226     TSM_ERASE           =  8,
00227 } tsmStage;
00228 
00232 struct rpmts_s {
00233     rpmtransFlags transFlags;   
00234     tsmStage goal;              
00235     rpmtsType type;             
00237 /*@refcounted@*/ /*@null@*/
00238     rpmdb sdb;                  
00239     int sdbmode;                
00240 /*@null@*/
00241     int (*solve) (rpmts ts, rpmds key, const void * data)
00242         /*@modifies ts @*/;     
00243 /*@relnull@*/
00244     const void * solveData;     
00245     int nsuggests;              
00246 /*@only@*/ /*@null@*/
00247     const void ** suggests;     
00249 /*@observer@*/ /*@null@*/
00250     rpmCallbackFunction notify; 
00251 /*@observer@*/ /*@null@*/
00252     rpmCallbackData notifyData; 
00254 /*@refcounted@*/ /*@null@*/
00255     rpmps probs;                
00256     rpmprobFilterFlags ignoreSet;
00259     int filesystemCount;        
00260 /*@dependent@*/ /*@null@*/
00261     const char ** filesystems;  
00262 /*@only@*/ /*@null@*/
00263     rpmDiskSpaceInfo dsi;       
00265 /*@refcounted@*/ /*@null@*/
00266     rpmdb rdb;                  
00267     int dbmode;                 
00268 /*@only@*/
00269     hashTable ht;               
00271 /*@only@*/ /*@null@*/
00272     int * removedPackages;      
00273     int numRemovedPackages;     
00274     int allocedRemovedPackages; 
00276 /*@only@*/
00277     rpmal addedPackages;        
00278     int numAddedPackages;       
00280 #ifndef DYING
00281 /*@only@*/
00282     rpmal availablePackages;    
00283     int numAvailablePackages;   
00284 #endif
00285 
00286 /*@refcounted@*/ /*@null@*/
00287     rpmsx sx;                   
00289 /*@null@*/
00290     rpmte relocateElement;      
00292 /*@owned@*/ /*@relnull@*/
00293     rpmte * order;              
00294     int orderCount;             
00295     int orderAlloced;           
00296     int unorderedSuccessors;    
00297     int ntrees;                 
00298     int maxDepth;               
00300     int selinuxEnabled;         
00301     int chrootDone;             
00302 /*@only@*/ /*@null@*/
00303     const char * rootDir;       
00304 /*@only@*/ /*@null@*/
00305     const char * currDir;       
00306 /*@null@*/
00307     FD_t scriptFd;              
00308     int delta;                  
00309     int_32 tid;                 
00311     uint_32 color;              
00312     uint_32 prefcolor;          
00314     rpmVSFlags vsflags;         
00316 /*@observer@*/ /*@dependent@*/ /*@null@*/
00317     const char * fn;            
00318     int_32  sigtag;             
00319     int_32  sigtype;            
00320 /*@null@*/
00321     const void * sig;           
00322     int_32 siglen;              
00324 /*@only@*/ /*@null@*/
00325     const unsigned char * pkpkt;
00326     size_t pkpktlen;            
00327     unsigned char pksignid[8];  
00329     struct rpmop_s ops[RPMTS_OP_MAX];
00330 
00331 /*@null@*/
00332     pgpDig dig;                 
00334 /*@null@*/
00335     Spec spec;                  
00337 /*@kept@*/ /*@null@*/
00338     rpmtsScore score;           
00340 /*@refs@*/
00341     int nrefs;                  
00342 };
00343 #endif  /* _RPMTS_INTERNAL */
00344 
00345 #ifdef __cplusplus
00346 extern "C" {
00347 #endif
00348 
00359 int rpmtsCheck(rpmts ts)
00360         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00361         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00362 
00379 int rpmtsOrder(rpmts ts)
00380         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00381         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00382 
00400 int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
00401         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00402         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00403 
00410 /*@unused@*/ /*@null@*/
00411 rpmts rpmtsUnlink (/*@killref@*/ /*@only@*/ rpmts ts,
00412                 const char * msg)
00413         /*@modifies ts @*/;
00414 
00416 /*@-exportlocal@*/
00417 /*@null@*/
00418 rpmts XrpmtsUnlink (/*@killref@*/ /*@only@*/ rpmts ts,
00419                 const char * msg, const char * fn, unsigned ln)
00420         /*@modifies ts @*/;
00421 /*@=exportlocal@*/
00422 #define rpmtsUnlink(_ts, _msg)  XrpmtsUnlink(_ts, _msg, __FILE__, __LINE__)
00423 
00430 /*@unused@*/
00431 rpmts rpmtsLink (rpmts ts, const char * msg)
00432         /*@modifies ts @*/;
00433 
00435 rpmts XrpmtsLink (rpmts ts,
00436                 const char * msg, const char * fn, unsigned ln)
00437         /*@modifies ts @*/;
00438 #define rpmtsLink(_ts, _msg)    XrpmtsLink(_ts, _msg, __FILE__, __LINE__)
00439 
00445 int rpmtsCloseDB(rpmts ts)
00446         /*@globals fileSystem @*/
00447         /*@modifies ts, fileSystem @*/;
00448 
00455 int rpmtsOpenDB(rpmts ts, int dbmode)
00456         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00457         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00458 
00466 int rpmtsInitDB(rpmts ts, int dbmode)
00467         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00468         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00469 
00475 int rpmtsRebuildDB(rpmts ts)
00476         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00477         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00478 
00484 int rpmtsVerifyDB(rpmts ts)
00485         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00486         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00487 
00496 /*@only@*/ /*@null@*/
00497 rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmTag rpmtag,
00498                         /*@null@*/ const void * keyp, size_t keylen)
00499         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00500         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00501 
00507 /*@-exportlocal@*/
00508 rpmRC rpmtsFindPubkey(rpmts ts)
00509         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00510         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState */;
00511 /*@=exportlocal@*/
00512 
00518 /*@-exportlocal@*/
00519 int rpmtsCloseSDB(rpmts ts)
00520         /*@globals fileSystem @*/
00521         /*@modifies ts, fileSystem @*/;
00522 /*@=exportlocal@*/
00523 
00530 /*@-exportlocal@*/
00531 int rpmtsOpenSDB(rpmts ts, int dbmode)
00532         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00533         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00534 /*@=exportlocal@*/
00535 
00543 /*@-exportlocal@*/
00544 int rpmtsSolve(rpmts ts, rpmds ds, const void * data)
00545         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00546         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00547 /*@=exportlocal@*/
00548 
00556 /*@unused@*/
00557 int rpmtsAvailable(rpmts ts, const rpmds ds)
00558         /*@globals fileSystem @*/
00559         /*@modifies ts, fileSystem @*/;
00560 
00568 int rpmtsSetSolveCallback(rpmts ts,
00569                 int (*solve) (rpmts ts, rpmds ds, const void * data),
00570                 const void * solveData)
00571         /*@modifies ts @*/;
00572 
00578 rpmtsType rpmtsGetType(rpmts ts)
00579         /*@*/;
00580 
00592 void rpmtsSetType(rpmts ts, rpmtsType type)
00593         /*@modifies ts @*/;
00594 
00600 /*@null@*/
00601 rpmps rpmtsProblems(rpmts ts)
00602         /*@modifies ts @*/;
00603 
00608 void rpmtsCleanDig(rpmts ts)
00609         /*@modifies ts @*/;
00610 
00615 void rpmtsClean(rpmts ts)
00616         /*@globals fileSystem, internalState @*/
00617         /*@modifies ts, fileSystem , internalState@*/;
00618 
00623 void rpmtsEmpty(rpmts ts)
00624         /*@globals fileSystem, internalState @*/
00625         /*@modifies ts, fileSystem, internalState @*/;
00626 
00632 /*@null@*/
00633 rpmts rpmtsFree(/*@killref@*/ /*@only@*//*@null@*/ rpmts ts)
00634         /*@globals fileSystem, internalState @*/
00635         /*@modifies ts, fileSystem, internalState @*/;
00636 
00642 rpmVSFlags rpmtsVSFlags(rpmts ts)
00643         /*@*/;
00644 
00651 rpmVSFlags rpmtsSetVSFlags(rpmts ts, rpmVSFlags vsflags)
00652         /*@modifies ts @*/;
00653 
00660 int rpmtsUnorderedSuccessors(rpmts ts, int first)
00661         /*@modifies ts @*/;
00662 
00668 /*@observer@*/ /*@null@*/
00669 extern const char * rpmtsRootDir(rpmts ts)
00670         /*@*/;
00671 
00677 void rpmtsSetRootDir(rpmts ts, /*@null@*/ const char * rootDir)
00678         /*@modifies ts @*/;
00679 
00685 /*@observer@*/ /*@null@*/
00686 extern const char * rpmtsCurrDir(rpmts ts)
00687         /*@*/;
00688 
00694 void rpmtsSetCurrDir(rpmts ts, /*@null@*/ const char * currDir)
00695         /*@modifies ts @*/;
00696 
00702 /*@null@*/
00703 FD_t rpmtsScriptFd(rpmts ts)
00704         /*@*/;
00705 
00711 void rpmtsSetScriptFd(rpmts ts, /*@null@*/ FD_t scriptFd)
00712         /*@modifies ts, scriptFd @*/;
00713 
00719 int rpmtsSELinuxEnabled(rpmts ts)
00720         /*@*/;
00721 
00727 int rpmtsChrootDone(rpmts ts)
00728         /*@*/;
00729 
00736 int rpmtsSetChrootDone(rpmts ts, int chrootDone)
00737         /*@modifies ts @*/;
00738 
00744 /*@null@*/
00745 rpmsx rpmtsREContext(const rpmts ts)
00746         /*@modifies ts @*/;
00747 
00754 int rpmtsSetREContext(rpmts ts, rpmsx sx)
00755         /*@modifies ts, sx @*/;
00756 
00762 int_32 rpmtsGetTid(rpmts ts)
00763         /*@*/;
00764 
00771 int_32 rpmtsSetTid(rpmts ts, int_32 tid)
00772         /*@modifies ts @*/;
00773 
00779 int_32 rpmtsSigtag(const rpmts ts)
00780         /*@*/;
00781 
00787 int_32 rpmtsSigtype(const rpmts ts)
00788         /*@*/;
00789 
00795 /*@observer@*/ /*@null@*/
00796 extern const void * rpmtsSig(const rpmts ts)
00797         /*@*/;
00798 
00804 int_32 rpmtsSiglen(const rpmts ts)
00805         /*@*/;
00806 
00816 int rpmtsSetSig(rpmts ts,
00817                 int_32 sigtag, int_32 sigtype,
00818                 /*@kept@*/ /*@null@*/ const void * sig, int_32 siglen)
00819         /*@modifies ts @*/;
00820 
00826 /*@exposed@*/ /*@null@*/
00827 pgpDig rpmtsDig(rpmts ts)
00828         /*@*/;
00829 
00835 /*@exposed@*/ /*@null@*/
00836 pgpDigParams rpmtsSignature(const rpmts ts)
00837         /*@*/;
00838 
00844 /*@exposed@*/ /*@null@*/
00845 pgpDigParams rpmtsPubkey(const rpmts ts)
00846         /*@*/;
00847 
00853 /*@null@*/
00854 rpmdb rpmtsGetRdb(rpmts ts)
00855         /*@*/;
00856 
00862 int rpmtsInitDSI(const rpmts ts)
00863         /*@globals fileSystem, internalState @*/
00864         /*@modifies ts, fileSystem, internalState @*/;
00865 
00875 void rpmtsUpdateDSI(const rpmts ts, dev_t dev,
00876                 uint_32 fileSize, uint_32 prevSize, uint_32 fixupSize,
00877                 fileAction action)
00878         /*@modifies ts @*/;
00879 
00885 void rpmtsCheckDSIProblems(const rpmts ts, const rpmte te)
00886         /*@modifies ts @*/;
00887 
00897 /*@null@*/
00898 void * rpmtsNotify(rpmts ts, rpmte te,
00899                 rpmCallbackType what, unsigned long amount, unsigned long total)
00900         /*@*/;
00901 
00907 int rpmtsNElements(rpmts ts)
00908         /*@*/;
00909 
00916 /*@null@*/ /*@dependent@*/
00917 rpmte rpmtsElement(rpmts ts, int ix)
00918         /*@*/;
00919 
00925 rpmprobFilterFlags rpmtsFilterFlags(rpmts ts)
00926         /*@*/;
00927 
00933 rpmtransFlags rpmtsFlags(rpmts ts)
00934         /*@*/;
00935 
00942 rpmtransFlags rpmtsSetFlags(rpmts ts, rpmtransFlags transFlags)
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, internalState @*/
01041         /*@modifies rpmGlobalMacroContext, 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 
01083 /*@unused@*/
01084 int rpmtsGetKeys(rpmts ts,
01085                 /*@null@*/ /*@out@*/ fnpyKey ** ep,
01086                 /*@null@*/ /*@out@*/ int * nep)
01087         /*@globals fileSystem, internalState @*/
01088         /*@modifies ts, ep, nep, fileSystem, internalState @*/;
01089 
01096 /*@only@*/ char * hGetNEVR(Header h, /*@null@*/ /*@out@*/ const char ** np )
01097         /*@modifies *np @*/;
01098 
01105 /*@only@*/ char * hGetNEVRA(Header h, /*@null@*/ /*@out@*/ const char ** np )
01106         /*@modifies *np @*/;
01107 
01113 uint_32 hGetColor(Header h)
01114         /*@modifies h @*/;
01115 
01116 #ifdef __cplusplus
01117 }
01118 #endif
01119 
01120 
01121 #endif  /* H_RPMTS */

Generated on Thu Apr 24 01:18:02 2008 for rpm by  doxygen 1.5.2