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;              
00313     rpmVSFlags vsflags;         
00315 /*@observer@*/ /*@dependent@*/ /*@null@*/
00316     const char * fn;            
00317     int_32  sigtag;             
00318     int_32  sigtype;            
00319 /*@null@*/
00320     const void * sig;           
00321     int_32 siglen;              
00323 /*@only@*/ /*@null@*/
00324     const unsigned char * pkpkt;
00325     size_t pkpktlen;            
00326     unsigned char pksignid[8];  
00328     struct rpmop_s ops[RPMTS_OP_MAX];
00329 
00330 /*@null@*/
00331     pgpDig dig;                 
00333 /*@null@*/
00334     Spec spec;                  
00336 /*@kept@*/ /*@null@*/
00337     rpmtsScore score;           
00339 /*@refs@*/
00340     int nrefs;                  
00341 };
00342 #endif  /* _RPMTS_INTERNAL */
00343 
00344 #ifdef __cplusplus
00345 extern "C" {
00346 #endif
00347 
00353 int rpmtsCheck(rpmts ts)
00354         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00355         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00356 
00373 int rpmtsOrder(rpmts ts)
00374         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00375         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00376 
00394 int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
00395         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00396         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00397 
00404 /*@unused@*/ /*@null@*/
00405 rpmts rpmtsUnlink (/*@killref@*/ /*@only@*/ rpmts ts,
00406                 const char * msg)
00407         /*@modifies ts @*/;
00408 
00410 /*@-exportlocal@*/
00411 /*@null@*/
00412 rpmts XrpmtsUnlink (/*@killref@*/ /*@only@*/ rpmts ts,
00413                 const char * msg, const char * fn, unsigned ln)
00414         /*@modifies ts @*/;
00415 /*@=exportlocal@*/
00416 #define rpmtsUnlink(_ts, _msg)  XrpmtsUnlink(_ts, _msg, __FILE__, __LINE__)
00417 
00424 /*@unused@*/
00425 rpmts rpmtsLink (rpmts ts, const char * msg)
00426         /*@modifies ts @*/;
00427 
00429 rpmts XrpmtsLink (rpmts ts,
00430                 const char * msg, const char * fn, unsigned ln)
00431         /*@modifies ts @*/;
00432 #define rpmtsLink(_ts, _msg)    XrpmtsLink(_ts, _msg, __FILE__, __LINE__)
00433 
00439 int rpmtsCloseDB(rpmts ts)
00440         /*@globals fileSystem @*/
00441         /*@modifies ts, fileSystem @*/;
00442 
00449 int rpmtsOpenDB(rpmts ts, int dbmode)
00450         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00451         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00452 
00460 int rpmtsInitDB(rpmts ts, int dbmode)
00461         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00462         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00463 
00469 int rpmtsRebuildDB(rpmts ts)
00470         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00471         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00472 
00478 int rpmtsVerifyDB(rpmts ts)
00479         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00480         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00481 
00490 /*@only@*/ /*@null@*/
00491 rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmTag rpmtag,
00492                         /*@null@*/ const void * keyp, size_t keylen)
00493         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00494         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00495 
00501 /*@-exportlocal@*/
00502 rpmRC rpmtsFindPubkey(rpmts ts)
00503         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00504         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState */;
00505 /*@=exportlocal@*/
00506 
00512 /*@-exportlocal@*/
00513 int rpmtsCloseSDB(rpmts ts)
00514         /*@globals fileSystem @*/
00515         /*@modifies ts, fileSystem @*/;
00516 /*@=exportlocal@*/
00517 
00524 /*@-exportlocal@*/
00525 int rpmtsOpenSDB(rpmts ts, int dbmode)
00526         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00527         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00528 /*@=exportlocal@*/
00529 
00537 /*@-exportlocal@*/
00538 int rpmtsSolve(rpmts ts, rpmds ds, const void * data)
00539         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00540         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00541 /*@=exportlocal@*/
00542 
00550 /*@unused@*/
00551 int rpmtsAvailable(rpmts ts, const rpmds ds)
00552         /*@globals fileSystem @*/
00553         /*@modifies ts, fileSystem @*/;
00554 
00562 int rpmtsSetSolveCallback(rpmts ts,
00563                 int (*solve) (rpmts ts, rpmds ds, const void * data),
00564                 const void * solveData)
00565         /*@modifies ts @*/;
00566 
00572 rpmtsType rpmtsGetType(rpmts ts)
00573         /*@*/;
00574 
00586 void rpmtsSetType(rpmts ts, rpmtsType type)
00587         /*@modifies ts @*/;
00588 
00594 /*@null@*/
00595 rpmps rpmtsProblems(rpmts ts)
00596         /*@modifies ts @*/;
00597 
00602 void rpmtsCleanDig(rpmts ts)
00603         /*@modifies ts @*/;
00604 
00609 void rpmtsClean(rpmts ts)
00610         /*@globals fileSystem, internalState @*/
00611         /*@modifies ts, fileSystem , internalState@*/;
00612 
00617 void rpmtsEmpty(rpmts ts)
00618         /*@globals fileSystem, internalState @*/
00619         /*@modifies ts, fileSystem, internalState @*/;
00620 
00626 /*@null@*/
00627 rpmts rpmtsFree(/*@killref@*/ /*@only@*//*@null@*/ rpmts ts)
00628         /*@globals fileSystem, internalState @*/
00629         /*@modifies ts, fileSystem, internalState @*/;
00630 
00636 rpmVSFlags rpmtsVSFlags(rpmts ts)
00637         /*@*/;
00638 
00645 rpmVSFlags rpmtsSetVSFlags(rpmts ts, rpmVSFlags vsflags)
00646         /*@modifies ts @*/;
00647 
00654 int rpmtsUnorderedSuccessors(rpmts ts, int first)
00655         /*@modifies ts @*/;
00656 
00662 /*@observer@*/ /*@null@*/
00663 extern const char * rpmtsRootDir(rpmts ts)
00664         /*@*/;
00665 
00671 void rpmtsSetRootDir(rpmts ts, /*@null@*/ const char * rootDir)
00672         /*@modifies ts @*/;
00673 
00679 /*@observer@*/ /*@null@*/
00680 extern const char * rpmtsCurrDir(rpmts ts)
00681         /*@*/;
00682 
00688 void rpmtsSetCurrDir(rpmts ts, /*@null@*/ const char * currDir)
00689         /*@modifies ts @*/;
00690 
00696 /*@null@*/
00697 FD_t rpmtsScriptFd(rpmts ts)
00698         /*@*/;
00699 
00705 void rpmtsSetScriptFd(rpmts ts, /*@null@*/ FD_t scriptFd)
00706         /*@modifies ts, scriptFd @*/;
00707 
00713 int rpmtsSELinuxEnabled(rpmts ts)
00714         /*@*/;
00715 
00721 int rpmtsChrootDone(rpmts ts)
00722         /*@*/;
00723 
00730 int rpmtsSetChrootDone(rpmts ts, int chrootDone)
00731         /*@modifies ts @*/;
00732 
00738 /*@null@*/
00739 rpmsx rpmtsREContext(const rpmts ts)
00740         /*@modifies ts @*/;
00741 
00748 int rpmtsSetREContext(rpmts ts, rpmsx sx)
00749         /*@modifies ts, sx @*/;
00750 
00756 int_32 rpmtsGetTid(rpmts ts)
00757         /*@*/;
00758 
00765 int_32 rpmtsSetTid(rpmts ts, int_32 tid)
00766         /*@modifies ts @*/;
00767 
00773 int_32 rpmtsSigtag(const rpmts ts)
00774         /*@*/;
00775 
00781 int_32 rpmtsSigtype(const rpmts ts)
00782         /*@*/;
00783 
00789 /*@observer@*/ /*@null@*/
00790 extern const void * rpmtsSig(const rpmts ts)
00791         /*@*/;
00792 
00798 int_32 rpmtsSiglen(const rpmts ts)
00799         /*@*/;
00800 
00810 int rpmtsSetSig(rpmts ts,
00811                 int_32 sigtag, int_32 sigtype,
00812                 /*@kept@*/ /*@null@*/ const void * sig, int_32 siglen)
00813         /*@modifies ts @*/;
00814 
00820 /*@exposed@*/ /*@null@*/
00821 pgpDig rpmtsDig(rpmts ts)
00822         /*@*/;
00823 
00829 /*@exposed@*/ /*@null@*/
00830 pgpDigParams rpmtsSignature(const rpmts ts)
00831         /*@*/;
00832 
00838 /*@exposed@*/ /*@null@*/
00839 pgpDigParams rpmtsPubkey(const rpmts ts)
00840         /*@*/;
00841 
00847 /*@null@*/
00848 rpmdb rpmtsGetRdb(rpmts ts)
00849         /*@*/;
00850 
00856 int rpmtsInitDSI(const rpmts ts)
00857         /*@globals fileSystem, internalState @*/
00858         /*@modifies ts, fileSystem, internalState @*/;
00859 
00869 void rpmtsUpdateDSI(const rpmts ts, dev_t dev,
00870                 uint_32 fileSize, uint_32 prevSize, uint_32 fixupSize,
00871                 fileAction action)
00872         /*@modifies ts @*/;
00873 
00879 void rpmtsCheckDSIProblems(const rpmts ts, const rpmte te)
00880         /*@modifies ts @*/;
00881 
00891 /*@null@*/
00892 void * rpmtsNotify(rpmts ts, rpmte te,
00893                 rpmCallbackType what, unsigned long amount, unsigned long total)
00894         /*@*/;
00895 
00901 int rpmtsNElements(rpmts ts)
00902         /*@*/;
00903 
00910 /*@null@*/ /*@dependent@*/
00911 rpmte rpmtsElement(rpmts ts, int ix)
00912         /*@*/;
00913 
00919 rpmprobFilterFlags rpmtsFilterFlags(rpmts ts)
00920         /*@*/;
00921 
00927 rpmtransFlags rpmtsFlags(rpmts ts)
00928         /*@*/;
00929 
00936 rpmtransFlags rpmtsSetFlags(rpmts ts, rpmtransFlags transFlags)
00937         /*@modifies ts @*/;
00938 
00944 /*@null@*/
00945 Spec rpmtsSpec(rpmts ts)
00946         /*@*/;
00947 
00954 /*@null@*/
00955 Spec rpmtsSetSpec(rpmts ts, /*@null@*/ Spec spec)
00956         /*@modifies ts @*/;
00957 
00963 /*@null@*/
00964 rpmte rpmtsRelocateElement(rpmts ts)
00965         /*@*/;
00966 
00973 /*@null@*/
00974 rpmte rpmtsSetRelocateElement(rpmts ts, /*@null@*/ rpmte relocateElement)
00975         /*@modifies ts @*/;
00976 
00982 uint_32 rpmtsColor(rpmts ts)
00983         /*@*/;
00984 
00991 uint_32 rpmtsSetColor(rpmts ts, uint_32 color)
00992         /*@modifies ts @*/;
00993 
01000 /*@relnull@*/
01001 rpmop rpmtsOp(rpmts ts, rpmtsOpX opx)
01002         /*@*/;
01003 
01015 int rpmtsSetNotifyCallback(rpmts ts,
01016                 /*@observer@*/ rpmCallbackFunction notify,
01017                 /*@observer@*/ rpmCallbackData notifyData)
01018         /*@modifies ts @*/;
01019 
01024 /*@newref@*/
01025 rpmts rpmtsCreate(void)
01026         /*@globals rpmGlobalMacroContext, h_errno, internalState @*/
01027         /*@modifies rpmGlobalMacroContext, internalState @*/;
01028 
01042 int rpmtsAddInstallElement(rpmts ts, Header h,
01043                 /*@exposed@*/ /*@null@*/ const fnpyKey key, int upgrade,
01044                 /*@null@*/ rpmRelocation * relocs)
01045         /*@globals rpmcliPackagesTotal, rpmGlobalMacroContext, h_errno,
01046                 fileSystem, internalState @*/
01047         /*@modifies ts, h, rpmcliPackagesTotal, rpmGlobalMacroContext,
01048                 fileSystem, internalState @*/;
01049 
01057 int rpmtsAddEraseElement(rpmts ts, Header h, int dboffset)
01058         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
01059         /*@modifies ts, h, rpmGlobalMacroContext, fileSystem, internalState @*/;
01060 
01069 /*@unused@*/
01070 int rpmtsGetKeys(rpmts ts,
01071                 /*@null@*/ /*@out@*/ fnpyKey ** ep,
01072                 /*@null@*/ /*@out@*/ int * nep)
01073         /*@globals fileSystem, internalState @*/
01074         /*@modifies ts, ep, nep, fileSystem, internalState @*/;
01075 
01082 /*@only@*/ char * hGetNEVR(Header h, /*@null@*/ /*@out@*/ const char ** np )
01083         /*@modifies *np @*/;
01084 
01091 /*@only@*/ char * hGetNEVRA(Header h, /*@null@*/ /*@out@*/ const char ** np )
01092         /*@modifies *np @*/;
01093 
01099 uint_32 hGetColor(Header h)
01100         /*@modifies h @*/;
01101 
01102 #ifdef __cplusplus
01103 }
01104 #endif
01105 
01106 
01107 #endif  /* H_RPMTS */

Generated on Wed Jan 28 12:45:24 2009 for rpm by  doxygen 1.4.7