Main Page   Modules   Compound List   File List   Compound Members   File Members   Related Pages  

lib/rpmlib.h

Go to the documentation of this file.
00001 #ifndef H_RPMLIB
00002 #define H_RPMLIB
00003 
00009 /* This is the *only* module users of rpmlib should need to include */
00010 
00011 /* and it shouldn't need these :-( */
00012 
00013 #include "rpmio.h"
00014 #include "rpmmessages.h"
00015 #include "rpmerr.h"
00016 #include "header.h"
00017 #include "popt.h"
00018 
00019 #ifdef __cplusplus
00020 extern "C" {
00021 #endif
00022 
00030 int rpmReadPackageInfo(FD_t fd, /*@out@*/ Header * signatures,
00031         /*@out@*/ Header * hdr) /*@modifies fd, *signatures, *hdr @*/;
00032 
00042 int rpmReadPackageHeader(FD_t fd, /*@out@*/ Header * hdr,
00043         /*@out@*/ int * isSource, /*@out@*/ int * major,
00044         /*@out@*/ int * minor)
00045                 /*@modifies fd, *hdr, *isSource, *major, *minor @*/;
00046 
00055 int headerNVR(Header h, /*@out@*/ const char **np, /*@out@*/ const char **vp,
00056         /*@out@*/ const char **rp) /*@modifies *np, *vp, *rp @*/;
00057 
00063 void headerMergeLegacySigs(Header h, const Header sig)
00064         /*@modifies h @*/;
00065 
00079 void rpmBuildFileList(Header h, /*@out@*/ const char *** fileListPtr, 
00080         /*@out@*/ int * fileCountPtr)
00081                 /*@modifies *fileListPtr, *fileCountPtr @*/;
00082 
00096 int rpmHeaderGetEntry(Header h, int_32 tag, /*@out@*/ int_32 *type,
00097         /*@out@*/ void **p, /*@out@*/ int_32 *c)
00098                 /*@modifies *type, *p, *c @*/;
00099 
00115 int rpmPackageGetEntry(void *leadp, Header sigs, Header h,
00116         int_32 tag, int_32 *type, void **p, int_32 *c)
00117                 /*@modifies *type, *p, *c @*/;
00118 
00122 extern const struct headerTagTableEntry rpmTagTable[];
00123 
00127 extern const int rpmTagTableSize;
00128 
00133 extern const struct headerSprintfExtension rpmHeaderFormats[];
00134 
00138 #define RPMDBI_PACKAGES         0       
00139 #define RPMDBI_DEPENDS          1       
00140 #define RPMDBI_LABEL            2       
00141 #define RPMDBI_ADDED            3       
00142 #define RPMDBI_REMOVED          4       
00143 #define RPMDBI_AVAILABLE        5       
00149 typedef enum rpmTag_e {
00150 
00151     RPMTAG_HEADERIMAGE          = HEADER_IMAGE,         
00152     RPMTAG_HEADERSIGNATURES     = HEADER_SIGNATURES,    
00153     RPMTAG_HEADERIMMUTABLE      = HEADER_IMMUTABLE,     
00154     RPMTAG_HEADERREGIONS        = HEADER_REGIONS,       
00156     RPMTAG_HEADERI18NTABLE      = HEADER_I18NTABLE, 
00158 /* Retrofit (and uniqify) signature tags for use by tagName() and rpmQuery. */
00159 /* the md5 sum was broken *twice* on big endian machines */
00160 /* XXX 2nd underscore prevents tagTable generation */
00161     RPMTAG_SIG_BASE             = HEADER_SIGBASE,
00162     RPMTAG_SIGSIZE              = RPMTAG_SIG_BASE+1,
00163     RPMTAG_SIGLEMD5_1           = RPMTAG_SIG_BASE+2,
00164     RPMTAG_SIGPGP               = RPMTAG_SIG_BASE+3,
00165     RPMTAG_SIGLEMD5_2           = RPMTAG_SIG_BASE+4,
00166     RPMTAG_SIGMD5               = RPMTAG_SIG_BASE+5,
00167     RPMTAG_SIGGPG               = RPMTAG_SIG_BASE+6,
00168     RPMTAG_SIGPGP5              = RPMTAG_SIG_BASE+7,    
00170     RPMTAG_NAME                 = 1000,
00171     RPMTAG_VERSION              = 1001,
00172     RPMTAG_RELEASE              = 1002,
00173     RPMTAG_EPOCH                = 1003,
00174 #define RPMTAG_SERIAL   RPMTAG_EPOCH    /* backward comaptibility */
00175     RPMTAG_SUMMARY              = 1004,
00176     RPMTAG_DESCRIPTION          = 1005,
00177     RPMTAG_BUILDTIME            = 1006,
00178     RPMTAG_BUILDHOST            = 1007,
00179     RPMTAG_INSTALLTIME          = 1008,
00180     RPMTAG_SIZE                 = 1009,
00181     RPMTAG_DISTRIBUTION         = 1010,
00182     RPMTAG_VENDOR               = 1011,
00183     RPMTAG_GIF                  = 1012,
00184     RPMTAG_XPM                  = 1013,
00185     RPMTAG_LICENSE              = 1014,
00186 #define RPMTAG_COPYRIGHT RPMTAG_LICENSE /* backward comaptibility */
00187     RPMTAG_PACKAGER             = 1015,
00188     RPMTAG_GROUP                = 1016,
00189     RPMTAG_CHANGELOG            = 1017, 
00190     RPMTAG_SOURCE               = 1018,
00191     RPMTAG_PATCH                = 1019,
00192     RPMTAG_URL                  = 1020,
00193     RPMTAG_OS                   = 1021,
00194     RPMTAG_ARCH                 = 1022,
00195     RPMTAG_PREIN                = 1023,
00196     RPMTAG_POSTIN               = 1024,
00197     RPMTAG_PREUN                = 1025,
00198     RPMTAG_POSTUN               = 1026,
00199     RPMTAG_OLDFILENAMES         = 1027, /* obsolete */
00200     RPMTAG_FILESIZES            = 1028,
00201     RPMTAG_FILESTATES           = 1029,
00202     RPMTAG_FILEMODES            = 1030,
00203     RPMTAG_FILEUIDS             = 1031, 
00204     RPMTAG_FILEGIDS             = 1032, 
00205     RPMTAG_FILERDEVS            = 1033,
00206     RPMTAG_FILEMTIMES           = 1034,
00207     RPMTAG_FILEMD5S             = 1035,
00208     RPMTAG_FILELINKTOS          = 1036,
00209     RPMTAG_FILEFLAGS            = 1037,
00210     RPMTAG_ROOT                 = 1038, 
00211     RPMTAG_FILEUSERNAME         = 1039,
00212     RPMTAG_FILEGROUPNAME        = 1040,
00213     RPMTAG_EXCLUDE              = 1041, 
00214     RPMTAG_EXCLUSIVE            = 1042, 
00215     RPMTAG_ICON                 = 1043,
00216     RPMTAG_SOURCERPM            = 1044,
00217     RPMTAG_FILEVERIFYFLAGS      = 1045,
00218     RPMTAG_ARCHIVESIZE          = 1046,
00219     RPMTAG_PROVIDENAME          = 1047,
00220 #define RPMTAG_PROVIDES RPMTAG_PROVIDENAME      /* backward comaptibility */
00221     RPMTAG_REQUIREFLAGS         = 1048,
00222     RPMTAG_REQUIRENAME          = 1049,
00223     RPMTAG_REQUIREVERSION       = 1050,
00224     RPMTAG_NOSOURCE             = 1051, 
00225     RPMTAG_NOPATCH              = 1052, 
00226     RPMTAG_CONFLICTFLAGS        = 1053,
00227     RPMTAG_CONFLICTNAME         = 1054,
00228     RPMTAG_CONFLICTVERSION      = 1055,
00229     RPMTAG_DEFAULTPREFIX        = 1056, 
00230     RPMTAG_BUILDROOT            = 1057,
00231     RPMTAG_INSTALLPREFIX        = 1058, 
00232     RPMTAG_EXCLUDEARCH          = 1059,
00233     RPMTAG_EXCLUDEOS            = 1060,
00234     RPMTAG_EXCLUSIVEARCH        = 1061,
00235     RPMTAG_EXCLUSIVEOS          = 1062,
00236     RPMTAG_AUTOREQPROV          = 1063, 
00237     RPMTAG_RPMVERSION           = 1064,
00238     RPMTAG_TRIGGERSCRIPTS       = 1065,
00239     RPMTAG_TRIGGERNAME          = 1066,
00240     RPMTAG_TRIGGERVERSION       = 1067,
00241     RPMTAG_TRIGGERFLAGS         = 1068,
00242     RPMTAG_TRIGGERINDEX         = 1069,
00243     RPMTAG_VERIFYSCRIPT         = 1079,
00244     RPMTAG_CHANGELOGTIME        = 1080,
00245     RPMTAG_CHANGELOGNAME        = 1081,
00246     RPMTAG_CHANGELOGTEXT        = 1082,
00247     RPMTAG_BROKENMD5            = 1083, 
00248     RPMTAG_PREREQ               = 1084, 
00249     RPMTAG_PREINPROG            = 1085,
00250     RPMTAG_POSTINPROG           = 1086,
00251     RPMTAG_PREUNPROG            = 1087,
00252     RPMTAG_POSTUNPROG           = 1088,
00253     RPMTAG_BUILDARCHS           = 1089,
00254     RPMTAG_OBSOLETENAME         = 1090,
00255 #define RPMTAG_OBSOLETES RPMTAG_OBSOLETENAME    /* backward comaptibility */
00256     RPMTAG_VERIFYSCRIPTPROG     = 1091,
00257     RPMTAG_TRIGGERSCRIPTPROG    = 1092,
00258     RPMTAG_DOCDIR               = 1093, 
00259     RPMTAG_COOKIE               = 1094,
00260     RPMTAG_FILEDEVICES          = 1095,
00261     RPMTAG_FILEINODES           = 1096,
00262     RPMTAG_FILELANGS            = 1097,
00263     RPMTAG_PREFIXES             = 1098,
00264     RPMTAG_INSTPREFIXES         = 1099,
00265     RPMTAG_TRIGGERIN            = 1100, 
00266     RPMTAG_TRIGGERUN            = 1101, 
00267     RPMTAG_TRIGGERPOSTUN        = 1102, 
00268     RPMTAG_AUTOREQ              = 1103, 
00269     RPMTAG_AUTOPROV             = 1104, 
00270     RPMTAG_CAPABILITY           = 1105, 
00271     RPMTAG_SOURCEPACKAGE        = 1106, 
00272     RPMTAG_OLDORIGFILENAMES     = 1107, 
00273     RPMTAG_BUILDPREREQ          = 1108, 
00274     RPMTAG_BUILDREQUIRES        = 1109, 
00275     RPMTAG_BUILDCONFLICTS       = 1110, 
00276     RPMTAG_BUILDMACROS          = 1111,
00277     RPMTAG_PROVIDEFLAGS         = 1112,
00278     RPMTAG_PROVIDEVERSION       = 1113,
00279     RPMTAG_OBSOLETEFLAGS        = 1114,
00280     RPMTAG_OBSOLETEVERSION      = 1115,
00281     RPMTAG_DIRINDEXES           = 1116,
00282     RPMTAG_BASENAMES            = 1117,
00283     RPMTAG_DIRNAMES             = 1118,
00284     RPMTAG_ORIGDIRINDEXES       = 1119, 
00285     RPMTAG_ORIGBASENAMES        = 1120, 
00286     RPMTAG_ORIGDIRNAMES         = 1121, 
00287     RPMTAG_OPTFLAGS             = 1122,
00288     RPMTAG_DISTURL              = 1123,
00289     RPMTAG_PAYLOADFORMAT        = 1124,
00290     RPMTAG_PAYLOADCOMPRESSOR    = 1125,
00291     RPMTAG_PAYLOADFLAGS         = 1126,
00292     RPMTAG_MULTILIBS            = 1127,
00293     RPMTAG_INSTALLTID           = 1128,
00294     RPMTAG_REMOVETID            = 1129,
00295     RPMTAG_FIRSTFREE_TAG        
00296 } rpmTag;
00297 
00298 #define RPMTAG_EXTERNAL_TAG             1000000
00299 
00303 typedef enum rpmfileStates_e {
00304     RPMFILE_STATE_NORMAL        = 0,
00305     RPMFILE_STATE_REPLACED      = 1,
00306     RPMFILE_STATE_NOTINSTALLED  = 2,
00307     RPMFILE_STATE_NETSHARED     = 3
00308 } rpmfileStates;
00309 
00313 typedef enum rpmfileAttrs_e {
00314     RPMFILE_CONFIG      = (1 << 0),     
00315     RPMFILE_DOC         = (1 << 1),     
00316     RPMFILE_DONOTUSE    = (1 << 2),     
00317     RPMFILE_MISSINGOK   = (1 << 3),     
00318     RPMFILE_NOREPLACE   = (1 << 4),     
00319     RPMFILE_SPECFILE    = (1 << 5),     
00320     RPMFILE_GHOST       = (1 << 6),     
00321     RPMFILE_LICENSE     = (1 << 7),     
00322     RPMFILE_README      = (1 << 8)      
00323 } rpmfileAttrs;
00324 #define RPMFILE_MULTILIB_SHIFT          9
00325 #define RPMFILE_MULTILIB(N)             ((N) << RPMFILE_MULTILIB_SHIFT)
00326 #define RPMFILE_MULTILIB_MASK           RPMFILE_MULTILIB(7)
00327 
00328 /* XXX Check file flags for multilib marker. */
00329 #define isFileMULTILIB(_fflags)         ((_fflags) & RPMFILE_MULTILIB_MASK)
00330 
00334 typedef enum rpmsenseFlags_e {
00335     RPMSENSE_ANY        = 0,
00336     RPMSENSE_SERIAL     = (1 << 0),     
00337     RPMSENSE_LESS       = (1 << 1),
00338     RPMSENSE_GREATER    = (1 << 2),
00339     RPMSENSE_EQUAL      = (1 << 3),
00340     RPMSENSE_PROVIDES   = (1 << 4), /* only used internally by builds */
00341     RPMSENSE_CONFLICTS  = (1 << 5), /* only used internally by builds */
00342     RPMSENSE_PREREQ     = (1 << 6),     
00343     RPMSENSE_OBSOLETES  = (1 << 7), /* only used internally by builds */
00344     RPMSENSE_INTERP     = (1 << 8),     
00345     RPMSENSE_SCRIPT_PRE = ((1 << 9)|RPMSENSE_PREREQ), 
00346     RPMSENSE_SCRIPT_POST = ((1 << 10)|RPMSENSE_PREREQ), 
00347     RPMSENSE_SCRIPT_PREUN = ((1 << 11)|RPMSENSE_PREREQ), 
00348     RPMSENSE_SCRIPT_POSTUN = ((1 << 12)|RPMSENSE_PREREQ), 
00349     RPMSENSE_SCRIPT_VERIFY = (1 << 13), 
00350     RPMSENSE_FIND_REQUIRES = (1 << 14), 
00351     RPMSENSE_FIND_PROVIDES = (1 << 15), 
00353     RPMSENSE_TRIGGERIN  = (1 << 16),    
00354     RPMSENSE_TRIGGERUN  = (1 << 17),    
00355     RPMSENSE_TRIGGERPOSTUN = (1 << 18), 
00356     RPMSENSE_MULTILIB   = (1 << 19),
00357     RPMSENSE_SCRIPT_PREP = (1 << 20),   
00358     RPMSENSE_SCRIPT_BUILD = (1 << 21),  
00359     RPMSENSE_SCRIPT_INSTALL = (1 << 22),
00360     RPMSENSE_SCRIPT_CLEAN = (1 << 23),  
00361     RPMSENSE_RPMLIB     = ((1 << 24) | RPMSENSE_PREREQ), 
00362     RPMSENSE_TRIGGERPREIN = (1 << 25)   
00364 } rpmsenseFlags;
00365 
00366 #define RPMSENSE_SENSEMASK      15       /* Mask to get senses, ie serial, */
00367                                          /* less, greater, equal.          */
00368 
00369 #define RPMSENSE_TRIGGER        \
00370         (RPMSENSE_TRIGGERIN | RPMSENSE_TRIGGERUN | RPMSENSE_TRIGGERPOSTUN)
00371 
00372 #define isDependsMULTILIB(_dflags)      ((_dflags) & RPMSENSE_MULTILIB)
00373 
00374 #define _ALL_REQUIRES_MASK      (\
00375     RPMSENSE_INTERP | \
00376     RPMSENSE_SCRIPT_PRE | \
00377     RPMSENSE_SCRIPT_POST | \
00378     RPMSENSE_SCRIPT_PREUN | \
00379     RPMSENSE_SCRIPT_POSTUN | \
00380     RPMSENSE_SCRIPT_VERIFY | \
00381     RPMSENSE_FIND_REQUIRES | \
00382     RPMSENSE_SCRIPT_PREP | \
00383     RPMSENSE_SCRIPT_BUILD | \
00384     RPMSENSE_SCRIPT_INSTALL | \
00385     RPMSENSE_SCRIPT_CLEAN | \
00386     RPMSENSE_RPMLIB )
00387 
00388 #define _notpre(_x)             ((_x) & ~RPMSENSE_PREREQ)
00389 #define _INSTALL_ONLY_MASK \
00390     _notpre(RPMSENSE_SCRIPT_PRE|RPMSENSE_SCRIPT_POST|RPMSENSE_RPMLIB)
00391 #define _ERASE_ONLY_MASK  \
00392     _notpre(RPMSENSE_SCRIPT_PREUN|RPMSENSE_SCRIPT_POSTUN)
00393 
00394 #define isLegacyPreReq(_x)  (((_x) & _ALL_REQUIRES_MASK) == RPMSENSE_PREREQ)
00395 #define isInstallPreReq(_x)     ((_x) & _INSTALL_ONLY_MASK)
00396 #define isErasePreReq(_x)       ((_x) & _ERASE_ONLY_MASK)
00397 
00398 /* ==================================================================== */
00401 
00402 /* Stuff for maintaining "variables" like SOURCEDIR, BUILDDIR, etc */
00403 #define RPMVAR_OPTFLAGS                 3
00404 #define RPMVAR_PROVIDES                 38
00405 #define RPMVAR_INCLUDE                  43
00406 #define RPMVAR_MACROFILES               49
00407 
00408 #define RPMVAR_NUM                      55      /* number of RPMVAR entries */
00409 
00415 const char * rpmGetVar(int var);
00416 
00422 void rpmSetVar(int var, const char *val);
00423 
00429 extern const char * macrofiles;
00430 
00435 enum rpm_machtable_e {
00436     RPM_MACHTABLE_INSTARCH      = 0,    
00437     RPM_MACHTABLE_INSTOS        = 1,    
00438     RPM_MACHTABLE_BUILDARCH     = 2,    
00439     RPM_MACHTABLE_BUILDOS       = 3     
00440 };
00441 #define RPM_MACHTABLE_COUNT     4       
00449 int rpmReadConfigFiles(const char * file, const char * target);
00450 
00456 int rpmReadRC(const char * file);
00457 
00464 void rpmGetArchInfo( /*@out@*/ const char ** name, /*@out@*/ int * num);
00465 
00472 void rpmGetOsInfo( /*@out@*/ const char ** name, /*@out@*/ int * num);
00473 
00487 int rpmMachineScore(int type, const char * name);
00488 
00494 int rpmShowRC(FILE *f);
00495 
00502 void rpmSetTables(int archTable, int osTable);  /* only used by build code */
00503 
00514 void rpmSetMachine(const char * arch, const char * os);
00515 
00524 void rpmGetMachine( /*@out@*/ const char **arch, /*@out@*/ const char **os);
00525 
00530 void rpmFreeRpmrc(void);
00531 
00533 /* ==================================================================== */
00538 typedef /*@abstract@*/ struct rpmdb_s * rpmdb;
00539 
00542 typedef /*@abstract@*/ struct _dbiIndexSet * dbiIndexSet;
00543 
00552 int rpmdbOpen (const char * root, /*@out@*/ rpmdb * dbp, int mode, int perms);
00553 
00560 int rpmdbInit(const char * root, int perms);
00561 
00567 int rpmdbClose ( /*@only@*/ rpmdb rpmdb);
00568 
00574 int rpmdbSync (rpmdb rpmdb);
00575 
00581 int rpmdbOpenAll (rpmdb rpmdb);
00582 
00589 int rpmdbCountPackages(rpmdb db, const char *name);
00590 
00593 typedef /*@abstract@*/ struct _rpmdbMatchIterator * rpmdbMatchIterator;
00594 
00599 void rpmdbFreeIterator( /*@only@*/ rpmdbMatchIterator mi);
00600 
00606 rpmdb rpmdbGetIteratorRpmDB(rpmdbMatchIterator mi);
00607 
00613 unsigned int rpmdbGetIteratorOffset(rpmdbMatchIterator mi);
00614 
00620 int rpmdbGetIteratorCount(rpmdbMatchIterator mi);
00621 
00629 int rpmdbAppendIterator(rpmdbMatchIterator mi, int * hdrNums, int nHdrNums);
00630 
00639 int rpmdbPruneIterator(rpmdbMatchIterator mi, int * hdrNums,
00640         int nHdrNums, int sorted);
00641 
00648 void rpmdbSetIteratorVersion(rpmdbMatchIterator mi, /*@kept@*/ const char * version);
00649 
00656 void rpmdbSetIteratorRelease(rpmdbMatchIterator mi, /*@kept@*/ const char * release);
00657 
00664 int rpmdbSetIteratorModified(rpmdbMatchIterator mi, int modified);
00665 
00671 Header rpmdbNextIterator(rpmdbMatchIterator mi);
00672 #define rpmdbNextIterator(_a) \
00673         XrpmdbNextIterator(_a, __FILE__, __LINE__)
00674 Header XrpmdbNextIterator(rpmdbMatchIterator mi, const char * f, unsigned int l);
00675 
00684 /*@only@*/ /*@null@*/ rpmdbMatchIterator rpmdbInitIterator(
00685                         rpmdb rpmdb, int rpmtag,
00686                         const void * key, size_t keylen);
00687 
00695 int rpmdbAdd(rpmdb rpmdb, int iid, Header h);   /*@modifies h @*/
00696 
00704 int rpmdbRemove(rpmdb db, int rid, unsigned int offset);
00705 
00710 int rpmdbRebuild(const char * root);
00711 
00713 /* ==================================================================== */
00716 
00720 typedef enum rpmProblemType_e {
00721     RPMPROB_BADARCH,    
00722     RPMPROB_BADOS,      
00723     RPMPROB_PKG_INSTALLED, 
00724     RPMPROB_BADRELOCATE,
00725     RPMPROB_REQUIRES,   
00726     RPMPROB_CONFLICT,   
00727     RPMPROB_NEW_FILE_CONFLICT, 
00728     RPMPROB_FILE_CONFLICT,
00729     RPMPROB_OLDPACKAGE, 
00730     RPMPROB_DISKSPACE,  
00731     RPMPROB_DISKNODES,  
00732     RPMPROB_BADPRETRANS 
00733  } rpmProblemType;
00734 
00737 typedef /*@abstract@*/ struct rpmProblem_s {
00738 /*@only@*/ /*@null@*/ const char * pkgNEVR;
00739 /*@only@*/ /*@null@*/ const char * altNEVR;
00740 /*@dependent@*/ const void * key;
00741     Header h;
00742     rpmProblemType type;
00743     int ignoreProblem;
00744 /*@only@*/ const char * str1;
00745     unsigned long ulong1;
00746 } * rpmProblem;
00747 
00750 typedef /*@abstract@*/ struct rpmProblemSet_s {
00751     int numProblems;            
00752     int numProblemsAlloced;     
00753     rpmProblem probs;           
00754 } * rpmProblemSet;
00755 
00758 void printDepFlags(FILE *fp, const char *version, int flags)
00759         /*@modifies *fp @*/;
00760 
00763 struct rpmDependencyConflict {
00764     const char * byName;
00765     const char * byVersion;
00766     const char * byRelease;
00767     Header byHeader;
00768     /* these needs fields are misnamed -- they are used for the package
00769        which isn't needed as well */
00770     const char * needsName;
00771     const char * needsVersion;
00772     int needsFlags;
00773 /*@observer@*/ /*@null@*/ const void * suggestedPackage; /* NULL if none */
00774     enum {
00775         RPMDEP_SENSE_REQUIRES,          
00776         RPMDEP_SENSE_CONFLICTS          
00777     } sense;
00778 } ;
00779 
00782 void printDepProblems(FILE *fp, struct rpmDependencyConflict *conflicts,
00783         int numConflicts)       /*@modifies *fp @*/;
00784 
00791 /*@only@*/ const char * rpmProblemString(rpmProblem prob) /*@modifies prob @*/;
00792 
00799 void rpmProblemPrint(FILE *fp, rpmProblem prob) /*@modifies *fp, prob @*/;
00800 
00806 void rpmProblemSetPrint(FILE *fp, rpmProblemSet probs)
00807                 /*@modifies *fp, probs @*/;
00808 
00813 void rpmProblemSetFree( /*@only@*/ rpmProblemSet probs);
00814 
00816 /* ==================================================================== */
00819 /* we pass these around as an array with a sentinel */
00820 typedef struct rpmRelocation_s {
00821     const char * oldPath;       
00822     const char * newPath;       
00823 } rpmRelocation;
00824 
00835 int rpmInstallSourcePackage(const char * root, FD_t fd,
00836                         /*@out@*/ const char ** specFile,
00837                         rpmCallbackFunction notify, rpmCallbackData notifyData,
00838                         /*@out@*/ char ** cookie);
00839 
00846 int rpmVersionCompare(Header first, Header second);
00847 
00854 typedef /*@abstract@*/ struct rpmTransactionSet_s * rpmTransactionSet;
00855 
00862 /*@only@*/ rpmTransactionSet rpmtransCreateSet(rpmdb rpmdb,
00863         const char * rootdir);
00864 
00881 int rpmtransAddPackage(rpmTransactionSet ts, Header h, FD_t fd,
00882                 /*@owned@*/ const void * key, int update,
00883                 rpmRelocation * relocs);
00884 
00891 void rpmtransAvailablePackage(rpmTransactionSet ts, Header h,
00892                 /*@owned@*/ const void * key);
00893 
00899 void rpmtransRemovePackage(rpmTransactionSet ts, int dboffset);
00900 
00905 void rpmtransFree( /*@only@*/ rpmTransactionSet ts);
00906 
00912 void rpmtransSetScriptFd(rpmTransactionSet ts, FD_t fd)
00913         /*@modifies ts, fd @*/;
00914 
00923 int rpmtransGetKeys(const rpmTransactionSet ts,
00924         /*@out@*/ const void *** ep, /*@out@*/ int * nep)
00925                 /*@modifies ep, nep @*/;
00926 
00934 int rpmdepCheck(rpmTransactionSet ts,
00935         /*@exposed@*/ /*@out@*/ struct rpmDependencyConflict ** conflicts,
00936         /*@exposed@*/ /*@out@*/ int * numConflicts);
00937 
00957 int rpmdepOrder(rpmTransactionSet ts)   /*@modifies ts @*/;
00958 
00964 void rpmdepFreeConflicts( /*@only@*/ struct rpmDependencyConflict * conflicts,
00965         int numConflicts);
00966 
00970 typedef enum rpmtransFlags_e {
00971     RPMTRANS_FLAG_TEST          = (1 << 0),     
00972     RPMTRANS_FLAG_BUILD_PROBS   = (1 << 1),     
00973     RPMTRANS_FLAG_NOSCRIPTS     = (1 << 2),     
00974     RPMTRANS_FLAG_JUSTDB        = (1 << 3),     
00975     RPMTRANS_FLAG_NOTRIGGERS    = (1 << 4),     
00976     RPMTRANS_FLAG_NODOCS        = (1 << 5),     
00977     RPMTRANS_FLAG_ALLFILES      = (1 << 6),     
00978     RPMTRANS_FLAG_KEEPOBSOLETE  = (1 << 7),     
00979     RPMTRANS_FLAG_MULTILIB      = (1 << 8),     
00980 } rpmtransFlags;
00981 
00989 int rpmGetRpmlibProvides(/*@out@*/ const char *** provNames,
00990         /*@out@*/ int ** provFlags, /*@out@*/ const char *** provVersions)
00991                 /*@ modifies *provNames, *provFlags, *provVersions @*/;
00992 
01003 int rpmRangesOverlap(const char *AName, const char *AEVR, int AFlags,
01004         const char *BName, const char *BEVR, int BFlags)        /*@*/;
01005 
01013 int rpmCheckRpmlibProvides(const char * keyName, const char * keyEVR,
01014         int keyFlags)   /*@*/;
01015 
01020 void rpmShowRpmlibProvides(FILE * fp) /*@modifies *fp @*/;
01021 
01025 typedef enum rpmprobFilterFlags_e {
01026     RPMPROB_FILTER_NONE         = 0,
01027     RPMPROB_FILTER_IGNOREOS     = (1 << 0),
01028     RPMPROB_FILTER_IGNOREARCH   = (1 << 1),
01029     RPMPROB_FILTER_REPLACEPKG   = (1 << 2),
01030     RPMPROB_FILTER_FORCERELOCATE= (1 << 3),
01031     RPMPROB_FILTER_REPLACENEWFILES= (1 << 4),
01032     RPMPROB_FILTER_REPLACEOLDFILES= (1 << 5),
01033     RPMPROB_FILTER_OLDPACKAGE   = (1 << 6),
01034     RPMPROB_FILTER_DISKSPACE    = (1 << 7),
01035     RPMPROB_FILTER_DISKNODES    = (1 << 8)
01036 } rpmprobFilterFlags;
01037 
01049 int rpmRunTransactions(rpmTransactionSet ts,
01050                         rpmCallbackFunction notify,
01051                         /*@owned@*/ rpmCallbackData notifyData,
01052                         rpmProblemSet okProbs,
01053                         /*@out@*/ rpmProblemSet * newProbs,
01054                         rpmtransFlags transFlags,
01055                         rpmprobFilterFlags ignoreSet);
01056 
01064 /*@observer@*/ const char *const tagName(int tag)       /*@*/;
01065 
01071 int tagValue(const char *tagstr)                        /*@*/;
01072 
01073 #define RPMLEAD_BINARY 0
01074 #define RPMLEAD_SOURCE 1
01075 
01076 #define RPMLEAD_MAGIC0 0xed
01077 #define RPMLEAD_MAGIC1 0xab
01078 #define RPMLEAD_MAGIC2 0xee
01079 #define RPMLEAD_MAGIC3 0xdb
01080 
01081 #define RPMLEAD_SIZE 96         
01089 struct rpmlead {
01090     unsigned char magic[4];
01091     unsigned char major, minor;
01092     short type;
01093     short archnum;
01094     char name[66];
01095     short osnum;
01096     short signature_type;       
01097     char reserved[16];          
01098 } ;
01099 
01103 void freeFilesystems(void);
01104 
01111 int rpmGetFilesystemList( /*@out@*/ const char *** listptr, /*@out@*/ int * num)
01112         /*@modifies *listptr, *num @*/;
01113 
01123 int rpmGetFilesystemUsage(const char ** filelist, int_32 * fssizes,
01124         int numFiles, /*@out@*/ uint_32 ** usagesPtr, int flags);
01125 
01126 /* ==================================================================== */
01129 
01133 struct rpmBuildArguments {
01134     int buildAmount;            
01135     const char *buildRootOverride; 
01136     char *targets;              
01137     int force;                  
01138     int noBuild;                
01139     int noDeps;                 
01140     int noLang;                 
01141     int shortCircuit;           
01142     int sign;                   
01143     int useCatalog;             
01144     char buildMode;             
01145     char buildChar;             
01146 /*@dependent@*/ const char *rootdir;
01147 };
01150 typedef struct rpmBuildArguments BTA_t;
01151 
01154 extern struct rpmBuildArguments         rpmBTArgs;
01155 
01158 extern struct poptOption                rpmBuildPoptTable[];
01159 
01161 /* ==================================================================== */
01164 
01168 typedef enum rpmVerifyAttrs_e {
01169     RPMVERIFY_NONE      = 0,            
01170     RPMVERIFY_MD5       = (1 << 0),     
01171     RPMVERIFY_FILESIZE  = (1 << 1),     
01172     RPMVERIFY_LINKTO    = (1 << 2),     
01173     RPMVERIFY_USER      = (1 << 3),     
01174     RPMVERIFY_GROUP     = (1 << 4),     
01175     RPMVERIFY_MTIME     = (1 << 5),     
01176     RPMVERIFY_MODE      = (1 << 6),     
01177     RPMVERIFY_RDEV      = (1 << 7),     
01178     RPMVERIFY_READLINKFAIL= (1 << 28),  
01179     RPMVERIFY_READFAIL  = (1 << 29),    
01180     RPMVERIFY_LSTATFAIL = (1 << 30)     
01181 } rpmVerifyAttrs;
01182 #define RPMVERIFY_ALL           ~(RPMVERIFY_NONE)
01183 
01195 int rpmVerifyFile(const char * root, Header h, int filenum,
01196         /*@out@*/ int * result, int omitMask);
01197 
01206 int rpmVerifyScript(const char * rootDir, Header h, FD_t scriptFd);
01207 
01211 typedef enum rpmQVSources_e {
01212     RPMQV_PACKAGE = 0,  
01213     RPMQV_PATH,         
01214     RPMQV_ALL,          
01215     RPMQV_RPM,          
01216     RPMQV_GROUP,        
01217     RPMQV_WHATPROVIDES, 
01218     RPMQV_WHATREQUIRES, 
01219     RPMQV_TRIGGEREDBY,  
01220     RPMQV_DBOFFSET,     
01221     RPMQV_SPECFILE      
01222 } rpmQVSources;
01223 
01227 typedef enum rpmQueryFlags_e {
01228     QUERY_FOR_LIST      = (1 << 1),     
01229     QUERY_FOR_STATE     = (1 << 2),     
01230     QUERY_FOR_DOCS      = (1 << 3),     
01231     QUERY_FOR_CONFIG    = (1 << 4),     
01232     QUERY_FOR_DUMPFILES = (1 << 8)      
01233 } rpmQueryFlags;
01234 
01238 typedef enum rpmVerifyFlags_e {
01239     VERIFY_FILES        = (1 <<  9),    
01240     VERIFY_DEPS         = (1 << 10),    
01241     VERIFY_SCRIPT       = (1 << 11),    
01242     VERIFY_MD5          = (1 << 12)     
01243 } rpmVerifyFlags;
01244 
01248 typedef struct rpmQVArguments {
01249     rpmQVSources qva_source;    
01250     int         qva_sourceCount;
01251     int         qva_flags;      
01252     int         qva_verbose;    
01253     const char *qva_queryFormat;
01254     const char *qva_prefix;     
01255     char        qva_mode;       
01256     char        qva_char;       
01257 } QVA_t;
01258 
01261 extern QVA_t rpmQVArgs;
01262 
01265 extern struct poptOption rpmQVSourcePoptTable[];
01266 
01272 typedef int (*QVF_t) (QVA_t *qva, rpmdb db, Header h);
01273 
01281 int showMatches(QVA_t *qva, /*@only@*/ /*@null@*/ rpmdbMatchIterator mi,
01282         QVF_t showPackage);
01283 
01286 extern int specedit;
01287 
01290 extern struct poptOption rpmQueryPoptTable[];
01291 
01296 void rpmDisplayQueryTags(FILE * f);
01297 
01307 int rpmQueryVerify(QVA_t *qva, rpmQVSources source, const char * arg,
01308         rpmdb db, QVF_t showPackage);
01309 
01318 int showQueryPackage(QVA_t *qva, rpmdb db, Header h);
01319 
01327 int rpmQuery(QVA_t *qva, rpmQVSources source, const char * arg);
01328 
01331 extern struct poptOption rpmVerifyPoptTable[];
01332 
01340 int showVerifyPackage(QVA_t *qva, /*@only@*/ rpmdb db, Header h);
01341 
01349 int rpmVerify(QVA_t *qva, rpmQVSources source, const char *arg);
01350 
01352 /* ==================================================================== */
01355 /* --- install/upgrade/erase modes */
01356 
01360 typedef enum rpmInstallInterfaceFlags_e {
01361     INSTALL_PERCENT     = (1 << 0),     
01362     INSTALL_HASH        = (1 << 1),     
01363     INSTALL_NODEPS      = (1 << 2),     
01364     INSTALL_NOORDER     = (1 << 3),     
01365     INSTALL_LABEL       = (1 << 4),     
01366     INSTALL_UPGRADE     = (1 << 5),     
01367     INSTALL_FRESHEN     = (1 << 6)      
01368 } rpmInstallInterfaceFlags;
01369 
01380 int rpmInstall(const char * rootdir, const char ** argv,
01381                 rpmtransFlags transFlags, 
01382                 rpmInstallInterfaceFlags interfaceFlags,
01383                 rpmprobFilterFlags probFilter,
01384                 rpmRelocation * relocations);
01385 
01394 int rpmInstallSource(const char * prefix, const char * arg,
01395                 /*@out@*/ const char ** specFile, /*@out@*/ char ** cookie);
01396 
01400 typedef enum rpmEraseInterfaceFlags_e {
01401     UNINSTALL_NODEPS    = (1 << 0),     
01402     UNINSTALL_ALLMATCHES= (1 << 1)      
01403 } rpmEraseInterfaceFlags;
01404 
01413 int rpmErase(const char * rootdir, const char ** argv,
01414                 rpmtransFlags transFlags, 
01415                 rpmEraseInterfaceFlags interfaceFlags);
01416 
01418 /* ==================================================================== */
01421 
01425 enum rpmtagSignature {
01426     RPMSIGTAG_SIZE      = 1000, 
01427 /* the md5 sum was broken *twice* on big endian machines */
01428     RPMSIGTAG_LEMD5_1   = 1001, 
01429     RPMSIGTAG_PGP       = 1002, 
01430     RPMSIGTAG_LEMD5_2   = 1003, 
01431     RPMSIGTAG_MD5       = 1004, 
01432     RPMSIGTAG_GPG       = 1005, 
01433     RPMSIGTAG_PGP5      = 1006, 
01435 /* Signature tags by Public Key Algorithm (RFC 2440) */
01436 /* N.B.: These tags are tenative, the values may change */
01437     RPMTAG_PK_BASE      = 512,          
01438     RPMTAG_PK_RSA_ES    = RPMTAG_PK_BASE+1,     
01439     RPMTAG_PK_RSA_E     = RPMTAG_PK_BASE+2,     
01440     RPMTAG_PK_RSA_S     = RPMTAG_PK_BASE+3,     
01441     RPMTAG_PK_ELGAMAL_E = RPMTAG_PK_BASE+16,    
01442     RPMTAG_PK_DSA       = RPMTAG_PK_BASE+17,    
01443     RPMTAG_PK_ELLIPTIC  = RPMTAG_PK_BASE+18,    
01444     RPMTAG_PK_ECDSA     = RPMTAG_PK_BASE+19,    
01445     RPMTAG_PK_ELGAMAL_ES= RPMTAG_PK_BASE+20,    
01446     RPMTAG_PK_DH        = RPMTAG_PK_BASE+21,    
01448     RPMTAG_HASH_BASE    = 512+64,       
01449     RPMTAG_HASH_MD5     = RPMTAG_HASH_BASE+1,   
01450     RPMTAG_HASH_SHA1    = RPMTAG_HASH_BASE+2,   
01451     RPMTAG_HASH_RIPEMD160= RPMTAG_HASH_BASE+3,  
01452     RPMTAG_HASH_MD2     = RPMTAG_HASH_BASE+5,   
01453     RPMTAG_HASH_TIGER192= RPMTAG_HASH_BASE+6,   
01454     RPMTAG_HASH_HAVAL_5_160= RPMTAG_HASH_BASE+7 
01455 };
01456 
01460 typedef enum rpmVerifySignatureReturn_e {
01461     RPMSIG_OK           = 0,    
01462     RPMSIG_UNKNOWN      = 1,    
01463     RPMSIG_BAD          = 2,    
01464     RPMSIG_NOKEY        = 3,    
01465     RPMSIG_NOTTRUSTED = 4       
01466 } rpmVerifySignatureReturn;
01467 
01477 rpmVerifySignatureReturn rpmVerifySignature(const char *file,
01478                 int_32 sigTag, const void * sig, int count, char *result);
01479 
01483 void rpmFreeSignature(Header h);
01484 
01485 /* --- checksig/resign */
01486 
01490 typedef enum rpmCheckSigFlags_e {
01491     CHECKSIG_NONE       = 0,            
01492     CHECKSIG_PGP        = (1 << 0),     
01493     CHECKSIG_MD5        = (1 << 1),     
01494     CHECKSIG_GPG        = (1 << 2)      
01495 } rpmCheckSigFlags;
01496 
01503 int rpmCheckSig(rpmCheckSigFlags flags, const char ** argv);
01504 
01508 typedef enum rpmResignFlags_e {
01509     RESIGN_NEW_SIGNATURE = 0,   
01510     RESIGN_ADD_SIGNATURE        
01511 } rpmResignFlags;
01512 
01520 int rpmReSign(rpmResignFlags add, char *passPhrase, const char ** argv);
01521 
01524 #ifdef __cplusplus
01525 }
01526 #endif
01527 
01528 #endif  /* H_RPMLIB */

Generated at Mon May 21 08:53:40 2001 for rpm by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001