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 RPMTAG_BADSHA1_1 = RPMTAG_SIG_BASE+8,
00239 RPMTAG_BADSHA1_2 = RPMTAG_SIG_BASE+9,
00241 RPMTAG_PUBKEYS = RPMTAG_SIG_BASE+10,
00242 RPMTAG_DSAHEADER = RPMTAG_SIG_BASE+11,
00243 RPMTAG_RSAHEADER = RPMTAG_SIG_BASE+12,
00244 RPMTAG_SHA1HEADER = RPMTAG_SIG_BASE+13,
00245
00246 RPMTAG_NAME = 1000,
00247 RPMTAG_VERSION = 1001,
00248 RPMTAG_RELEASE = 1002,
00249 RPMTAG_EPOCH = 1003,
00250 #define RPMTAG_SERIAL RPMTAG_EPOCH
00251 RPMTAG_SUMMARY = 1004,
00252 RPMTAG_DESCRIPTION = 1005,
00253 RPMTAG_BUILDTIME = 1006,
00254 RPMTAG_BUILDHOST = 1007,
00255 RPMTAG_INSTALLTIME = 1008,
00256 RPMTAG_SIZE = 1009,
00257 RPMTAG_DISTRIBUTION = 1010,
00258 RPMTAG_VENDOR = 1011,
00259 RPMTAG_GIF = 1012,
00260 RPMTAG_XPM = 1013,
00261 RPMTAG_LICENSE = 1014,
00262 #define RPMTAG_COPYRIGHT RPMTAG_LICENSE
00263 RPMTAG_PACKAGER = 1015,
00264 RPMTAG_GROUP = 1016,
00265
00266 RPMTAG_CHANGELOG = 1017,
00267
00268 RPMTAG_SOURCE = 1018,
00269 RPMTAG_PATCH = 1019,
00270 RPMTAG_URL = 1020,
00271 RPMTAG_OS = 1021,
00272 RPMTAG_ARCH = 1022,
00273 RPMTAG_PREIN = 1023,
00274 RPMTAG_POSTIN = 1024,
00275 RPMTAG_PREUN = 1025,
00276 RPMTAG_POSTUN = 1026,
00277 RPMTAG_OLDFILENAMES = 1027,
00278 RPMTAG_FILESIZES = 1028,
00279 RPMTAG_FILESTATES = 1029,
00280 RPMTAG_FILEMODES = 1030,
00281 RPMTAG_FILEUIDS = 1031,
00282 RPMTAG_FILEGIDS = 1032,
00283 RPMTAG_FILERDEVS = 1033,
00284 RPMTAG_FILEMTIMES = 1034,
00285 RPMTAG_FILEMD5S = 1035,
00286 RPMTAG_FILELINKTOS = 1036,
00287 RPMTAG_FILEFLAGS = 1037,
00288
00289 RPMTAG_ROOT = 1038,
00290
00291 RPMTAG_FILEUSERNAME = 1039,
00292 RPMTAG_FILEGROUPNAME = 1040,
00293
00294 RPMTAG_EXCLUDE = 1041,
00295 RPMTAG_EXCLUSIVE = 1042,
00296
00297 RPMTAG_ICON = 1043,
00298 RPMTAG_SOURCERPM = 1044,
00299 RPMTAG_FILEVERIFYFLAGS = 1045,
00300 RPMTAG_ARCHIVESIZE = 1046,
00301 RPMTAG_PROVIDENAME = 1047,
00302 #define RPMTAG_PROVIDES RPMTAG_PROVIDENAME
00303 RPMTAG_REQUIREFLAGS = 1048,
00304 RPMTAG_REQUIRENAME = 1049,
00305 RPMTAG_REQUIREVERSION = 1050,
00306 RPMTAG_NOSOURCE = 1051,
00307 RPMTAG_NOPATCH = 1052,
00308 RPMTAG_CONFLICTFLAGS = 1053,
00309 RPMTAG_CONFLICTNAME = 1054,
00310 RPMTAG_CONFLICTVERSION = 1055,
00311 RPMTAG_DEFAULTPREFIX = 1056,
00312 RPMTAG_BUILDROOT = 1057,
00313 RPMTAG_INSTALLPREFIX = 1058,
00314 RPMTAG_EXCLUDEARCH = 1059,
00315 RPMTAG_EXCLUDEOS = 1060,
00316 RPMTAG_EXCLUSIVEARCH = 1061,
00317 RPMTAG_EXCLUSIVEOS = 1062,
00318 RPMTAG_AUTOREQPROV = 1063,
00319 RPMTAG_RPMVERSION = 1064,
00320 RPMTAG_TRIGGERSCRIPTS = 1065,
00321 RPMTAG_TRIGGERNAME = 1066,
00322 RPMTAG_TRIGGERVERSION = 1067,
00323 RPMTAG_TRIGGERFLAGS = 1068,
00324 RPMTAG_TRIGGERINDEX = 1069,
00325 RPMTAG_VERIFYSCRIPT = 1079,
00326 RPMTAG_CHANGELOGTIME = 1080,
00327 RPMTAG_CHANGELOGNAME = 1081,
00328 RPMTAG_CHANGELOGTEXT = 1082,
00329
00330 RPMTAG_BROKENMD5 = 1083,
00331
00332 RPMTAG_PREREQ = 1084,
00333 RPMTAG_PREINPROG = 1085,
00334 RPMTAG_POSTINPROG = 1086,
00335 RPMTAG_PREUNPROG = 1087,
00336 RPMTAG_POSTUNPROG = 1088,
00337 RPMTAG_BUILDARCHS = 1089,
00338 RPMTAG_OBSOLETENAME = 1090,
00339 #define RPMTAG_OBSOLETES RPMTAG_OBSOLETENAME
00340 RPMTAG_VERIFYSCRIPTPROG = 1091,
00341 RPMTAG_TRIGGERSCRIPTPROG = 1092,
00342 RPMTAG_DOCDIR = 1093,
00343 RPMTAG_COOKIE = 1094,
00344 RPMTAG_FILEDEVICES = 1095,
00345 RPMTAG_FILEINODES = 1096,
00346 RPMTAG_FILELANGS = 1097,
00347 RPMTAG_PREFIXES = 1098,
00348 RPMTAG_INSTPREFIXES = 1099,
00349 RPMTAG_TRIGGERIN = 1100,
00350 RPMTAG_TRIGGERUN = 1101,
00351 RPMTAG_TRIGGERPOSTUN = 1102,
00352 RPMTAG_AUTOREQ = 1103,
00353 RPMTAG_AUTOPROV = 1104,
00354
00355 RPMTAG_CAPABILITY = 1105,
00356
00357 RPMTAG_SOURCEPACKAGE = 1106,
00358
00359 RPMTAG_OLDORIGFILENAMES = 1107,
00360
00361 RPMTAG_BUILDPREREQ = 1108,
00362 RPMTAG_BUILDREQUIRES = 1109,
00363 RPMTAG_BUILDCONFLICTS = 1110,
00364
00365 RPMTAG_BUILDMACROS = 1111,
00366
00367 RPMTAG_PROVIDEFLAGS = 1112,
00368 RPMTAG_PROVIDEVERSION = 1113,
00369 RPMTAG_OBSOLETEFLAGS = 1114,
00370 RPMTAG_OBSOLETEVERSION = 1115,
00371 RPMTAG_DIRINDEXES = 1116,
00372 RPMTAG_BASENAMES = 1117,
00373 RPMTAG_DIRNAMES = 1118,
00374 RPMTAG_ORIGDIRINDEXES = 1119,
00375 RPMTAG_ORIGBASENAMES = 1120,
00376 RPMTAG_ORIGDIRNAMES = 1121,
00377 RPMTAG_OPTFLAGS = 1122,
00378 RPMTAG_DISTURL = 1123,
00379 RPMTAG_PAYLOADFORMAT = 1124,
00380 RPMTAG_PAYLOADCOMPRESSOR = 1125,
00381 RPMTAG_PAYLOADFLAGS = 1126,
00382 RPMTAG_MULTILIBS = 1127,
00383 RPMTAG_INSTALLTID = 1128,
00384 RPMTAG_REMOVETID = 1129,
00385 RPMTAG_SHA1RHN = 1130,
00386 RPMTAG_RHNPLATFORM = 1131,
00387 RPMTAG_PLATFORM = 1132,
00388
00389 RPMTAG_FIRSTFREE_TAG
00390
00391 } rpmTag;
00392
00393 #define RPMTAG_EXTERNAL_TAG 1000000
00394
00398 typedef enum rpmfileState_e {
00399 RPMFILE_STATE_NORMAL = 0,
00400 RPMFILE_STATE_REPLACED = 1,
00401 RPMFILE_STATE_NOTINSTALLED = 2,
00402 RPMFILE_STATE_NETSHARED = 3
00403 } rpmfileState;
00404
00408 typedef enum rpmfileAttrs_e {
00409
00410 RPMFILE_NONE = 0,
00411
00412 RPMFILE_CONFIG = (1 << 0),
00413 RPMFILE_DOC = (1 << 1),
00414
00415 RPMFILE_DONOTUSE = (1 << 2),
00416
00417 RPMFILE_MISSINGOK = (1 << 3),
00418 RPMFILE_NOREPLACE = (1 << 4),
00419 RPMFILE_SPECFILE = (1 << 5),
00420 RPMFILE_GHOST = (1 << 6),
00421 RPMFILE_LICENSE = (1 << 7),
00422 RPMFILE_README = (1 << 8),
00423 RPMFILE_EXCLUDE = (1 << 9)
00424 } rpmfileAttrs;
00425 #define RPMFILE_MULTILIB_SHIFT 9
00426 #define RPMFILE_MULTILIB(N) ((N) << RPMFILE_MULTILIB_SHIFT)
00427 #define RPMFILE_MULTILIB_MASK RPMFILE_MULTILIB(7)
00428
00429 #define RPMFILE_ALL ~(RPMFILE_NONE)
00430
00431
00432 #define isFileMULTILIB(_fflags) ((_fflags) & RPMFILE_MULTILIB_MASK)
00433
00437 typedef enum rpmsenseFlags_e {
00438 RPMSENSE_ANY = 0,
00439
00440 RPMSENSE_SERIAL = (1 << 0),
00441
00442 RPMSENSE_LESS = (1 << 1),
00443 RPMSENSE_GREATER = (1 << 2),
00444 RPMSENSE_EQUAL = (1 << 3),
00445 RPMSENSE_PROVIDES = (1 << 4),
00446 RPMSENSE_CONFLICTS = (1 << 5),
00447 RPMSENSE_PREREQ = (1 << 6),
00448 RPMSENSE_OBSOLETES = (1 << 7),
00449 RPMSENSE_INTERP = (1 << 8),
00450 RPMSENSE_SCRIPT_PRE = ((1 << 9)|RPMSENSE_PREREQ),
00451 RPMSENSE_SCRIPT_POST = ((1 << 10)|RPMSENSE_PREREQ),
00452 RPMSENSE_SCRIPT_PREUN = ((1 << 11)|RPMSENSE_PREREQ),
00453 RPMSENSE_SCRIPT_POSTUN = ((1 << 12)|RPMSENSE_PREREQ),
00454 RPMSENSE_SCRIPT_VERIFY = (1 << 13),
00455 RPMSENSE_FIND_REQUIRES = (1 << 14),
00456 RPMSENSE_FIND_PROVIDES = (1 << 15),
00458 RPMSENSE_TRIGGERIN = (1 << 16),
00459 RPMSENSE_TRIGGERUN = (1 << 17),
00460 RPMSENSE_TRIGGERPOSTUN = (1 << 18),
00461 RPMSENSE_MULTILIB = (1 << 19),
00462 RPMSENSE_SCRIPT_PREP = (1 << 20),
00463 RPMSENSE_SCRIPT_BUILD = (1 << 21),
00464 RPMSENSE_SCRIPT_INSTALL = (1 << 22),
00465 RPMSENSE_SCRIPT_CLEAN = (1 << 23),
00466 RPMSENSE_RPMLIB = ((1 << 24) | RPMSENSE_PREREQ),
00467
00468 RPMSENSE_TRIGGERPREIN = (1 << 25),
00469
00470
00471
00472 RPMSENSE_KEYRING = (1 << 26)
00473
00474 } rpmsenseFlags;
00475
00476 #define RPMSENSE_SENSEMASK 15
00477
00478
00479 #define RPMSENSE_TRIGGER \
00480 (RPMSENSE_TRIGGERIN | RPMSENSE_TRIGGERUN | RPMSENSE_TRIGGERPOSTUN)
00481
00482 #define isDependsMULTILIB(_dflags) ((_dflags) & RPMSENSE_MULTILIB)
00483
00484 #define _ALL_REQUIRES_MASK (\
00485 RPMSENSE_INTERP | \
00486 RPMSENSE_SCRIPT_PRE | \
00487 RPMSENSE_SCRIPT_POST | \
00488 RPMSENSE_SCRIPT_PREUN | \
00489 RPMSENSE_SCRIPT_POSTUN | \
00490 RPMSENSE_SCRIPT_VERIFY | \
00491 RPMSENSE_FIND_REQUIRES | \
00492 RPMSENSE_SCRIPT_PREP | \
00493 RPMSENSE_SCRIPT_BUILD | \
00494 RPMSENSE_SCRIPT_INSTALL | \
00495 RPMSENSE_SCRIPT_CLEAN | \
00496 RPMSENSE_RPMLIB | \
00497 RPMSENSE_KEYRING )
00498
00499 #define _notpre(_x) ((_x) & ~RPMSENSE_PREREQ)
00500 #define _INSTALL_ONLY_MASK \
00501 _notpre(RPMSENSE_SCRIPT_PRE|RPMSENSE_SCRIPT_POST|RPMSENSE_RPMLIB|RPMSENSE_KEYRING)
00502 #define _ERASE_ONLY_MASK \
00503 _notpre(RPMSENSE_SCRIPT_PREUN|RPMSENSE_SCRIPT_POSTUN)
00504
00505 #define isLegacyPreReq(_x) (((_x) & _ALL_REQUIRES_MASK) == RPMSENSE_PREREQ)
00506 #define isInstallPreReq(_x) ((_x) & _INSTALL_ONLY_MASK)
00507 #define isErasePreReq(_x) ((_x) & _ERASE_ONLY_MASK)
00508
00509
00512
00513
00514 #define RPMVAR_OPTFLAGS 3
00515 #define RPMVAR_PROVIDES 38
00516 #define RPMVAR_INCLUDE 43
00517 #define RPMVAR_MACROFILES 49
00518
00519 #define RPMVAR_NUM 55
00520
00526
00527 extern const char * rpmGetVar(int var)
00528 ;
00529
00530
00536 void rpmSetVar(int var, const char * val)
00537
00538 ;
00539
00545
00546
00547 extern const char * macrofiles;
00548
00549
00554 enum rpm_machtable_e {
00555 RPM_MACHTABLE_INSTARCH = 0,
00556 RPM_MACHTABLE_INSTOS = 1,
00557 RPM_MACHTABLE_BUILDARCH = 2,
00558 RPM_MACHTABLE_BUILDOS = 3
00559 };
00560 #define RPM_MACHTABLE_COUNT 4
00568 int rpmReadConfigFiles( const char * file,
00569 const char * target)
00570
00571
00572
00573 ;
00574
00581 void rpmGetArchInfo( const char ** name,
00582 int * num)
00583 ;
00584
00591 void rpmGetOsInfo( const char ** name,
00592 int * num)
00593 ;
00594
00608 int rpmMachineScore(int type, const char * name)
00609 ;
00610
00616 int rpmShowRC(FILE * fp)
00617
00618 ;
00619
00627 void rpmSetTables(int archTable, int osTable)
00628
00629 ;
00630
00641 void rpmSetMachine( const char * arch, const char * os)
00642
00643 ;
00644
00653
00654 void rpmGetMachine( const char **arch,
00655 const char **os)
00656 ;
00657
00662 void rpmFreeRpmrc(void)
00663
00664 ;
00665
00667
00670
00673 typedef struct rpmdb_s * rpmdb;
00674
00677 typedef struct _dbiIndexSet * dbiIndexSet;
00678
00682
00683 extern int * dbiTags;
00684
00685 extern int dbiTagsMax;
00686
00695 int rpmdbOpen ( const char * prefix, rpmdb * dbp,
00696 int mode, int perms)
00697
00698 ;
00699
00706 int rpmdbInit( const char * prefix, int perms)
00707
00708 ;
00709
00715 int rpmdbVerify( const char * prefix)
00716
00717 ;
00718
00724 int rpmdbClose ( rpmdb db)
00725
00726 ;
00727
00733 int rpmdbSync ( rpmdb db)
00734
00735 ;
00736
00742 int rpmdbOpenAll ( rpmdb db)
00743 ;
00744
00751 int rpmdbCountPackages( rpmdb db, const char * name)
00752
00753 ;
00754
00757 typedef struct _rpmdbMatchIterator * rpmdbMatchIterator;
00758
00764 rpmdbMatchIterator rpmdbFreeIterator(
00765 rpmdbMatchIterator mi)
00766
00767 ;
00768
00774 rpmdb rpmdbGetIteratorRpmDB(
00775 rpmdbMatchIterator mi)
00776 ;
00777
00783 unsigned int rpmdbGetIteratorOffset( rpmdbMatchIterator mi)
00784 ;
00785
00791 int rpmdbGetIteratorCount( rpmdbMatchIterator mi)
00792 ;
00793
00801 int rpmdbAppendIterator( rpmdbMatchIterator mi,
00802 const int * hdrNums, int nHdrNums)
00803 ;
00804
00814 int rpmdbPruneIterator( rpmdbMatchIterator mi,
00815 int * hdrNums, int nHdrNums, int sorted)
00816 ;
00817
00821 typedef enum rpmMireMode_e {
00822 RPMMIRE_DEFAULT = 0,
00823 RPMMIRE_STRCMP = 1,
00824 RPMMIRE_REGEX = 2,
00825 RPMMIRE_GLOB = 3
00826 } rpmMireMode;
00827
00836 int rpmdbSetIteratorRE( rpmdbMatchIterator mi, rpmTag tag,
00837 rpmMireMode mode, const char * pattern)
00838 ;
00839
00850
00851 int rpmdbSetIteratorVersion( rpmdbMatchIterator mi,
00852 const char * version)
00853 ;
00854
00865
00866 int rpmdbSetIteratorRelease( rpmdbMatchIterator mi,
00867 const char * release)
00868 ;
00869
00877 int rpmdbSetIteratorRewrite( rpmdbMatchIterator mi, int rewrite)
00878 ;
00879
00886 int rpmdbSetIteratorModified( rpmdbMatchIterator mi, int modified)
00887 ;
00888
00894 Header rpmdbNextIterator( rpmdbMatchIterator mi)
00895
00896 ;
00897
00899
00900 Header XrpmdbNextIterator(rpmdbMatchIterator mi,
00901 const char * f, unsigned int l)
00902
00903 ;
00904
00913 rpmdbMatchIterator rpmdbInitIterator(
00914 rpmdb db, int rpmtag,
00915 const void * keyp, size_t keylen)
00916
00917 ;
00918
00926 int rpmdbAdd( rpmdb db, int iid, Header h)
00927
00928 ;
00929
00937 int rpmdbRemove( rpmdb db, int rid, unsigned int hdrNum)
00938
00939 ;
00940
00946 int rpmdbRebuild( const char * prefix)
00947
00948 ;
00949
00951
00954
00958 typedef enum rpmProblemType_e {
00959 RPMPROB_BADARCH,
00960 RPMPROB_BADOS,
00961 RPMPROB_PKG_INSTALLED,
00962 RPMPROB_BADRELOCATE,
00963 RPMPROB_REQUIRES,
00964 RPMPROB_CONFLICT,
00965 RPMPROB_NEW_FILE_CONFLICT,
00966 RPMPROB_FILE_CONFLICT,
00967 RPMPROB_OLDPACKAGE,
00968 RPMPROB_DISKSPACE,
00969 RPMPROB_DISKNODES,
00970 RPMPROB_BADPRETRANS
00971 } rpmProblemType;
00972
00975 typedef struct rpmProblem_s {
00976 const char * pkgNEVR;
00977 const char * altNEVR;
00978 const void * key;
00979 Header h;
00980 rpmProblemType type;
00981 int ignoreProblem;
00982 const char * str1;
00983 unsigned long ulong1;
00984 } * rpmProblem;
00985
00988 typedef struct rpmProblemSet_s {
00989 int numProblems;
00990 int numProblemsAlloced;
00991 rpmProblem probs;
00992 } * rpmProblemSet;
00993
00996 void printDepFlags(FILE *fp, const char *version, int flags)
00997
00998 ;
00999
01003 typedef struct rpmDependencyConflict_s {
01004 const char * byName;
01005 const char * byVersion;
01006 const char * byRelease;
01007 Header byHeader;
01008
01009
01010
01011
01012 const char * needsName;
01013 const char * needsVersion;
01014 int needsFlags;
01015 const void ** suggestedPackages;
01016 enum {
01017 RPMDEP_SENSE_REQUIRES,
01018 RPMDEP_SENSE_CONFLICTS
01019 } sense;
01020 } * rpmDependencyConflict;
01021
01028 void printDepProblems(FILE * fp, const rpmDependencyConflict conflicts,
01029 int numConflicts)
01030
01031 ;
01032
01039
01040 extern const char * rpmProblemString(const rpmProblem prob)
01041 ;
01042
01043
01050 void rpmProblemPrint(FILE *fp, rpmProblem prob)
01051
01052 ;
01053
01059 void rpmProblemSetPrint(FILE *fp, rpmProblemSet probs)
01060
01061 ;
01062
01067 void rpmProblemSetFree( rpmProblemSet probs)
01068 ;
01069
01071
01080 typedef
01081 void * (*HFD_t) ( const void * data, rpmTagType type)
01082 ;
01083
01097 typedef int (*HGE_t) (Header h, rpmTag tag,
01098 rpmTagType * type,
01099 void ** p,
01100 int_32 * c)
01101 ;
01102
01117 typedef int (*HAE_t) (Header h, rpmTag tag, rpmTagType type,
01118 const void * p, int_32 c)
01119 ;
01120
01131 typedef int (*HME_t) (Header h, rpmTag tag, rpmTagType type,
01132 const void * p, int_32 c)
01133 ;
01134
01145 typedef int (*HRE_t) (Header h, int_32 tag)
01146 ;
01147
01151 typedef struct rpmRelocation_s {
01152
01153 const char * oldPath;
01154
01155 const char * newPath;
01156 } rpmRelocation;
01157
01168 rpmRC rpmInstallSourcePackage( const char * rootDir, FD_t fd,
01169 const char ** specFilePtr,
01170 rpmCallbackFunction notify,
01171 rpmCallbackData notifyData,
01172 char ** cookie)
01173 ;
01174
01181 int rpmVersionCompare(Header first, Header second)
01182 ;
01183
01187 typedef enum fileAction_e {
01188 FA_UNKNOWN = 0,
01189 FA_CREATE,
01190 FA_COPYIN,
01191 FA_COPYOUT,
01192 FA_BACKUP,
01193 FA_SAVE,
01194 FA_SKIP,
01195 FA_ALTNAME,
01196 FA_ERASE,
01197 FA_SKIPNSTATE,
01198 FA_SKIPNETSHARED,
01199 FA_SKIPMULTILIB
01200 } fileAction;
01201
01202 #define XFA_SKIPPING(_a) \
01203 ((_a) == FA_SKIP || (_a) == FA_SKIPNSTATE || (_a) == FA_SKIPNETSHARED || (_a) == FA_SKIPMULTILIB)
01204
01212 typedef enum fileTypes_e {
01213 PIPE = 1,
01214 CDEV = 2,
01215 XDIR = 4,
01216 BDEV = 6,
01217 REG = 8,
01218 LINK = 10,
01219 SOCK = 12
01220 } fileTypes;
01221
01225 typedef struct fsmIterator_s * FSMI_t;
01226
01230 typedef struct fsm_s * FSM_t;
01231
01235 typedef struct psm_s * PSM_t;
01236
01239 typedef struct transactionFileInfo_s * TFI_t;
01240
01247 typedef struct rpmTransactionSet_s * rpmTransactionSet;
01248
01255 rpmTransactionSet rpmtransCreateSet(
01256 rpmdb rpmdb,
01257 const char * rootDir)
01258 ;
01259
01276 int rpmtransAddPackage(rpmTransactionSet ts, Header h, FD_t fd,
01277 const void * key, int upgrade,
01278 rpmRelocation * relocs)
01279 ;
01280
01287
01288 void rpmtransAvailablePackage(rpmTransactionSet ts, Header h,
01289 const void * key)
01290 ;
01291
01298 int rpmtransRemovePackage(rpmTransactionSet ts, int dboffset)
01299 ;
01300
01306 rpmTransactionSet
01307 rpmtransFree( rpmTransactionSet ts)
01308 ;
01309
01315
01316 void rpmtransSetScriptFd(rpmTransactionSet ts, FD_t fd)
01317 ;
01318
01327
01328 int rpmtransGetKeys(const rpmTransactionSet ts,
01329 const void *** ep,
01330 int * nep)
01331 ;
01332
01340 int rpmdepCheck(rpmTransactionSet ts,
01341 rpmDependencyConflict * conflicts,
01342 int * numConflicts)
01343
01344
01345 ;
01346
01366 int rpmdepOrder(rpmTransactionSet ts)
01367
01368 ;
01369
01376 rpmDependencyConflict rpmdepFreeConflicts(
01377 rpmDependencyConflict conflicts,
01378 int numConflicts)
01379 ;
01380
01384 typedef enum rpmtransFlags_e {
01385 RPMTRANS_FLAG_NONE = 0,
01386 RPMTRANS_FLAG_TEST = (1 << 0),
01387 RPMTRANS_FLAG_BUILD_PROBS = (1 << 1),
01388 RPMTRANS_FLAG_NOSCRIPTS = (1 << 2),
01389 RPMTRANS_FLAG_JUSTDB = (1 << 3),
01390 RPMTRANS_FLAG_NOTRIGGERS = (1 << 4),
01391 RPMTRANS_FLAG_NODOCS = (1 << 5),
01392 RPMTRANS_FLAG_ALLFILES = (1 << 6),
01393
01394 RPMTRANS_FLAG_KEEPOBSOLETE = (1 << 7),
01395
01396 RPMTRANS_FLAG_MULTILIB = (1 << 8),
01397 RPMTRANS_FLAG_DIRSTASH = (1 << 9),
01398 RPMTRANS_FLAG_REPACKAGE = (1 << 10),
01400 RPMTRANS_FLAG_PKGCOMMIT = (1 << 11),
01401
01402 RPMTRANS_FLAG_PKGUNDO = (1 << 12),
01403
01404 RPMTRANS_FLAG_COMMIT = (1 << 13),
01405
01406 RPMTRANS_FLAG_UNDO = (1 << 14),
01407
01408 RPMTRANS_FLAG_REVERSE = (1 << 15),
01409
01410 RPMTRANS_FLAG_NOTRIGGERPREIN= (1 << 16),
01411 RPMTRANS_FLAG_NOPRE = (1 << 17),
01412 RPMTRANS_FLAG_NOPOST = (1 << 18),
01413 RPMTRANS_FLAG_NOTRIGGERIN = (1 << 19),
01414 RPMTRANS_FLAG_NOTRIGGERUN = (1 << 20),
01415 RPMTRANS_FLAG_NOPREUN = (1 << 21),
01416 RPMTRANS_FLAG_NOPOSTUN = (1 << 22),
01417 RPMTRANS_FLAG_NOTRIGGERPOSTUN = (1 << 23),
01418
01419 RPMTRANS_FLAG_NOPAYLOAD = (1 << 24),
01420
01421 RPMTRANS_FLAG_APPLYONLY = (1 << 25),
01422
01423
01424 RPMTRANS_FLAG_CHAINSAW = (1 << 26),
01425
01426 RPMTRANS_FLAG_NOMD5 = (1 << 27)
01427 } rpmtransFlags;
01428
01429 #define _noTransScripts \
01430 ( RPMTRANS_FLAG_NOPRE | \
01431 RPMTRANS_FLAG_NOPOST | \
01432 RPMTRANS_FLAG_NOPREUN | \
01433 RPMTRANS_FLAG_NOPOSTUN \
01434 )
01435
01436 #define _noTransTriggers \
01437 ( RPMTRANS_FLAG_NOTRIGGERPREIN | \
01438 RPMTRANS_FLAG_NOTRIGGERIN | \
01439 RPMTRANS_FLAG_NOTRIGGERUN | \
01440 RPMTRANS_FLAG_NOTRIGGERPOSTUN \
01441 )
01442
01450
01451 int rpmGetRpmlibProvides( const char *** provNames,
01452 int ** provFlags,
01453 const char *** provVersions)
01454 ;
01455
01463 int rpmvercmp(const char * a, const char * b)
01464 ;
01465
01476 int rpmRangesOverlap(const char * AName, const char * AEVR, int AFlags,
01477 const char * BName, const char * BEVR, int BFlags)
01478 ;
01479
01487 int rpmCheckRpmlibProvides(const char * keyName, const char * keyEVR,
01488 int keyFlags)
01489 ;
01490
01495 void rpmShowRpmlibProvides(FILE * fp)
01496
01497 ;
01498
01502 typedef enum rpmprobFilterFlags_e {
01503 RPMPROB_FILTER_NONE = 0,
01504 RPMPROB_FILTER_IGNOREOS = (1 << 0),
01505 RPMPROB_FILTER_IGNOREARCH = (1 << 1),
01506 RPMPROB_FILTER_REPLACEPKG = (1 << 2),
01507 RPMPROB_FILTER_FORCERELOCATE= (1 << 3),
01508 RPMPROB_FILTER_REPLACENEWFILES= (1 << 4),
01509 RPMPROB_FILTER_REPLACEOLDFILES= (1 << 5),
01510 RPMPROB_FILTER_OLDPACKAGE = (1 << 6),
01511 RPMPROB_FILTER_DISKSPACE = (1 << 7),
01512 RPMPROB_FILTER_DISKNODES = (1 << 8)
01513 } rpmprobFilterFlags;
01514
01526 int rpmRunTransactions(rpmTransactionSet ts,
01527 rpmCallbackFunction notify,
01528 rpmCallbackData notifyData,
01529 rpmProblemSet okProbs,
01530 rpmProblemSet * newProbs,
01531 rpmtransFlags transFlags,
01532 rpmprobFilterFlags ignoreSet)
01533
01534
01535
01536 ;
01537
01545
01546 extern const char *const tagName(int tag)
01547 ;
01548
01549
01555 int tagValue(const char *tagstr)
01556 ;
01557
01558 #define RPMLEAD_BINARY 0
01559 #define RPMLEAD_SOURCE 1
01560
01561 #define RPMLEAD_MAGIC0 0xed
01562 #define RPMLEAD_MAGIC1 0xab
01563 #define RPMLEAD_MAGIC2 0xee
01564 #define RPMLEAD_MAGIC3 0xdb
01565
01566 #define RPMLEAD_SIZE 96
01574 struct rpmlead {
01575 unsigned char magic[4];
01576 unsigned char major, minor;
01577 short type;
01578 short archnum;
01579 char name[66];
01580 short osnum;
01581 short signature_type;
01582 char reserved[16];
01583 } ;
01584
01588 void freeFilesystems(void)
01589
01590 ;
01591
01598 int rpmGetFilesystemList( const char *** listptr,
01599 int * num)
01600
01601 ;
01602
01612 int rpmGetFilesystemUsage(const char ** fileList, int_32 * fssizes,
01613 int numFiles, uint_32 ** usagesPtr,
01614 int flags)
01615
01616
01617
01618 ;
01619
01620
01623
01626 typedef struct rpmQVArguments_s * QVA_t;
01627
01632 typedef enum rpmQVSources_e {
01633 RPMQV_PACKAGE = 0,
01634 RPMQV_PATH,
01635 RPMQV_ALL,
01636 RPMQV_RPM,
01637 RPMQV_GROUP,
01638 RPMQV_WHATPROVIDES,
01639 RPMQV_WHATREQUIRES,
01640 RPMQV_TRIGGEREDBY,
01641 RPMQV_DBOFFSET,
01642 RPMQV_SPECFILE,
01643 RPMQV_PKGID,
01644 RPMQV_HDRID,
01645 RPMQV_FILEID,
01646 RPMQV_TID
01647 } rpmQVSources;
01648
01653 typedef enum rpmVerifyAttrs_e {
01654 RPMVERIFY_NONE = 0,
01655 RPMVERIFY_MD5 = (1 << 0),
01656 RPMVERIFY_FILESIZE = (1 << 1),
01657 RPMVERIFY_LINKTO = (1 << 2),
01658 RPMVERIFY_USER = (1 << 3),
01659 RPMVERIFY_GROUP = (1 << 4),
01660 RPMVERIFY_MTIME = (1 << 5),
01661 RPMVERIFY_MODE = (1 << 6),
01662 RPMVERIFY_RDEV = (1 << 7),
01663
01664
01665
01666
01667 RPMVERIFY_READLINKFAIL= (1 << 28),
01668 RPMVERIFY_READFAIL = (1 << 29),
01669 RPMVERIFY_LSTATFAIL = (1 << 30)
01670
01671 } rpmVerifyAttrs;
01672 #define RPMVERIFY_ALL ~(RPMVERIFY_NONE)
01673
01684 int rpmVerifyFile(const char * root, Header h, int filenum,
01685 rpmVerifyAttrs * result, rpmVerifyAttrs omitMask)
01686
01687 ;
01688
01697 int rpmVerifyScript(const char * rootDir, Header h, FD_t scriptFd)
01698
01699
01700 ;
01701
01703
01706
01707
01712 typedef enum rpmInstallInterfaceFlags_e {
01713 INSTALL_NONE = 0,
01714 INSTALL_PERCENT = (1 << 0),
01715 INSTALL_HASH = (1 << 1),
01716 INSTALL_NODEPS = (1 << 2),
01717 INSTALL_NOORDER = (1 << 3),
01718 INSTALL_LABEL = (1 << 4),
01719 INSTALL_UPGRADE = (1 << 5),
01720 INSTALL_FRESHEN = (1 << 6),
01721 INSTALL_INSTALL = (1 << 7),
01722 INSTALL_ERASE = (1 << 8)
01723 } rpmInstallInterfaceFlags;
01724
01728 typedef enum rpmEraseInterfaceFlags_e {
01729 UNINSTALL_NONE = 0,
01730 UNINSTALL_NODEPS = (1 << 0),
01731 UNINSTALL_ALLMATCHES= (1 << 1)
01732 } rpmEraseInterfaceFlags;
01733
01735
01738
01742 enum rpmtagSignature {
01743 RPMSIGTAG_SIZE = 1000,
01744
01745 RPMSIGTAG_LEMD5_1 = 1001,
01746 RPMSIGTAG_PGP = 1002,
01747 RPMSIGTAG_LEMD5_2 = 1003,
01748 RPMSIGTAG_MD5 = 1004,
01749 RPMSIGTAG_GPG = 1005,
01750 RPMSIGTAG_PGP5 = 1006,
01751 RPMSIGTAG_PAYLOADSIZE = 1007,
01753 RPMSIGTAG_BADSHA1_1 = RPMTAG_BADSHA1_1,
01754 RPMSIGTAG_BADSHA1_2 = RPMTAG_BADSHA1_2,
01755 RPMSIGTAG_SHA1 = RPMTAG_SHA1HEADER,
01756 RPMSIGTAG_DSA = RPMTAG_DSAHEADER,
01757 RPMSIGTAG_RSA = RPMTAG_RSAHEADER
01758 };
01759
01763 typedef enum rpmVerifySignatureReturn_e {
01764 RPMSIG_OK = 0,
01765 RPMSIG_UNKNOWN = 1,
01766 RPMSIG_BAD = 2,
01767 RPMSIG_NOKEY = 3,
01768 RPMSIG_NOTTRUSTED = 4
01769 } rpmVerifySignatureReturn;
01770
01780 rpmVerifySignatureReturn rpmVerifySignature(const char *file,
01781 int_32 sigTag, const void * sig, int count,
01782 char * result)
01783
01784 ;
01785
01791 Header rpmFreeSignature( Header h)
01792 ;
01793
01796 #ifdef __cplusplus
01797 }
01798 #endif
01799
01800 #endif