00001 #ifndef H_RPMLIB
00002 #define H_RPMLIB
00003
00008 #include "rpmio.h"
00009 #include "rpmmessages.h"
00010 #include "rpmerr.h"
00011 #include "header.h"
00012 #include "popt.h"
00013
00017 typedef enum rpmRC_e {
00018 RPMRC_OK = 0,
00019 RPMRC_BADMAGIC = 1,
00020 RPMRC_FAIL = 2,
00021 RPMRC_BADSIZE = 3,
00022 RPMRC_SHORTREAD = 4
00023 } rpmRC;
00024
00025
00026
00027 extern struct MacroContext_s * rpmGlobalMacroContext;
00028
00029
00030 extern struct MacroContext_s * rpmCLIMacroContext;
00031
00032
00033 extern const char * RPMVERSION;
00034
00035
00036 extern const char * rpmNAME;
00037
00038
00039 extern const char * rpmEVR;
00040
00041
00042 extern int rpmFLAGS;
00043
00044
00045 #ifdef __cplusplus
00046 extern "C" {
00047 #endif
00048
00054 static inline
00055 void * _free( const void * p)
00056
00057 {
00058 if (p != NULL) free((void *)p);
00059 return NULL;
00060 }
00061
00071 rpmRC rpmReadPackageInfo(FD_t fd, Header * sigp,
00072 Header * hdrp)
00073
00074 ;
00075
00085 rpmRC rpmReadPackageHeader(FD_t fd, Header * hdrp,
00086 int * isSource,
00087 int * major,
00088 int * minor)
00089
00090 ;
00091
00100 int headerNVR(Header h,
00101 const char ** np,
00102 const char ** vp,
00103 const char ** rp)
00104 ;
00105
00111 void headerMergeLegacySigs(Header h, const Header sig)
00112 ;
00113
00119 Header headerRegenSigHeader(const Header h)
00120 ;
00121
00135 void rpmBuildFileList(Header h, const char *** fileListPtr,
00136 int * fileCountPtr)
00137 ;
00138
00152 int rpmHeaderGetEntry(Header h, int_32 tag, int_32 *type,
00153 void **p, int_32 *c)
00154 ;
00155
00171
00172 int rpmPackageGetEntry(void *leadp, Header sigs, Header h,
00173 int_32 tag, int_32 *type, void **p, int_32 *c)
00174 ;
00175
00179
00180
00181 extern const struct headerTagTableEntry_s rpmTagTable[];
00182
00183
00187
00188
00189 extern const int rpmTagTableSize;
00190
00191
00196
00197
00198 extern const struct headerSprintfExtension_s rpmHeaderFormats[];
00199
00200
00204 #define RPMDBI_PACKAGES 0
00205 #define RPMDBI_DEPENDS 1
00206 #define RPMDBI_LABEL 2
00207 #define RPMDBI_ADDED 3
00208 #define RPMDBI_REMOVED 4
00209 #define RPMDBI_AVAILABLE 5
00215 typedef enum rpmTag_e {
00216
00217 RPMTAG_HEADERIMAGE = HEADER_IMAGE,
00218 RPMTAG_HEADERSIGNATURES = HEADER_SIGNATURES,
00219 RPMTAG_HEADERIMMUTABLE = HEADER_IMMUTABLE,
00220
00221 RPMTAG_HEADERREGIONS = HEADER_REGIONS,
00223 RPMTAG_HEADERI18NTABLE = HEADER_I18NTABLE,
00224
00225
00226
00227
00228
00229 RPMTAG_SIG_BASE = HEADER_SIGBASE,
00230 RPMTAG_SIGSIZE = RPMTAG_SIG_BASE+1,
00231 RPMTAG_SIGLEMD5_1 = RPMTAG_SIG_BASE+2,
00232 RPMTAG_SIGPGP = RPMTAG_SIG_BASE+3,
00233 RPMTAG_SIGLEMD5_2 = RPMTAG_SIG_BASE+4,
00234 RPMTAG_SIGMD5 = RPMTAG_SIG_BASE+5,
00235 RPMTAG_SIGGPG = RPMTAG_SIG_BASE+6,
00236 RPMTAG_SIGPGP5 = RPMTAG_SIG_BASE+7,
00238
00239 RPMTAG_BADSHA1HEADER = RPMTAG_SIG_BASE+8,
00240
00241 RPMTAG_SHA1HEADER = RPMTAG_SIG_BASE+9,
00242
00243 RPMTAG_NAME = 1000,
00244 RPMTAG_VERSION = 1001,
00245 RPMTAG_RELEASE = 1002,
00246 RPMTAG_EPOCH = 1003,
00247 #define RPMTAG_SERIAL RPMTAG_EPOCH
00248 RPMTAG_SUMMARY = 1004,
00249 RPMTAG_DESCRIPTION = 1005,
00250 RPMTAG_BUILDTIME = 1006,
00251 RPMTAG_BUILDHOST = 1007,
00252 RPMTAG_INSTALLTIME = 1008,
00253 RPMTAG_SIZE = 1009,
00254 RPMTAG_DISTRIBUTION = 1010,
00255 RPMTAG_VENDOR = 1011,
00256 RPMTAG_GIF = 1012,
00257 RPMTAG_XPM = 1013,
00258 RPMTAG_LICENSE = 1014,
00259 #define RPMTAG_COPYRIGHT RPMTAG_LICENSE
00260 RPMTAG_PACKAGER = 1015,
00261 RPMTAG_GROUP = 1016,
00262
00263 RPMTAG_CHANGELOG = 1017,
00264
00265 RPMTAG_SOURCE = 1018,
00266 RPMTAG_PATCH = 1019,
00267 RPMTAG_URL = 1020,
00268 RPMTAG_OS = 1021,
00269 RPMTAG_ARCH = 1022,
00270 RPMTAG_PREIN = 1023,
00271 RPMTAG_POSTIN = 1024,
00272 RPMTAG_PREUN = 1025,
00273 RPMTAG_POSTUN = 1026,
00274 RPMTAG_OLDFILENAMES = 1027,
00275 RPMTAG_FILESIZES = 1028,
00276 RPMTAG_FILESTATES = 1029,
00277 RPMTAG_FILEMODES = 1030,
00278 RPMTAG_FILEUIDS = 1031,
00279 RPMTAG_FILEGIDS = 1032,
00280 RPMTAG_FILERDEVS = 1033,
00281 RPMTAG_FILEMTIMES = 1034,
00282 RPMTAG_FILEMD5S = 1035,
00283 RPMTAG_FILELINKTOS = 1036,
00284 RPMTAG_FILEFLAGS = 1037,
00285
00286 RPMTAG_ROOT = 1038,
00287
00288 RPMTAG_FILEUSERNAME = 1039,
00289 RPMTAG_FILEGROUPNAME = 1040,
00290
00291 RPMTAG_EXCLUDE = 1041,
00292 RPMTAG_EXCLUSIVE = 1042,
00293
00294 RPMTAG_ICON = 1043,
00295 RPMTAG_SOURCERPM = 1044,
00296 RPMTAG_FILEVERIFYFLAGS = 1045,
00297 RPMTAG_ARCHIVESIZE = 1046,
00298 RPMTAG_PROVIDENAME = 1047,
00299 #define RPMTAG_PROVIDES RPMTAG_PROVIDENAME
00300 RPMTAG_REQUIREFLAGS = 1048,
00301 RPMTAG_REQUIRENAME = 1049,
00302 RPMTAG_REQUIREVERSION = 1050,
00303 RPMTAG_NOSOURCE = 1051,
00304 RPMTAG_NOPATCH = 1052,
00305 RPMTAG_CONFLICTFLAGS = 1053,
00306 RPMTAG_CONFLICTNAME = 1054,
00307 RPMTAG_CONFLICTVERSION = 1055,
00308 RPMTAG_DEFAULTPREFIX = 1056,
00309 RPMTAG_BUILDROOT = 1057,
00310 RPMTAG_INSTALLPREFIX = 1058,
00311 RPMTAG_EXCLUDEARCH = 1059,
00312 RPMTAG_EXCLUDEOS = 1060,
00313 RPMTAG_EXCLUSIVEARCH = 1061,
00314 RPMTAG_EXCLUSIVEOS = 1062,
00315 RPMTAG_AUTOREQPROV = 1063,
00316 RPMTAG_RPMVERSION = 1064,
00317 RPMTAG_TRIGGERSCRIPTS = 1065,
00318 RPMTAG_TRIGGERNAME = 1066,
00319 RPMTAG_TRIGGERVERSION = 1067,
00320 RPMTAG_TRIGGERFLAGS = 1068,
00321 RPMTAG_TRIGGERINDEX = 1069,
00322 RPMTAG_VERIFYSCRIPT = 1079,
00323 RPMTAG_CHANGELOGTIME = 1080,
00324 RPMTAG_CHANGELOGNAME = 1081,
00325 RPMTAG_CHANGELOGTEXT = 1082,
00326
00327 RPMTAG_BROKENMD5 = 1083,
00328
00329 RPMTAG_PREREQ = 1084,
00330 RPMTAG_PREINPROG = 1085,
00331 RPMTAG_POSTINPROG = 1086,
00332 RPMTAG_PREUNPROG = 1087,
00333 RPMTAG_POSTUNPROG = 1088,
00334 RPMTAG_BUILDARCHS = 1089,
00335 RPMTAG_OBSOLETENAME = 1090,
00336 #define RPMTAG_OBSOLETES RPMTAG_OBSOLETENAME
00337 RPMTAG_VERIFYSCRIPTPROG = 1091,
00338 RPMTAG_TRIGGERSCRIPTPROG = 1092,
00339 RPMTAG_DOCDIR = 1093,
00340 RPMTAG_COOKIE = 1094,
00341 RPMTAG_FILEDEVICES = 1095,
00342 RPMTAG_FILEINODES = 1096,
00343 RPMTAG_FILELANGS = 1097,
00344 RPMTAG_PREFIXES = 1098,
00345 RPMTAG_INSTPREFIXES = 1099,
00346 RPMTAG_TRIGGERIN = 1100,
00347 RPMTAG_TRIGGERUN = 1101,
00348 RPMTAG_TRIGGERPOSTUN = 1102,
00349 RPMTAG_AUTOREQ = 1103,
00350 RPMTAG_AUTOPROV = 1104,
00351
00352 RPMTAG_CAPABILITY = 1105,
00353
00354 RPMTAG_SOURCEPACKAGE = 1106,
00355
00356 RPMTAG_OLDORIGFILENAMES = 1107,
00357
00358 RPMTAG_BUILDPREREQ = 1108,
00359 RPMTAG_BUILDREQUIRES = 1109,
00360 RPMTAG_BUILDCONFLICTS = 1110,
00361
00362 RPMTAG_BUILDMACROS = 1111,
00363
00364 RPMTAG_PROVIDEFLAGS = 1112,
00365 RPMTAG_PROVIDEVERSION = 1113,
00366 RPMTAG_OBSOLETEFLAGS = 1114,
00367 RPMTAG_OBSOLETEVERSION = 1115,
00368 RPMTAG_DIRINDEXES = 1116,
00369 RPMTAG_BASENAMES = 1117,
00370 RPMTAG_DIRNAMES = 1118,
00371 RPMTAG_ORIGDIRINDEXES = 1119,
00372 RPMTAG_ORIGBASENAMES = 1120,
00373 RPMTAG_ORIGDIRNAMES = 1121,
00374 RPMTAG_OPTFLAGS = 1122,
00375 RPMTAG_DISTURL = 1123,
00376 RPMTAG_PAYLOADFORMAT = 1124,
00377 RPMTAG_PAYLOADCOMPRESSOR = 1125,
00378 RPMTAG_PAYLOADFLAGS = 1126,
00379 RPMTAG_MULTILIBS = 1127,
00380 RPMTAG_INSTALLTID = 1128,
00381 RPMTAG_REMOVETID = 1129,
00382 RPMTAG_SHA1RHN = 1130,
00383 RPMTAG_RHNPLATFORM = 1131,
00384 RPMTAG_PLATFORM = 1132,
00385
00386 RPMTAG_FIRSTFREE_TAG
00387
00388 } rpmTag;
00389
00390 #define RPMTAG_EXTERNAL_TAG 1000000
00391
00395 typedef enum rpmfileState_e {
00396 RPMFILE_STATE_NORMAL = 0,
00397 RPMFILE_STATE_REPLACED = 1,
00398 RPMFILE_STATE_NOTINSTALLED = 2,
00399 RPMFILE_STATE_NETSHARED = 3
00400 } rpmfileState;
00401
00405 typedef enum rpmfileAttrs_e {
00406
00407 RPMFILE_NONE = 0,
00408
00409 RPMFILE_CONFIG = (1 << 0),
00410 RPMFILE_DOC = (1 << 1),
00411
00412 RPMFILE_DONOTUSE = (1 << 2),
00413
00414 RPMFILE_MISSINGOK = (1 << 3),
00415 RPMFILE_NOREPLACE = (1 << 4),
00416 RPMFILE_SPECFILE = (1 << 5),
00417 RPMFILE_GHOST = (1 << 6),
00418 RPMFILE_LICENSE = (1 << 7),
00419 RPMFILE_README = (1 << 8),
00420 RPMFILE_EXCLUDE = (1 << 9)
00421 } rpmfileAttrs;
00422 #define RPMFILE_MULTILIB_SHIFT 9
00423 #define RPMFILE_MULTILIB(N) ((N) << RPMFILE_MULTILIB_SHIFT)
00424 #define RPMFILE_MULTILIB_MASK RPMFILE_MULTILIB(7)
00425
00426 #define RPMFILE_ALL ~(RPMFILE_NONE)
00427
00428
00429 #define isFileMULTILIB(_fflags) ((_fflags) & RPMFILE_MULTILIB_MASK)
00430
00434 typedef enum rpmsenseFlags_e {
00435 RPMSENSE_ANY = 0,
00436
00437 RPMSENSE_SERIAL = (1 << 0),
00438
00439 RPMSENSE_LESS = (1 << 1),
00440 RPMSENSE_GREATER = (1 << 2),
00441 RPMSENSE_EQUAL = (1 << 3),
00442 RPMSENSE_PROVIDES = (1 << 4),
00443 RPMSENSE_CONFLICTS = (1 << 5),
00444 RPMSENSE_PREREQ = (1 << 6),
00445 RPMSENSE_OBSOLETES = (1 << 7),
00446 RPMSENSE_INTERP = (1 << 8),
00447 RPMSENSE_SCRIPT_PRE = ((1 << 9)|RPMSENSE_PREREQ),
00448 RPMSENSE_SCRIPT_POST = ((1 << 10)|RPMSENSE_PREREQ),
00449 RPMSENSE_SCRIPT_PREUN = ((1 << 11)|RPMSENSE_PREREQ),
00450 RPMSENSE_SCRIPT_POSTUN = ((1 << 12)|RPMSENSE_PREREQ),
00451 RPMSENSE_SCRIPT_VERIFY = (1 << 13),
00452 RPMSENSE_FIND_REQUIRES = (1 << 14),
00453 RPMSENSE_FIND_PROVIDES = (1 << 15),
00455 RPMSENSE_TRIGGERIN = (1 << 16),
00456 RPMSENSE_TRIGGERUN = (1 << 17),
00457 RPMSENSE_TRIGGERPOSTUN = (1 << 18),
00458 RPMSENSE_MULTILIB = (1 << 19),
00459 RPMSENSE_SCRIPT_PREP = (1 << 20),
00460 RPMSENSE_SCRIPT_BUILD = (1 << 21),
00461 RPMSENSE_SCRIPT_INSTALL = (1 << 22),
00462 RPMSENSE_SCRIPT_CLEAN = (1 << 23),
00463 RPMSENSE_RPMLIB = ((1 << 24) | RPMSENSE_PREREQ),
00464
00465 RPMSENSE_TRIGGERPREIN = (1 << 25),
00466
00467
00468
00469 RPMSENSE_KEYRING = (1 << 26)
00470
00471 } rpmsenseFlags;
00472
00473 #define RPMSENSE_SENSEMASK 15
00474
00475
00476 #define RPMSENSE_TRIGGER \
00477 (RPMSENSE_TRIGGERIN | RPMSENSE_TRIGGERUN | RPMSENSE_TRIGGERPOSTUN)
00478
00479 #define isDependsMULTILIB(_dflags) ((_dflags) & RPMSENSE_MULTILIB)
00480
00481 #define _ALL_REQUIRES_MASK (\
00482 RPMSENSE_INTERP | \
00483 RPMSENSE_SCRIPT_PRE | \
00484 RPMSENSE_SCRIPT_POST | \
00485 RPMSENSE_SCRIPT_PREUN | \
00486 RPMSENSE_SCRIPT_POSTUN | \
00487 RPMSENSE_SCRIPT_VERIFY | \
00488 RPMSENSE_FIND_REQUIRES | \
00489 RPMSENSE_SCRIPT_PREP | \
00490 RPMSENSE_SCRIPT_BUILD | \
00491 RPMSENSE_SCRIPT_INSTALL | \
00492 RPMSENSE_SCRIPT_CLEAN | \
00493 RPMSENSE_RPMLIB | \
00494 RPMSENSE_KEYRING )
00495
00496 #define _notpre(_x) ((_x) & ~RPMSENSE_PREREQ)
00497 #define _INSTALL_ONLY_MASK \
00498 _notpre(RPMSENSE_SCRIPT_PRE|RPMSENSE_SCRIPT_POST|RPMSENSE_RPMLIB|RPMSENSE_KEYRING)
00499 #define _ERASE_ONLY_MASK \
00500 _notpre(RPMSENSE_SCRIPT_PREUN|RPMSENSE_SCRIPT_POSTUN)
00501
00502 #define isLegacyPreReq(_x) (((_x) & _ALL_REQUIRES_MASK) == RPMSENSE_PREREQ)
00503 #define isInstallPreReq(_x) ((_x) & _INSTALL_ONLY_MASK)
00504 #define isErasePreReq(_x) ((_x) & _ERASE_ONLY_MASK)
00505
00506
00509
00510
00511 #define RPMVAR_OPTFLAGS 3
00512 #define RPMVAR_PROVIDES 38
00513 #define RPMVAR_INCLUDE 43
00514 #define RPMVAR_MACROFILES 49
00515
00516 #define RPMVAR_NUM 55
00517
00523
00524 extern const char * rpmGetVar(int var)
00525 ;
00526
00527
00533 void rpmSetVar(int var, const char * val)
00534
00535 ;
00536
00542
00543
00544 extern const char * macrofiles;
00545
00546
00551 enum rpm_machtable_e {
00552 RPM_MACHTABLE_INSTARCH = 0,
00553 RPM_MACHTABLE_INSTOS = 1,
00554 RPM_MACHTABLE_BUILDARCH = 2,
00555 RPM_MACHTABLE_BUILDOS = 3
00556 };
00557 #define RPM_MACHTABLE_COUNT 4
00565 int rpmReadConfigFiles( const char * file,
00566 const char * target)
00567
00568
00569
00570 ;
00571
00578 void rpmGetArchInfo( const char ** name,
00579 int * num)
00580 ;
00581
00588 void rpmGetOsInfo( const char ** name,
00589 int * num)
00590 ;
00591
00605 int rpmMachineScore(int type, const char * name)
00606 ;
00607
00613 int rpmShowRC(FILE * fp)
00614
00615 ;
00616
00624 void rpmSetTables(int archTable, int osTable)
00625
00626 ;
00627
00638 void rpmSetMachine( const char * arch, const char * os)
00639
00640 ;
00641
00650
00651 void rpmGetMachine( const char **arch,
00652 const char **os)
00653 ;
00654
00659 void rpmFreeRpmrc(void)
00660
00661 ;
00662
00664
00667
00670 typedef struct rpmdb_s * rpmdb;
00671
00674 typedef struct _dbiIndexSet * dbiIndexSet;
00675
00679
00680 extern int * dbiTags;
00681
00682 extern int dbiTagsMax;
00683
00692 int rpmdbOpen ( const char * prefix, rpmdb * dbp,
00693 int mode, int perms)
00694
00695 ;
00696
00703 int rpmdbInit( const char * prefix, int perms)
00704
00705 ;
00706
00712 int rpmdbVerify( const char * prefix)
00713
00714 ;
00715
00721 int rpmdbClose ( rpmdb db)
00722
00723 ;
00724
00730 int rpmdbSync ( rpmdb db)
00731
00732 ;
00733
00739 int rpmdbOpenAll ( rpmdb db)
00740 ;
00741
00748 int rpmdbCountPackages( rpmdb db, const char * name)
00749
00750 ;
00751
00754 typedef struct _rpmdbMatchIterator * rpmdbMatchIterator;
00755
00761 rpmdbMatchIterator rpmdbFreeIterator(
00762 rpmdbMatchIterator mi)
00763
00764 ;
00765
00771 rpmdb rpmdbGetIteratorRpmDB(
00772 rpmdbMatchIterator mi)
00773 ;
00774
00780 unsigned int rpmdbGetIteratorOffset( rpmdbMatchIterator mi)
00781 ;
00782
00788 int rpmdbGetIteratorCount( rpmdbMatchIterator mi)
00789 ;
00790
00798 int rpmdbAppendIterator( rpmdbMatchIterator mi,
00799 const int * hdrNums, int nHdrNums)
00800 ;
00801
00811 int rpmdbPruneIterator( rpmdbMatchIterator mi,
00812 int * hdrNums, int nHdrNums, int sorted)
00813 ;
00814
00818 typedef enum rpmMireMode_e {
00819 RPMMIRE_DEFAULT = 0,
00820 RPMMIRE_STRCMP = 1,
00821 RPMMIRE_REGEX = 2,
00822 RPMMIRE_GLOB = 3
00823 } rpmMireMode;
00824
00833 int rpmdbSetIteratorRE( rpmdbMatchIterator mi, rpmTag tag,
00834 rpmMireMode mode, const char * pattern)
00835 ;
00836
00847
00848 int rpmdbSetIteratorVersion( rpmdbMatchIterator mi,
00849 const char * version)
00850 ;
00851
00862
00863 int rpmdbSetIteratorRelease( rpmdbMatchIterator mi,
00864 const char * release)
00865 ;
00866
00874 int rpmdbSetIteratorRewrite( rpmdbMatchIterator mi, int rewrite)
00875 ;
00876
00883 int rpmdbSetIteratorModified( rpmdbMatchIterator mi, int modified)
00884 ;
00885
00891 Header rpmdbNextIterator( rpmdbMatchIterator mi)
00892
00893 ;
00894
00896
00897 Header XrpmdbNextIterator(rpmdbMatchIterator mi,
00898 const char * f, unsigned int l)
00899
00900 ;
00901
00910 rpmdbMatchIterator rpmdbInitIterator(
00911 rpmdb db, int rpmtag,
00912 const void * keyp, size_t keylen)
00913
00914 ;
00915
00923 int rpmdbAdd( rpmdb db, int iid, Header h)
00924
00925 ;
00926
00934 int rpmdbRemove( rpmdb db, int rid, unsigned int hdrNum)
00935
00936 ;
00937
00943 int rpmdbRebuild( const char * prefix)
00944
00945 ;
00946
00948
00951
00955 typedef enum rpmProblemType_e {
00956 RPMPROB_BADARCH,
00957 RPMPROB_BADOS,
00958 RPMPROB_PKG_INSTALLED,
00959 RPMPROB_BADRELOCATE,
00960 RPMPROB_REQUIRES,
00961 RPMPROB_CONFLICT,
00962 RPMPROB_NEW_FILE_CONFLICT,
00963 RPMPROB_FILE_CONFLICT,
00964 RPMPROB_OLDPACKAGE,
00965 RPMPROB_DISKSPACE,
00966 RPMPROB_DISKNODES,
00967 RPMPROB_BADPRETRANS
00968 } rpmProblemType;
00969
00972 typedef struct rpmProblem_s {
00973 const char * pkgNEVR;
00974 const char * altNEVR;
00975 const void * key;
00976 Header h;
00977 rpmProblemType type;
00978 int ignoreProblem;
00979 const char * str1;
00980 unsigned long ulong1;
00981 } * rpmProblem;
00982
00985 typedef struct rpmProblemSet_s {
00986 int numProblems;
00987 int numProblemsAlloced;
00988 rpmProblem probs;
00989 } * rpmProblemSet;
00990
00993 void printDepFlags(FILE *fp, const char *version, int flags)
00994
00995 ;
00996
01000 typedef struct rpmDependencyConflict_s {
01001 const char * byName;
01002 const char * byVersion;
01003 const char * byRelease;
01004 Header byHeader;
01005
01006
01007
01008
01009 const char * needsName;
01010 const char * needsVersion;
01011 int needsFlags;
01012 const void ** suggestedPackages;
01013 enum {
01014 RPMDEP_SENSE_REQUIRES,
01015 RPMDEP_SENSE_CONFLICTS
01016 } sense;
01017 } * rpmDependencyConflict;
01018
01025 void printDepProblems(FILE * fp, const rpmDependencyConflict conflicts,
01026 int numConflicts)
01027
01028 ;
01029
01036
01037 extern const char * rpmProblemString(const rpmProblem prob)
01038 ;
01039
01040
01047 void rpmProblemPrint(FILE *fp, rpmProblem prob)
01048
01049 ;
01050
01056 void rpmProblemSetPrint(FILE *fp, rpmProblemSet probs)
01057
01058 ;
01059
01064 void rpmProblemSetFree( rpmProblemSet probs)
01065 ;
01066
01068
01077 typedef
01078 void * (*HFD_t) ( const void * data, rpmTagType type)
01079 ;
01080
01094 typedef int (*HGE_t) (Header h, rpmTag tag,
01095 rpmTagType * type,
01096 void ** p,
01097 int_32 * c)
01098 ;
01099
01114 typedef int (*HAE_t) (Header h, rpmTag tag, rpmTagType type,
01115 const void * p, int_32 c)
01116 ;
01117
01128 typedef int (*HME_t) (Header h, rpmTag tag, rpmTagType type,
01129 const void * p, int_32 c)
01130 ;
01131
01142 typedef int (*HRE_t) (Header h, int_32 tag)
01143 ;
01144
01148 typedef struct rpmRelocation_s {
01149
01150 const char * oldPath;
01151
01152 const char * newPath;
01153 } rpmRelocation;
01154
01165 rpmRC rpmInstallSourcePackage( const char * rootDir, FD_t fd,
01166 const char ** specFilePtr,
01167 rpmCallbackFunction notify,
01168 rpmCallbackData notifyData,
01169 char ** cookie)
01170 ;
01171
01178 int rpmVersionCompare(Header first, Header second)
01179 ;
01180
01184 typedef enum fileAction_e {
01185 FA_UNKNOWN = 0,
01186 FA_CREATE,
01187 FA_COPYIN,
01188 FA_COPYOUT,
01189 FA_BACKUP,
01190 FA_SAVE,
01191 FA_SKIP,
01192 FA_ALTNAME,
01193 FA_ERASE,
01194 FA_SKIPNSTATE,
01195 FA_SKIPNETSHARED,
01196 FA_SKIPMULTILIB
01197 } fileAction;
01198
01199 #define XFA_SKIPPING(_a) \
01200 ((_a) == FA_SKIP || (_a) == FA_SKIPNSTATE || (_a) == FA_SKIPNETSHARED || (_a) == FA_SKIPMULTILIB)
01201
01209 typedef enum fileTypes_e {
01210 PIPE = 1,
01211 CDEV = 2,
01212 XDIR = 4,
01213 BDEV = 6,
01214 REG = 8,
01215 LINK = 10,
01216 SOCK = 12
01217 } fileTypes;
01218
01222 typedef struct fsmIterator_s * FSMI_t;
01223
01227 typedef struct fsm_s * FSM_t;
01228
01232 typedef struct psm_s * PSM_t;
01233
01236 typedef struct transactionFileInfo_s * TFI_t;
01237
01244 typedef struct rpmTransactionSet_s * rpmTransactionSet;
01245
01252 rpmTransactionSet rpmtransCreateSet(
01253 rpmdb rpmdb,
01254 const char * rootDir)
01255 ;
01256
01273 int rpmtransAddPackage(rpmTransactionSet ts, Header h, FD_t fd,
01274 const void * key, int upgrade,
01275 rpmRelocation * relocs)
01276 ;
01277
01284
01285 void rpmtransAvailablePackage(rpmTransactionSet ts, Header h,
01286 const void * key)
01287 ;
01288
01295 int rpmtransRemovePackage(rpmTransactionSet ts, int dboffset)
01296 ;
01297
01303 rpmTransactionSet
01304 rpmtransFree( rpmTransactionSet ts)
01305 ;
01306
01312
01313 void rpmtransSetScriptFd(rpmTransactionSet ts, FD_t fd)
01314 ;
01315
01324
01325 int rpmtransGetKeys(const rpmTransactionSet ts,
01326 const void *** ep,
01327 int * nep)
01328 ;
01329
01337 int rpmdepCheck(rpmTransactionSet ts,
01338 rpmDependencyConflict * conflicts,
01339 int * numConflicts)
01340
01341
01342 ;
01343
01363 int rpmdepOrder(rpmTransactionSet ts)
01364
01365 ;
01366
01373 rpmDependencyConflict rpmdepFreeConflicts(
01374 rpmDependencyConflict conflicts,
01375 int numConflicts)
01376 ;
01377
01381 typedef enum rpmtransFlags_e {
01382 RPMTRANS_FLAG_NONE = 0,
01383 RPMTRANS_FLAG_TEST = (1 << 0),
01384 RPMTRANS_FLAG_BUILD_PROBS = (1 << 1),
01385 RPMTRANS_FLAG_NOSCRIPTS = (1 << 2),
01386 RPMTRANS_FLAG_JUSTDB = (1 << 3),
01387 RPMTRANS_FLAG_NOTRIGGERS = (1 << 4),
01388 RPMTRANS_FLAG_NODOCS = (1 << 5),
01389 RPMTRANS_FLAG_ALLFILES = (1 << 6),
01390
01391 RPMTRANS_FLAG_KEEPOBSOLETE = (1 << 7),
01392
01393 RPMTRANS_FLAG_MULTILIB = (1 << 8),
01394 RPMTRANS_FLAG_DIRSTASH = (1 << 9),
01395 RPMTRANS_FLAG_REPACKAGE = (1 << 10),
01397 RPMTRANS_FLAG_PKGCOMMIT = (1 << 11),
01398
01399 RPMTRANS_FLAG_PKGUNDO = (1 << 12),
01400
01401 RPMTRANS_FLAG_COMMIT = (1 << 13),
01402
01403 RPMTRANS_FLAG_UNDO = (1 << 14),
01404
01405 RPMTRANS_FLAG_REVERSE = (1 << 15),
01406
01407 RPMTRANS_FLAG_NOTRIGGERPREIN= (1 << 16),
01408 RPMTRANS_FLAG_NOPRE = (1 << 17),
01409 RPMTRANS_FLAG_NOPOST = (1 << 18),
01410 RPMTRANS_FLAG_NOTRIGGERIN = (1 << 19),
01411 RPMTRANS_FLAG_NOTRIGGERUN = (1 << 20),
01412 RPMTRANS_FLAG_NOPREUN = (1 << 21),
01413 RPMTRANS_FLAG_NOPOSTUN = (1 << 22),
01414 RPMTRANS_FLAG_NOTRIGGERPOSTUN = (1 << 23),
01415
01416 RPMTRANS_FLAG_NOPAYLOAD = (1 << 24),
01417
01418 RPMTRANS_FLAG_APPLYONLY = (1 << 25),
01419
01420
01421 RPMTRANS_FLAG_CHAINSAW = (1 << 26),
01422
01423 RPMTRANS_FLAG_NOMD5 = (1 << 27)
01424 } rpmtransFlags;
01425
01426 #define _noTransScripts \
01427 ( RPMTRANS_FLAG_NOPRE | \
01428 RPMTRANS_FLAG_NOPOST | \
01429 RPMTRANS_FLAG_NOPREUN | \
01430 RPMTRANS_FLAG_NOPOSTUN \
01431 )
01432
01433 #define _noTransTriggers \
01434 ( RPMTRANS_FLAG_NOTRIGGERPREIN | \
01435 RPMTRANS_FLAG_NOTRIGGERIN | \
01436 RPMTRANS_FLAG_NOTRIGGERUN | \
01437 RPMTRANS_FLAG_NOTRIGGERPOSTUN \
01438 )
01439
01447
01448 int rpmGetRpmlibProvides( const char *** provNames,
01449 int ** provFlags,
01450 const char *** provVersions)
01451 ;
01452
01460 int rpmvercmp(const char * a, const char * b)
01461 ;
01462
01473 int rpmRangesOverlap(const char * AName, const char * AEVR, int AFlags,
01474 const char * BName, const char * BEVR, int BFlags)
01475 ;
01476
01484 int rpmCheckRpmlibProvides(const char * keyName, const char * keyEVR,
01485 int keyFlags)
01486 ;
01487
01492 void rpmShowRpmlibProvides(FILE * fp)
01493
01494 ;
01495
01499 typedef enum rpmprobFilterFlags_e {
01500 RPMPROB_FILTER_NONE = 0,
01501 RPMPROB_FILTER_IGNOREOS = (1 << 0),
01502 RPMPROB_FILTER_IGNOREARCH = (1 << 1),
01503 RPMPROB_FILTER_REPLACEPKG = (1 << 2),
01504 RPMPROB_FILTER_FORCERELOCATE= (1 << 3),
01505 RPMPROB_FILTER_REPLACENEWFILES= (1 << 4),
01506 RPMPROB_FILTER_REPLACEOLDFILES= (1 << 5),
01507 RPMPROB_FILTER_OLDPACKAGE = (1 << 6),
01508 RPMPROB_FILTER_DISKSPACE = (1 << 7),
01509 RPMPROB_FILTER_DISKNODES = (1 << 8)
01510 } rpmprobFilterFlags;
01511
01523 int rpmRunTransactions(rpmTransactionSet ts,
01524 rpmCallbackFunction notify,
01525 rpmCallbackData notifyData,
01526 rpmProblemSet okProbs,
01527 rpmProblemSet * newProbs,
01528 rpmtransFlags transFlags,
01529 rpmprobFilterFlags ignoreSet)
01530
01531
01532
01533 ;
01534
01542
01543 extern const char *const tagName(int tag)
01544 ;
01545
01546
01552 int tagValue(const char *tagstr)
01553 ;
01554
01555 #define RPMLEAD_BINARY 0
01556 #define RPMLEAD_SOURCE 1
01557
01558 #define RPMLEAD_MAGIC0 0xed
01559 #define RPMLEAD_MAGIC1 0xab
01560 #define RPMLEAD_MAGIC2 0xee
01561 #define RPMLEAD_MAGIC3 0xdb
01562
01563 #define RPMLEAD_SIZE 96
01571 struct rpmlead {
01572 unsigned char magic[4];
01573 unsigned char major, minor;
01574 short type;
01575 short archnum;
01576 char name[66];
01577 short osnum;
01578 short signature_type;
01579 char reserved[16];
01580 } ;
01581
01585 void freeFilesystems(void)
01586
01587 ;
01588
01595 int rpmGetFilesystemList( const char *** listptr,
01596 int * num)
01597
01598 ;
01599
01609 int rpmGetFilesystemUsage(const char ** fileList, int_32 * fssizes,
01610 int numFiles, uint_32 ** usagesPtr,
01611 int flags)
01612
01613
01614
01615 ;
01616
01617
01620
01623 typedef struct rpmQVArguments_s * QVA_t;
01624
01629 typedef enum rpmQVSources_e {
01630 RPMQV_PACKAGE = 0,
01631 RPMQV_PATH,
01632 RPMQV_ALL,
01633 RPMQV_RPM,
01634 RPMQV_GROUP,
01635 RPMQV_WHATPROVIDES,
01636 RPMQV_WHATREQUIRES,
01637 RPMQV_TRIGGEREDBY,
01638 RPMQV_DBOFFSET,
01639 RPMQV_SPECFILE,
01640 RPMQV_PKGID,
01641 RPMQV_HDRID,
01642 RPMQV_FILEID,
01643 RPMQV_TID
01644 } rpmQVSources;
01645
01650 typedef enum rpmVerifyAttrs_e {
01651 RPMVERIFY_NONE = 0,
01652 RPMVERIFY_MD5 = (1 << 0),
01653 RPMVERIFY_FILESIZE = (1 << 1),
01654 RPMVERIFY_LINKTO = (1 << 2),
01655 RPMVERIFY_USER = (1 << 3),
01656 RPMVERIFY_GROUP = (1 << 4),
01657 RPMVERIFY_MTIME = (1 << 5),
01658 RPMVERIFY_MODE = (1 << 6),
01659 RPMVERIFY_RDEV = (1 << 7),
01660
01661
01662
01663
01664 RPMVERIFY_READLINKFAIL= (1 << 28),
01665 RPMVERIFY_READFAIL = (1 << 29),
01666 RPMVERIFY_LSTATFAIL = (1 << 30)
01667
01668 } rpmVerifyAttrs;
01669 #define RPMVERIFY_ALL ~(RPMVERIFY_NONE)
01670
01681 int rpmVerifyFile(const char * root, Header h, int filenum,
01682 rpmVerifyAttrs * result, rpmVerifyAttrs omitMask)
01683
01684 ;
01685
01694 int rpmVerifyScript(const char * rootDir, Header h, FD_t scriptFd)
01695
01696
01697 ;
01698
01700
01703
01704
01709 typedef enum rpmInstallInterfaceFlags_e {
01710 INSTALL_NONE = 0,
01711 INSTALL_PERCENT = (1 << 0),
01712 INSTALL_HASH = (1 << 1),
01713 INSTALL_NODEPS = (1 << 2),
01714 INSTALL_NOORDER = (1 << 3),
01715 INSTALL_LABEL = (1 << 4),
01716 INSTALL_UPGRADE = (1 << 5),
01717 INSTALL_FRESHEN = (1 << 6),
01718 INSTALL_INSTALL = (1 << 7),
01719 INSTALL_ERASE = (1 << 8)
01720 } rpmInstallInterfaceFlags;
01721
01725 typedef enum rpmEraseInterfaceFlags_e {
01726 UNINSTALL_NONE = 0,
01727 UNINSTALL_NODEPS = (1 << 0),
01728 UNINSTALL_ALLMATCHES= (1 << 1)
01729 } rpmEraseInterfaceFlags;
01730
01732
01735
01739 enum rpmtagSignature {
01740 RPMSIGTAG_SIZE = 1000,
01741
01742 RPMSIGTAG_LEMD5_1 = 1001,
01743 RPMSIGTAG_PGP = 1002,
01744 RPMSIGTAG_LEMD5_2 = 1003,
01745 RPMSIGTAG_MD5 = 1004,
01746 RPMSIGTAG_GPG = 1005,
01747 RPMSIGTAG_PGP5 = 1006,
01748 };
01749
01753 typedef enum rpmVerifySignatureReturn_e {
01754 RPMSIG_OK = 0,
01755 RPMSIG_UNKNOWN = 1,
01756 RPMSIG_BAD = 2,
01757 RPMSIG_NOKEY = 3,
01758 RPMSIG_NOTTRUSTED = 4
01759 } rpmVerifySignatureReturn;
01760
01770 rpmVerifySignatureReturn rpmVerifySignature(const char *file,
01771 int_32 sigTag, const void * sig, int count,
01772 char * result)
01773
01774 ;
01775
01781 Header rpmFreeSignature( Header h)
01782 ;
01783
01786 #ifdef __cplusplus
01787 }
01788 #endif
01789
01790 #endif