Main Page   Modules   Data Structures   File List   Data Fields   Globals   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 
00022 typedef enum rpmRC_e {
00023     RPMRC_OK            = 0,
00024     RPMRC_BADMAGIC      = 1,
00025     RPMRC_FAIL          = 2,
00026     RPMRC_BADSIZE       = 3,
00027     RPMRC_SHORTREAD     = 4,
00028 } rpmRC;
00029 
00030 #ifdef __cplusplus
00031 extern "C" {
00032 #endif
00033 
00041 rpmRC rpmReadPackageInfo(FD_t fd, /*@out@*/ Header * signatures,
00042         /*@out@*/ Header * hdr)
00043                 /*@modifies fd, *signatures, *hdr @*/;
00044 
00054 rpmRC rpmReadPackageHeader(FD_t fd, /*@out@*/ Header * hdr,
00055         /*@out@*/ int * isSource, /*@out@*/ int * major,
00056         /*@out@*/ int * minor)
00057                 /*@modifies fd, *hdr, *isSource, *major, *minor @*/;
00058 
00067 int headerNVR(Header h, /*@out@*/ const char **np, /*@out@*/ const char **vp,
00068         /*@out@*/ const char **rp) /*@modifies *np, *vp, *rp @*/;
00069 
00075 void headerMergeLegacySigs(Header h, const Header sig)
00076         /*@modifies h @*/;
00077 
00083 Header headerRegenSigHeader(const Header h)     /*@*/;
00084 
00098 void rpmBuildFileList(Header h, /*@out@*/ const char *** fileListPtr, 
00099         /*@out@*/ int * fileCountPtr)
00100                 /*@modifies *fileListPtr, *fileCountPtr @*/;
00101 
00115 int rpmHeaderGetEntry(Header h, int_32 tag, /*@out@*/ int_32 *type,
00116         /*@out@*/ void **p, /*@out@*/ int_32 *c)
00117                 /*@modifies *type, *p, *c @*/;
00118 
00134 int rpmPackageGetEntry(void *leadp, Header sigs, Header h,
00135         int_32 tag, int_32 *type, void **p, int_32 *c)
00136                 /*@modifies *type, *p, *c @*/;
00137 
00141 extern const struct headerTagTableEntry rpmTagTable[];
00142 
00146 extern const int rpmTagTableSize;
00147 
00152 extern const struct headerSprintfExtension rpmHeaderFormats[];
00153 
00157 #define RPMDBI_PACKAGES         0       
00158 #define RPMDBI_DEPENDS          1       
00159 #define RPMDBI_LABEL            2       
00160 #define RPMDBI_ADDED            3       
00161 #define RPMDBI_REMOVED          4       
00162 #define RPMDBI_AVAILABLE        5       
00168 typedef enum rpmTag_e {
00169 
00170     RPMTAG_HEADERIMAGE          = HEADER_IMAGE,         
00171     RPMTAG_HEADERSIGNATURES     = HEADER_SIGNATURES,    
00172     RPMTAG_HEADERIMMUTABLE      = HEADER_IMMUTABLE,     
00173     RPMTAG_HEADERREGIONS        = HEADER_REGIONS,       
00175     RPMTAG_HEADERI18NTABLE      = HEADER_I18NTABLE, 
00177 /* Retrofit (and uniqify) signature tags for use by tagName() and rpmQuery. */
00178 /* the md5 sum was broken *twice* on big endian machines */
00179 /* XXX 2nd underscore prevents tagTable generation */
00180     RPMTAG_SIG_BASE             = HEADER_SIGBASE,
00181     RPMTAG_SIGSIZE              = RPMTAG_SIG_BASE+1,
00182     RPMTAG_SIGLEMD5_1           = RPMTAG_SIG_BASE+2,
00183     RPMTAG_SIGPGP               = RPMTAG_SIG_BASE+3,
00184     RPMTAG_SIGLEMD5_2           = RPMTAG_SIG_BASE+4,
00185     RPMTAG_SIGMD5               = RPMTAG_SIG_BASE+5,
00186     RPMTAG_SIGGPG               = RPMTAG_SIG_BASE+6,
00187     RPMTAG_SIGPGP5              = RPMTAG_SIG_BASE+7,    
00189     RPMTAG_NAME                 = 1000,
00190     RPMTAG_VERSION              = 1001,
00191     RPMTAG_RELEASE              = 1002,
00192     RPMTAG_EPOCH                = 1003,
00193 #define RPMTAG_SERIAL   RPMTAG_EPOCH    /* backward comaptibility */
00194     RPMTAG_SUMMARY              = 1004,
00195     RPMTAG_DESCRIPTION          = 1005,
00196     RPMTAG_BUILDTIME            = 1006,
00197     RPMTAG_BUILDHOST            = 1007,
00198     RPMTAG_INSTALLTIME          = 1008,
00199     RPMTAG_SIZE                 = 1009,
00200     RPMTAG_DISTRIBUTION         = 1010,
00201     RPMTAG_VENDOR               = 1011,
00202     RPMTAG_GIF                  = 1012,
00203     RPMTAG_XPM                  = 1013,
00204     RPMTAG_LICENSE              = 1014,
00205 #define RPMTAG_COPYRIGHT RPMTAG_LICENSE /* backward comaptibility */
00206     RPMTAG_PACKAGER             = 1015,
00207     RPMTAG_GROUP                = 1016,
00208     RPMTAG_CHANGELOG            = 1017, 
00209     RPMTAG_SOURCE               = 1018,
00210     RPMTAG_PATCH                = 1019,
00211     RPMTAG_URL                  = 1020,
00212     RPMTAG_OS                   = 1021,
00213     RPMTAG_ARCH                 = 1022,
00214     RPMTAG_PREIN                = 1023,
00215     RPMTAG_POSTIN               = 1024,
00216     RPMTAG_PREUN                = 1025,
00217     RPMTAG_POSTUN               = 1026,
00218     RPMTAG_OLDFILENAMES         = 1027, /* obsolete */
00219     RPMTAG_FILESIZES            = 1028,
00220     RPMTAG_FILESTATES           = 1029,
00221     RPMTAG_FILEMODES            = 1030,
00222     RPMTAG_FILEUIDS             = 1031, 
00223     RPMTAG_FILEGIDS             = 1032, 
00224     RPMTAG_FILERDEVS            = 1033,
00225     RPMTAG_FILEMTIMES           = 1034,
00226     RPMTAG_FILEMD5S             = 1035,
00227     RPMTAG_FILELINKTOS          = 1036,
00228     RPMTAG_FILEFLAGS            = 1037,
00229     RPMTAG_ROOT                 = 1038, 
00230     RPMTAG_FILEUSERNAME         = 1039,
00231     RPMTAG_FILEGROUPNAME        = 1040,
00232     RPMTAG_EXCLUDE              = 1041, 
00233     RPMTAG_EXCLUSIVE            = 1042, 
00234     RPMTAG_ICON                 = 1043,
00235     RPMTAG_SOURCERPM            = 1044,
00236     RPMTAG_FILEVERIFYFLAGS      = 1045,
00237     RPMTAG_ARCHIVESIZE          = 1046,
00238     RPMTAG_PROVIDENAME          = 1047,
00239 #define RPMTAG_PROVIDES RPMTAG_PROVIDENAME      /* backward comaptibility */
00240     RPMTAG_REQUIREFLAGS         = 1048,
00241     RPMTAG_REQUIRENAME          = 1049,
00242     RPMTAG_REQUIREVERSION       = 1050,
00243     RPMTAG_NOSOURCE             = 1051, 
00244     RPMTAG_NOPATCH              = 1052, 
00245     RPMTAG_CONFLICTFLAGS        = 1053,
00246     RPMTAG_CONFLICTNAME         = 1054,
00247     RPMTAG_CONFLICTVERSION      = 1055,
00248     RPMTAG_DEFAULTPREFIX        = 1056, 
00249     RPMTAG_BUILDROOT            = 1057,
00250     RPMTAG_INSTALLPREFIX        = 1058, 
00251     RPMTAG_EXCLUDEARCH          = 1059,
00252     RPMTAG_EXCLUDEOS            = 1060,
00253     RPMTAG_EXCLUSIVEARCH        = 1061,
00254     RPMTAG_EXCLUSIVEOS          = 1062,
00255     RPMTAG_AUTOREQPROV          = 1063, 
00256     RPMTAG_RPMVERSION           = 1064,
00257     RPMTAG_TRIGGERSCRIPTS       = 1065,
00258     RPMTAG_TRIGGERNAME          = 1066,
00259     RPMTAG_TRIGGERVERSION       = 1067,
00260     RPMTAG_TRIGGERFLAGS         = 1068,
00261     RPMTAG_TRIGGERINDEX         = 1069,
00262     RPMTAG_VERIFYSCRIPT         = 1079,
00263     RPMTAG_CHANGELOGTIME        = 1080,
00264     RPMTAG_CHANGELOGNAME        = 1081,
00265     RPMTAG_CHANGELOGTEXT        = 1082,
00266     RPMTAG_BROKENMD5            = 1083, 
00267     RPMTAG_PREREQ               = 1084, 
00268     RPMTAG_PREINPROG            = 1085,
00269     RPMTAG_POSTINPROG           = 1086,
00270     RPMTAG_PREUNPROG            = 1087,
00271     RPMTAG_POSTUNPROG           = 1088,
00272     RPMTAG_BUILDARCHS           = 1089,
00273     RPMTAG_OBSOLETENAME         = 1090,
00274 #define RPMTAG_OBSOLETES RPMTAG_OBSOLETENAME    /* backward comaptibility */
00275     RPMTAG_VERIFYSCRIPTPROG     = 1091,
00276     RPMTAG_TRIGGERSCRIPTPROG    = 1092,
00277     RPMTAG_DOCDIR               = 1093, 
00278     RPMTAG_COOKIE               = 1094,
00279     RPMTAG_FILEDEVICES          = 1095,
00280     RPMTAG_FILEINODES           = 1096,
00281     RPMTAG_FILELANGS            = 1097,
00282     RPMTAG_PREFIXES             = 1098,
00283     RPMTAG_INSTPREFIXES         = 1099,
00284     RPMTAG_TRIGGERIN            = 1100, 
00285     RPMTAG_TRIGGERUN            = 1101, 
00286     RPMTAG_TRIGGERPOSTUN        = 1102, 
00287     RPMTAG_AUTOREQ              = 1103, 
00288     RPMTAG_AUTOPROV             = 1104, 
00289     RPMTAG_CAPABILITY           = 1105, 
00290     RPMTAG_SOURCEPACKAGE        = 1106, 
00291     RPMTAG_OLDORIGFILENAMES     = 1107, 
00292     RPMTAG_BUILDPREREQ          = 1108, 
00293     RPMTAG_BUILDREQUIRES        = 1109, 
00294     RPMTAG_BUILDCONFLICTS       = 1110, 
00295     RPMTAG_BUILDMACROS          = 1111,
00296     RPMTAG_PROVIDEFLAGS         = 1112,
00297     RPMTAG_PROVIDEVERSION       = 1113,
00298     RPMTAG_OBSOLETEFLAGS        = 1114,
00299     RPMTAG_OBSOLETEVERSION      = 1115,
00300     RPMTAG_DIRINDEXES           = 1116,
00301     RPMTAG_BASENAMES            = 1117,
00302     RPMTAG_DIRNAMES             = 1118,
00303     RPMTAG_ORIGDIRINDEXES       = 1119, 
00304     RPMTAG_ORIGBASENAMES        = 1120, 
00305     RPMTAG_ORIGDIRNAMES         = 1121, 
00306     RPMTAG_OPTFLAGS             = 1122,
00307     RPMTAG_DISTURL              = 1123,
00308     RPMTAG_PAYLOADFORMAT        = 1124,
00309     RPMTAG_PAYLOADCOMPRESSOR    = 1125,
00310     RPMTAG_PAYLOADFLAGS         = 1126,
00311     RPMTAG_MULTILIBS            = 1127,
00312     RPMTAG_INSTALLTID           = 1128,
00313     RPMTAG_REMOVETID            = 1129,
00314     RPMTAG_FIRSTFREE_TAG        
00315 } rpmTag;
00316 
00317 #define RPMTAG_EXTERNAL_TAG             1000000
00318 
00322 typedef enum rpmfileStates_e {
00323     RPMFILE_STATE_NORMAL        = 0,
00324     RPMFILE_STATE_REPLACED      = 1,
00325     RPMFILE_STATE_NOTINSTALLED  = 2,
00326     RPMFILE_STATE_NETSHARED     = 3
00327 } rpmfileStates;
00328 
00332 typedef enum rpmfileAttrs_e {
00333     RPMFILE_CONFIG      = (1 << 0),     
00334     RPMFILE_DOC         = (1 << 1),     
00335     RPMFILE_DONOTUSE    = (1 << 2),     
00336     RPMFILE_MISSINGOK   = (1 << 3),     
00337     RPMFILE_NOREPLACE   = (1 << 4),     
00338     RPMFILE_SPECFILE    = (1 << 5),     
00339     RPMFILE_GHOST       = (1 << 6),     
00340     RPMFILE_LICENSE     = (1 << 7),     
00341     RPMFILE_README      = (1 << 8),     
00342     RPMFILE_EXCLUDE     = (1 << 9)      
00343 } rpmfileAttrs;
00344 #define RPMFILE_MULTILIB_SHIFT          9
00345 #define RPMFILE_MULTILIB(N)             ((N) << RPMFILE_MULTILIB_SHIFT)
00346 #define RPMFILE_MULTILIB_MASK           RPMFILE_MULTILIB(7)
00347 
00348 /* XXX Check file flags for multilib marker. */
00349 #define isFileMULTILIB(_fflags)         ((_fflags) & RPMFILE_MULTILIB_MASK)
00350 
00354 typedef enum rpmsenseFlags_e {
00355     RPMSENSE_ANY        = 0,
00356     RPMSENSE_SERIAL     = (1 << 0),     
00357     RPMSENSE_LESS       = (1 << 1),
00358     RPMSENSE_GREATER    = (1 << 2),
00359     RPMSENSE_EQUAL      = (1 << 3),
00360     RPMSENSE_PROVIDES   = (1 << 4), /* only used internally by builds */
00361     RPMSENSE_CONFLICTS  = (1 << 5), /* only used internally by builds */
00362     RPMSENSE_PREREQ     = (1 << 6),     
00363     RPMSENSE_OBSOLETES  = (1 << 7), /* only used internally by builds */
00364     RPMSENSE_INTERP     = (1 << 8),     
00365     RPMSENSE_SCRIPT_PRE = ((1 << 9)|RPMSENSE_PREREQ), 
00366     RPMSENSE_SCRIPT_POST = ((1 << 10)|RPMSENSE_PREREQ), 
00367     RPMSENSE_SCRIPT_PREUN = ((1 << 11)|RPMSENSE_PREREQ), 
00368     RPMSENSE_SCRIPT_POSTUN = ((1 << 12)|RPMSENSE_PREREQ), 
00369     RPMSENSE_SCRIPT_VERIFY = (1 << 13), 
00370     RPMSENSE_FIND_REQUIRES = (1 << 14), 
00371     RPMSENSE_FIND_PROVIDES = (1 << 15), 
00373     RPMSENSE_TRIGGERIN  = (1 << 16),    
00374     RPMSENSE_TRIGGERUN  = (1 << 17),    
00375     RPMSENSE_TRIGGERPOSTUN = (1 << 18), 
00376     RPMSENSE_MULTILIB   = (1 << 19),
00377     RPMSENSE_SCRIPT_PREP = (1 << 20),   
00378     RPMSENSE_SCRIPT_BUILD = (1 << 21),  
00379     RPMSENSE_SCRIPT_INSTALL = (1 << 22),
00380     RPMSENSE_SCRIPT_CLEAN = (1 << 23),  
00381     RPMSENSE_RPMLIB     = ((1 << 24) | RPMSENSE_PREREQ), 
00382     RPMSENSE_TRIGGERPREIN = (1 << 25)   
00384 } rpmsenseFlags;
00385 
00386 #define RPMSENSE_SENSEMASK      15       /* Mask to get senses, ie serial, */
00387                                          /* less, greater, equal.          */
00388 
00389 #define RPMSENSE_TRIGGER        \
00390         (RPMSENSE_TRIGGERIN | RPMSENSE_TRIGGERUN | RPMSENSE_TRIGGERPOSTUN)
00391 
00392 #define isDependsMULTILIB(_dflags)      ((_dflags) & RPMSENSE_MULTILIB)
00393 
00394 #define _ALL_REQUIRES_MASK      (\
00395     RPMSENSE_INTERP | \
00396     RPMSENSE_SCRIPT_PRE | \
00397     RPMSENSE_SCRIPT_POST | \
00398     RPMSENSE_SCRIPT_PREUN | \
00399     RPMSENSE_SCRIPT_POSTUN | \
00400     RPMSENSE_SCRIPT_VERIFY | \
00401     RPMSENSE_FIND_REQUIRES | \
00402     RPMSENSE_SCRIPT_PREP | \
00403     RPMSENSE_SCRIPT_BUILD | \
00404     RPMSENSE_SCRIPT_INSTALL | \
00405     RPMSENSE_SCRIPT_CLEAN | \
00406     RPMSENSE_RPMLIB )
00407 
00408 #define _notpre(_x)             ((_x) & ~RPMSENSE_PREREQ)
00409 #define _INSTALL_ONLY_MASK \
00410     _notpre(RPMSENSE_SCRIPT_PRE|RPMSENSE_SCRIPT_POST|RPMSENSE_RPMLIB)
00411 #define _ERASE_ONLY_MASK  \
00412     _notpre(RPMSENSE_SCRIPT_PREUN|RPMSENSE_SCRIPT_POSTUN)
00413 
00414 #define isLegacyPreReq(_x)  (((_x) & _ALL_REQUIRES_MASK) == RPMSENSE_PREREQ)
00415 #define isInstallPreReq(_x)     ((_x) & _INSTALL_ONLY_MASK)
00416 #define isErasePreReq(_x)       ((_x) & _ERASE_ONLY_MASK)
00417 
00418 /* ==================================================================== */
00421 
00422 /* Stuff for maintaining "variables" like SOURCEDIR, BUILDDIR, etc */
00423 #define RPMVAR_OPTFLAGS                 3
00424 #define RPMVAR_PROVIDES                 38
00425 #define RPMVAR_INCLUDE                  43
00426 #define RPMVAR_MACROFILES               49
00427 
00428 #define RPMVAR_NUM                      55      /* number of RPMVAR entries */
00429 
00435 const char * rpmGetVar(int var);
00436 
00442 void rpmSetVar(int var, const char *val);
00443 
00449 extern const char * macrofiles;
00450 
00455 enum rpm_machtable_e {
00456     RPM_MACHTABLE_INSTARCH      = 0,    
00457     RPM_MACHTABLE_INSTOS        = 1,    
00458     RPM_MACHTABLE_BUILDARCH     = 2,    
00459     RPM_MACHTABLE_BUILDOS       = 3     
00460 };
00461 #define RPM_MACHTABLE_COUNT     4       
00469 int rpmReadConfigFiles(const char * file, const char * target);
00470 
00476 int rpmReadRC(const char * file);
00477 
00484 void rpmGetArchInfo( /*@out@*/ const char ** name, /*@out@*/ int * num);
00485 
00492 void rpmGetOsInfo( /*@out@*/ const char ** name, /*@out@*/ int * num);
00493 
00507 int rpmMachineScore(int type, const char * name);
00508 
00514 int rpmShowRC(FILE *f);
00515 
00522 void rpmSetTables(int archTable, int osTable);  /* only used by build code */
00523 
00534 void rpmSetMachine(const char * arch, const char * os);
00535 
00544 void rpmGetMachine( /*@out@*/ const char **arch, /*@out@*/ const char **os);
00545 
00550 void rpmFreeRpmrc(void);
00551 
00553 /* ==================================================================== */
00558 typedef /*@abstract@*/ struct rpmdb_s * rpmdb;
00559 
00562 typedef /*@abstract@*/ struct _dbiIndexSet * dbiIndexSet;
00563 
00572 int rpmdbOpen (const char * root, /*@out@*/ rpmdb * dbp, int mode, int perms);
00573 
00580 int rpmdbInit(const char * root, int perms);
00581 
00587 int rpmdbClose ( /*@only@*/ rpmdb rpmdb);
00588 
00594 int rpmdbSync (rpmdb rpmdb);
00595 
00601 int rpmdbOpenAll (rpmdb rpmdb);
00602 
00609 int rpmdbCountPackages(rpmdb db, const char *name);
00610 
00613 typedef /*@abstract@*/ struct _rpmdbMatchIterator * rpmdbMatchIterator;
00614 
00619 void rpmdbFreeIterator( /*@only@*/ rpmdbMatchIterator mi);
00620 
00626 /*@kept@*/ rpmdb rpmdbGetIteratorRpmDB(rpmdbMatchIterator mi)   /*@*/;
00627 
00633 unsigned int rpmdbGetIteratorOffset(rpmdbMatchIterator mi)      /*@*/;
00634 
00640 int rpmdbGetIteratorCount(rpmdbMatchIterator mi)        /*@*/;
00641 
00649 int rpmdbAppendIterator(rpmdbMatchIterator mi, const int * hdrNums,
00650         int nHdrNums)
00651                 /*@modifies mi @*/;
00652 
00661 int rpmdbPruneIterator(rpmdbMatchIterator mi, int * hdrNums,
00662         int nHdrNums, int sorted)
00663                 /*@modifies mi @*/;
00664 
00671 void rpmdbSetIteratorVersion(rpmdbMatchIterator mi, const char * version)
00672                 /*@modifies mi @*/;
00673 
00680 void rpmdbSetIteratorRelease(rpmdbMatchIterator mi, const char * release)
00681                 /*@modifies mi @*/;
00682 
00689 int rpmdbSetIteratorModified(rpmdbMatchIterator mi, int modified)
00690                 /*@modifies mi @*/;
00691 
00697 Header rpmdbNextIterator(rpmdbMatchIterator mi)
00698                 /*@modifies mi @*/;
00699 #define rpmdbNextIterator(_a) \
00700         XrpmdbNextIterator(_a, __FILE__, __LINE__)
00701 Header XrpmdbNextIterator(rpmdbMatchIterator mi, const char * f, unsigned int l)
00702                 /*@modifies mi @*/;
00703 
00712 /*@only@*/ /*@null@*/ rpmdbMatchIterator rpmdbInitIterator(
00713                         /*@kept@*/ rpmdb rpmdb, int rpmtag,
00714                         const void * key, size_t keylen);
00715 
00723 int rpmdbAdd(rpmdb rpmdb, int iid, Header h)
00724         /*@modifies h @*/;
00725 
00733 int rpmdbRemove(rpmdb db, int rid, unsigned int offset);
00734 
00739 int rpmdbRebuild(const char * root);
00740 
00742 /* ==================================================================== */
00745 
00749 typedef enum rpmProblemType_e {
00750     RPMPROB_BADARCH,    
00751     RPMPROB_BADOS,      
00752     RPMPROB_PKG_INSTALLED, 
00753     RPMPROB_BADRELOCATE,
00754     RPMPROB_REQUIRES,   
00755     RPMPROB_CONFLICT,   
00756     RPMPROB_NEW_FILE_CONFLICT, 
00757     RPMPROB_FILE_CONFLICT,
00758     RPMPROB_OLDPACKAGE, 
00759     RPMPROB_DISKSPACE,  
00760     RPMPROB_DISKNODES,  
00761     RPMPROB_BADPRETRANS 
00762  } rpmProblemType;
00763 
00766 typedef /*@abstract@*/ struct rpmProblem_s {
00767 /*@only@*/ /*@null@*/ const char * pkgNEVR;
00768 /*@only@*/ /*@null@*/ const char * altNEVR;
00769 /*@kept@*/ const void * key;
00770     Header h;
00771     rpmProblemType type;
00772     int ignoreProblem;
00773 /*@only@*/ const char * str1;
00774     unsigned long ulong1;
00775 } * rpmProblem;
00776 
00779 typedef /*@abstract@*/ struct rpmProblemSet_s {
00780     int numProblems;            
00781     int numProblemsAlloced;     
00782     rpmProblem probs;           
00783 } * rpmProblemSet;
00784 
00787 void printDepFlags(FILE *fp, const char *version, int flags)
00788         /*@modifies *fp @*/;
00789 
00792 struct rpmDependencyConflict {
00793     const char * byName;
00794     const char * byVersion;
00795     const char * byRelease;
00796     Header byHeader;
00797     /* these needs fields are misnamed -- they are used for the package
00798        which isn't needed as well */
00799     const char * needsName;
00800     const char * needsVersion;
00801     int needsFlags;
00802 /*@observer@*/ /*@null@*/ const void * suggestedPackage; /* NULL if none */
00803     enum {
00804         RPMDEP_SENSE_REQUIRES,          
00805         RPMDEP_SENSE_CONFLICTS          
00806     } sense;
00807 } ;
00808 
00811 void printDepProblems(FILE *fp, struct rpmDependencyConflict *conflicts,
00812         int numConflicts)       /*@modifies *fp @*/;
00813 
00820 /*@only@*/ const char * rpmProblemString(rpmProblem prob) /*@modifies prob @*/;
00821 
00828 void rpmProblemPrint(FILE *fp, rpmProblem prob) /*@modifies *fp, prob @*/;
00829 
00835 void rpmProblemSetPrint(FILE *fp, rpmProblemSet probs)
00836                 /*@modifies *fp, probs @*/;
00837 
00842 void rpmProblemSetFree( /*@only@*/ rpmProblemSet probs);
00843 
00845 /* ==================================================================== */
00851 typedef /*@null@*/
00852     void * (*HFD_t) (/*@only@*/ /*@null@*/ const void * data, rpmTagType type);
00853 
00857 typedef int (*HGE_t) (Header h, int_32 tag, /*@out@*/ int_32 * type,
00858                         /*@out@*/ void ** p, /*@out@*/int_32 * c)
00859                                 /*@modifies *type, *p, *c @*/;
00860 
00861 /* we pass these around as an array with a sentinel */
00862 typedef struct rpmRelocation_s {
00863     const char * oldPath;       
00864     const char * newPath;       
00865 } rpmRelocation;
00866 
00877 rpmRC rpmInstallSourcePackage(const char * root, FD_t fd,
00878                         /*@out@*/ const char ** specFile,
00879                         rpmCallbackFunction notify, rpmCallbackData notifyData,
00880                         /*@out@*/ char ** cookie)
00881         /*@modifies *specFile, *cookie @*/;
00882 
00889 int rpmVersionCompare(Header first, Header second);
00890 
00894 typedef enum fileAction_e {
00895     FA_UNKNOWN = 0,     
00896     FA_CREATE,          
00897     FA_COPYIN,          
00898     FA_COPYOUT,         
00899     FA_BACKUP,          
00900     FA_SAVE,            
00901     FA_SKIP,            
00902     FA_ALTNAME,         
00903     FA_ERASE,           
00904     FA_SKIPNSTATE,      
00905     FA_SKIPNETSHARED,   
00906     FA_SKIPMULTILIB,    
00907 } fileAction;
00908 
00909 #define XFA_SKIPPING(_a)        \
00910     ((_a) == FA_SKIP || (_a) == FA_SKIPNSTATE || (_a) == FA_SKIPNETSHARED || (_a) == FA_SKIPMULTILIB)
00911 
00919 typedef enum fileTypes_e {
00920     PIPE        =  1,   
00921     CDEV        =  2,   
00922     XDIR        =  4,   
00923     BDEV        =  6,   
00924     REG         =  8,   
00925     LINK        = 10,   
00926     SOCK        = 12,   
00927 } fileTypes;
00928 
00932 typedef /*@abstract@*/ struct fsmIterator_s * FSMI_t;
00933 
00937 typedef /*@abstract@*/ struct fsm_s * FSM_t;
00938 
00942 typedef /*@abstract@*/ struct psm_s * PSM_t;
00943 
00946 typedef /*@abstract@*/ struct transactionFileInfo_s * TFI_t;
00947 
00954 typedef /*@abstract@*/ struct rpmTransactionSet_s * rpmTransactionSet;
00955 
00962 /*@only@*/ rpmTransactionSet rpmtransCreateSet(rpmdb rpmdb,
00963         const char * rootdir);
00964 
00981 int rpmtransAddPackage(rpmTransactionSet ts, Header h, FD_t fd,
00982                 /*@owned@*/ const void * key, int update,
00983                 rpmRelocation * relocs);
00984 
00991 void rpmtransAvailablePackage(rpmTransactionSet ts, Header h,
00992                 /*@owned@*/ const void * key);
00993 
00999 void rpmtransRemovePackage(rpmTransactionSet ts, int dboffset);
01000 
01005 void rpmtransFree( /*@only@*/ rpmTransactionSet ts);
01006 
01012 void rpmtransSetScriptFd(rpmTransactionSet ts, FD_t fd)
01013         /*@modifies ts, fd @*/;
01014 
01023 int rpmtransGetKeys(const rpmTransactionSet ts,
01024         /*@out@*/ const void *** ep, /*@out@*/ int * nep)
01025                 /*@modifies ep, nep @*/;
01026 
01034 int rpmdepCheck(rpmTransactionSet ts,
01035         /*@exposed@*/ /*@out@*/ struct rpmDependencyConflict ** conflicts,
01036         /*@exposed@*/ /*@out@*/ int * numConflicts);
01037 
01057 int rpmdepOrder(rpmTransactionSet ts)   /*@modifies ts @*/;
01058 
01064 void rpmdepFreeConflicts( /*@only@*/ struct rpmDependencyConflict * conflicts,
01065         int numConflicts);
01066 
01070 typedef enum rpmtransFlags_e {
01071     RPMTRANS_FLAG_NONE          = 0,
01072     RPMTRANS_FLAG_TEST          = (1 <<  0),    
01073     RPMTRANS_FLAG_BUILD_PROBS   = (1 <<  1),    
01074     RPMTRANS_FLAG_NOSCRIPTS     = (1 <<  2),    
01075     RPMTRANS_FLAG_JUSTDB        = (1 <<  3),    
01076     RPMTRANS_FLAG_NOTRIGGERS    = (1 <<  4),    
01077     RPMTRANS_FLAG_NODOCS        = (1 <<  5),    
01078     RPMTRANS_FLAG_ALLFILES      = (1 <<  6),    
01079     RPMTRANS_FLAG_KEEPOBSOLETE  = (1 <<  7),    
01080     RPMTRANS_FLAG_MULTILIB      = (1 <<  8),    
01081     RPMTRANS_FLAG_DIRSTASH      = (1 <<  9),    
01082     RPMTRANS_FLAG_REPACKAGE     = (1 << 10),    
01084     RPMTRANS_FLAG_PKGCOMMIT     = (1 << 11),
01085     RPMTRANS_FLAG_PKGUNDO       = (1 << 12),
01086     RPMTRANS_FLAG_COMMIT        = (1 << 13),
01087     RPMTRANS_FLAG_UNDO          = (1 << 14),
01088     RPMTRANS_FLAG_REVERSE       = (1 << 15),
01089 
01090     RPMTRANS_FLAG_NOTRIGGERPREIN= (1 << 16),
01091     RPMTRANS_FLAG_NOPRE         = (1 << 17),
01092     RPMTRANS_FLAG_NOPOST        = (1 << 18),
01093     RPMTRANS_FLAG_NOTRIGGERIN   = (1 << 19),
01094     RPMTRANS_FLAG_NOTRIGGERUN   = (1 << 20),
01095     RPMTRANS_FLAG_NOPREUN       = (1 << 21),
01096     RPMTRANS_FLAG_NOPOSTUN      = (1 << 22),
01097     RPMTRANS_FLAG_NOTRIGGERPOSTUN = (1 << 23),
01098     RPMTRANS_FLAG_NOPAYLOAD     = (1 << 24),
01099     RPMTRANS_FLAG_APPLYONLY     = (1 << 25),
01100 
01101     RPMTRANS_FLAG_CHAINSAW      = (1 << 26),
01102 } rpmtransFlags;
01103 
01104 #define _noTransScripts         \
01105   ( RPMTRANS_FLAG_NOPRE |       \
01106     RPMTRANS_FLAG_NOPOST |      \
01107     RPMTRANS_FLAG_NOPREUN |     \
01108     RPMTRANS_FLAG_NOPOSTUN      \
01109   )
01110 
01111 #define _noTransTriggers        \
01112   ( RPMTRANS_FLAG_NOTRIGGERPREIN | \
01113     RPMTRANS_FLAG_NOTRIGGERIN | \
01114     RPMTRANS_FLAG_NOTRIGGERUN | \
01115     RPMTRANS_FLAG_NOTRIGGERPOSTUN \
01116   )
01117 
01125 int rpmGetRpmlibProvides(/*@out@*/ const char *** provNames,
01126         /*@out@*/ int ** provFlags, /*@out@*/ const char *** provVersions)
01127                 /*@ modifies *provNames, *provFlags, *provVersions @*/;
01128 
01139 int rpmRangesOverlap(const char *AName, const char *AEVR, int AFlags,
01140         const char *BName, const char *BEVR, int BFlags)        /*@*/;
01141 
01149 int rpmCheckRpmlibProvides(const char * keyName, const char * keyEVR,
01150         int keyFlags)   /*@*/;
01151 
01156 void rpmShowRpmlibProvides(FILE * fp) /*@modifies *fp @*/;
01157 
01161 typedef enum rpmprobFilterFlags_e {
01162     RPMPROB_FILTER_NONE         = 0,
01163     RPMPROB_FILTER_IGNOREOS     = (1 << 0),     
01164     RPMPROB_FILTER_IGNOREARCH   = (1 << 1),     
01165     RPMPROB_FILTER_REPLACEPKG   = (1 << 2),     
01166     RPMPROB_FILTER_FORCERELOCATE= (1 << 3),     
01167     RPMPROB_FILTER_REPLACENEWFILES= (1 << 4),   
01168     RPMPROB_FILTER_REPLACEOLDFILES= (1 << 5),   
01169     RPMPROB_FILTER_OLDPACKAGE   = (1 << 6),     
01170     RPMPROB_FILTER_DISKSPACE    = (1 << 7),     
01171     RPMPROB_FILTER_DISKNODES    = (1 << 8)      
01172 } rpmprobFilterFlags;
01173 
01185 int rpmRunTransactions(rpmTransactionSet ts,
01186                         rpmCallbackFunction notify,
01187                         /*@owned@*/ rpmCallbackData notifyData,
01188                         rpmProblemSet okProbs,
01189                         /*@out@*/ rpmProblemSet * newProbs,
01190                         rpmtransFlags transFlags,
01191                         rpmprobFilterFlags ignoreSet);
01192 
01200 /*@observer@*/ const char *const tagName(int tag)       /*@*/;
01201 
01207 int tagValue(const char *tagstr)                        /*@*/;
01208 
01209 #define RPMLEAD_BINARY 0
01210 #define RPMLEAD_SOURCE 1
01211 
01212 #define RPMLEAD_MAGIC0 0xed
01213 #define RPMLEAD_MAGIC1 0xab
01214 #define RPMLEAD_MAGIC2 0xee
01215 #define RPMLEAD_MAGIC3 0xdb
01216 
01217 #define RPMLEAD_SIZE 96         
01225 struct rpmlead {
01226     unsigned char magic[4];
01227     unsigned char major, minor;
01228     short type;
01229     short archnum;
01230     char name[66];
01231     short osnum;
01232     short signature_type;       
01233     char reserved[16];          
01234 } ;
01235 
01239 void freeFilesystems(void);
01240 
01247 int rpmGetFilesystemList( /*@out@*/ const char *** listptr, /*@out@*/ int * num)
01248         /*@modifies *listptr, *num @*/;
01249 
01259 int rpmGetFilesystemUsage(const char ** filelist, int_32 * fssizes,
01260         int numFiles, /*@out@*/ uint_32 ** usagesPtr, int flags);
01261 
01262 /* ==================================================================== */
01265 
01269 struct rpmBuildArguments {
01270     int buildAmount;            
01271     const char *buildRootOverride; 
01272     char *targets;              
01273     int force;                  
01274     int noBuild;                
01275     int noDeps;                 
01276     int noLang;                 
01277     int shortCircuit;           
01278     int sign;                   
01279     int useCatalog;             
01280     char buildMode;             
01281     char buildChar;             
01282 /*@dependent@*/ const char *rootdir;
01283 };
01286 typedef struct rpmBuildArguments BTA_t;
01287 
01290 extern struct rpmBuildArguments         rpmBTArgs;
01291 
01294 extern struct poptOption                rpmBuildPoptTable[];
01295 
01297 /* ==================================================================== */
01300 
01304 typedef enum rpmVerifyAttrs_e {
01305     RPMVERIFY_NONE      = 0,            
01306     RPMVERIFY_MD5       = (1 << 0),     
01307     RPMVERIFY_FILESIZE  = (1 << 1),     
01308     RPMVERIFY_LINKTO    = (1 << 2),     
01309     RPMVERIFY_USER      = (1 << 3),     
01310     RPMVERIFY_GROUP     = (1 << 4),     
01311     RPMVERIFY_MTIME     = (1 << 5),     
01312     RPMVERIFY_MODE      = (1 << 6),     
01313     RPMVERIFY_RDEV      = (1 << 7),     
01314     RPMVERIFY_READLINKFAIL= (1 << 28),  
01315     RPMVERIFY_READFAIL  = (1 << 29),    
01316     RPMVERIFY_LSTATFAIL = (1 << 30)     
01317 } rpmVerifyAttrs;
01318 #define RPMVERIFY_ALL           ~(RPMVERIFY_NONE)
01319 
01331 int rpmVerifyFile(const char * root, Header h, int filenum,
01332         /*@out@*/ int * result, int omitMask);
01333 
01342 int rpmVerifyScript(const char * rootDir, Header h, FD_t scriptFd);
01343 
01347 typedef enum rpmQVSources_e {
01348     RPMQV_PACKAGE = 0,  
01349     RPMQV_PATH,         
01350     RPMQV_ALL,          
01351     RPMQV_RPM,          
01352     RPMQV_GROUP,        
01353     RPMQV_WHATPROVIDES, 
01354     RPMQV_WHATREQUIRES, 
01355     RPMQV_TRIGGEREDBY,  
01356     RPMQV_DBOFFSET,     
01357     RPMQV_SPECFILE      
01358 } rpmQVSources;
01359 
01363 typedef enum rpmQueryFlags_e {
01364     QUERY_FOR_LIST      = (1 << 1),     
01365     QUERY_FOR_STATE     = (1 << 2),     
01366     QUERY_FOR_DOCS      = (1 << 3),     
01367     QUERY_FOR_CONFIG    = (1 << 4),     
01368     QUERY_FOR_DUMPFILES = (1 << 8)      
01369 } rpmQueryFlags;
01370 
01374 typedef enum rpmVerifyFlags_e {
01375     VERIFY_FILES        = (1 <<  9),    
01376     VERIFY_DEPS         = (1 << 10),    
01377     VERIFY_SCRIPT       = (1 << 11),    
01378     VERIFY_MD5          = (1 << 12)     
01379 } rpmVerifyFlags;
01380 
01384 typedef struct rpmQVArguments {
01385     rpmQVSources qva_source;    
01386     int         qva_sourceCount;
01387     int         qva_flags;      
01388     int         qva_verbose;    
01389     const char *qva_queryFormat;
01390     const char *qva_prefix;     
01391     char        qva_mode;       
01392     char        qva_char;       
01393 } QVA_t;
01394 
01397 extern QVA_t rpmQVArgs;
01398 
01401 extern struct poptOption rpmQVSourcePoptTable[];
01402 
01408 typedef int (*QVF_t) (QVA_t *qva, rpmdb db, Header h);
01409 
01417 int showMatches(QVA_t *qva, /*@only@*/ /*@null@*/ rpmdbMatchIterator mi,
01418         QVF_t showPackage);
01419 
01422 extern int specedit;
01423 
01426 extern struct poptOption rpmQueryPoptTable[];
01427 
01432 void rpmDisplayQueryTags(FILE * f);
01433 
01443 int rpmQueryVerify(QVA_t *qva, rpmQVSources source, const char * arg,
01444         rpmdb db, QVF_t showPackage);
01445 
01454 int showQueryPackage(QVA_t *qva, rpmdb db, Header h);
01455 
01463 int rpmQuery(QVA_t *qva, rpmQVSources source, const char * arg);
01464 
01467 extern struct poptOption rpmVerifyPoptTable[];
01468 
01476 int showVerifyPackage(QVA_t *qva, /*@only@*/ rpmdb db, Header h);
01477 
01485 int rpmVerify(QVA_t *qva, rpmQVSources source, const char *arg);
01486 
01488 /* ==================================================================== */
01491 /* --- install/upgrade/erase modes */
01492 
01496 typedef enum rpmInstallInterfaceFlags_e {
01497     INSTALL_NONE        = 0,
01498     INSTALL_PERCENT     = (1 << 0),     
01499     INSTALL_HASH        = (1 << 1),     
01500     INSTALL_NODEPS      = (1 << 2),     
01501     INSTALL_NOORDER     = (1 << 3),     
01502     INSTALL_LABEL       = (1 << 4),     
01503     INSTALL_UPGRADE     = (1 << 5),     
01504     INSTALL_FRESHEN     = (1 << 6)      
01505 } rpmInstallInterfaceFlags;
01506 
01517 int rpmInstall(const char * rootdir, const char ** argv,
01518                 rpmtransFlags transFlags, 
01519                 rpmInstallInterfaceFlags interfaceFlags,
01520                 rpmprobFilterFlags probFilter,
01521                 rpmRelocation * relocations);
01522 
01531 int rpmInstallSource(const char * prefix, const char * arg,
01532                 /*@out@*/ const char ** specFile, /*@out@*/ char ** cookie);
01533 
01537 typedef enum rpmEraseInterfaceFlags_e {
01538     UNINSTALL_NONE      = 0,
01539     UNINSTALL_NODEPS    = (1 << 0),     
01540     UNINSTALL_ALLMATCHES= (1 << 1)      
01541 } rpmEraseInterfaceFlags;
01542 
01551 int rpmErase(const char * rootdir, const char ** argv,
01552                 rpmtransFlags transFlags, 
01553                 rpmEraseInterfaceFlags interfaceFlags);
01554 
01556 /* ==================================================================== */
01559 
01563 enum rpmtagSignature {
01564     RPMSIGTAG_SIZE      = 1000, 
01565 /* the md5 sum was broken *twice* on big endian machines */
01566     RPMSIGTAG_LEMD5_1   = 1001, 
01567     RPMSIGTAG_PGP       = 1002, 
01568     RPMSIGTAG_LEMD5_2   = 1003, 
01569     RPMSIGTAG_MD5       = 1004, 
01570     RPMSIGTAG_GPG       = 1005, 
01571     RPMSIGTAG_PGP5      = 1006, 
01573 /* Signature tags by Public Key Algorithm (RFC 2440) */
01574 /* N.B.: These tags are tenative, the values may change */
01575     RPMTAG_PK_BASE      = 512,          
01576     RPMTAG_PK_RSA_ES    = RPMTAG_PK_BASE+1,     
01577     RPMTAG_PK_RSA_E     = RPMTAG_PK_BASE+2,     
01578     RPMTAG_PK_RSA_S     = RPMTAG_PK_BASE+3,     
01579     RPMTAG_PK_ELGAMAL_E = RPMTAG_PK_BASE+16,    
01580     RPMTAG_PK_DSA       = RPMTAG_PK_BASE+17,    
01581     RPMTAG_PK_ELLIPTIC  = RPMTAG_PK_BASE+18,    
01582     RPMTAG_PK_ECDSA     = RPMTAG_PK_BASE+19,    
01583     RPMTAG_PK_ELGAMAL_ES= RPMTAG_PK_BASE+20,    
01584     RPMTAG_PK_DH        = RPMTAG_PK_BASE+21,    
01586     RPMTAG_HASH_BASE    = 512+64,       
01587     RPMTAG_HASH_MD5     = RPMTAG_HASH_BASE+1,   
01588     RPMTAG_HASH_SHA1    = RPMTAG_HASH_BASE+2,   
01589     RPMTAG_HASH_RIPEMD160= RPMTAG_HASH_BASE+3,  
01590     RPMTAG_HASH_MD2     = RPMTAG_HASH_BASE+5,   
01591     RPMTAG_HASH_TIGER192= RPMTAG_HASH_BASE+6,   
01592     RPMTAG_HASH_HAVAL_5_160= RPMTAG_HASH_BASE+7 
01593 };
01594 
01598 typedef enum rpmVerifySignatureReturn_e {
01599     RPMSIG_OK           = 0,    
01600     RPMSIG_UNKNOWN      = 1,    
01601     RPMSIG_BAD          = 2,    
01602     RPMSIG_NOKEY        = 3,    
01603     RPMSIG_NOTTRUSTED   = 4     
01604 } rpmVerifySignatureReturn;
01605 
01615 rpmVerifySignatureReturn rpmVerifySignature(const char *file,
01616                 int_32 sigTag, const void * sig, int count, char *result);
01617 
01621 void rpmFreeSignature(Header h);
01622 
01623 /* --- checksig/resign */
01624 
01628 typedef enum rpmCheckSigFlags_e {
01629     CHECKSIG_NONE       = 0,            
01630     CHECKSIG_PGP        = (1 << 0),     
01631     CHECKSIG_MD5        = (1 << 1),     
01632     CHECKSIG_GPG        = (1 << 2)      
01633 } rpmCheckSigFlags;
01634 
01641 int rpmCheckSig(rpmCheckSigFlags flags, const char ** argv);
01642 
01646 typedef enum rpmResignFlags_e {
01647     RESIGN_NEW_SIGNATURE = 0,   
01648     RESIGN_ADD_SIGNATURE        
01649 } rpmResignFlags;
01650 
01658 int rpmReSign(rpmResignFlags add, char *passPhrase, const char ** argv);
01659 
01662 #ifdef __cplusplus
01663 }
01664 #endif
01665 
01666 #endif  /* H_RPMLIB */

Generated at Thu Apr 19 15:29:43 2001 for rpm by doxygen1.2.6-20010408 written by Dimitri van Heesch, © 1997-2001