home *** CD-ROM | disk | FTP | other *** search
- #ifndef H_RPMLIB
- #define H_RPMLIB
-
- /* This is the *only* module users of rpmlib should need to include */
-
- #include <db.h>
-
- /* it shouldn't need these :-( */
- #include "dbindex.h"
- #include "header.h"
-
- int rpmReadPackageInfo(int fd, Header * signatures, Header * hdr);
- int rpmReadPackageHeader(int fd, Header * hdr, int * isSource, int * major,
- int * minor);
- /* 0 = success */
- /* 1 = bad magic */
- /* 2 = error */
-
- extern const struct headerTagTableEntry rpmTagTable[];
- extern const int rpmTagTableSize;
-
- /* this chains to headerDefaultFormats[] */
- extern const struct headerSprintfExtension rpmHeaderFormats[];
-
- /* these tags are for both the database and packages */
- /* none of these can be 0 !! */
-
- #define RPMTAG_NAME 1000
- #define RPMTAG_VERSION 1001
- #define RPMTAG_RELEASE 1002
- #define RPMTAG_SERIAL 1003
- #define RPMTAG_SUMMARY 1004
- #define RPMTAG_DESCRIPTION 1005
- #define RPMTAG_BUILDTIME 1006
- #define RPMTAG_BUILDHOST 1007
- #define RPMTAG_INSTALLTIME 1008
- #define RPMTAG_SIZE 1009
- #define RPMTAG_DISTRIBUTION 1010
- #define RPMTAG_VENDOR 1011
- #define RPMTAG_GIF 1012
- #define RPMTAG_XPM 1013
- #define RPMTAG_COPYRIGHT 1014
- #define RPMTAG_PACKAGER 1015
- #define RPMTAG_GROUP 1016
- #define RPMTAG_CHANGELOG 1017 /* internal */
- #define RPMTAG_SOURCE 1018
- #define RPMTAG_PATCH 1019
- #define RPMTAG_URL 1020
- #define RPMTAG_OS 1021
- #define RPMTAG_ARCH 1022
- #define RPMTAG_PREIN 1023
- #define RPMTAG_POSTIN 1024
- #define RPMTAG_PREUN 1025
- #define RPMTAG_POSTUN 1026
- #define RPMTAG_FILENAMES 1027
- #define RPMTAG_FILESIZES 1028
- #define RPMTAG_FILESTATES 1029
- #define RPMTAG_FILEMODES 1030
- #define RPMTAG_FILEUIDS 1031 /* internal */
- #define RPMTAG_FILEGIDS 1032 /* internal */
- #define RPMTAG_FILERDEVS 1033
- #define RPMTAG_FILEMTIMES 1034
- #define RPMTAG_FILEMD5S 1035
- #define RPMTAG_FILELINKTOS 1036
- #define RPMTAG_FILEFLAGS 1037
- #define RPMTAG_ROOT 1038
- #define RPMTAG_FILEUSERNAME 1039
- #define RPMTAG_FILEGROUPNAME 1040
- #define RPMTAG_EXCLUDE 1041 /* not used - internal */
- #define RPMTAG_EXCLUSIVE 1042 /* not used - internal */
- #define RPMTAG_ICON 1043
- #define RPMTAG_SOURCERPM 1044
- #define RPMTAG_FILEVERIFYFLAGS 1045
- #define RPMTAG_ARCHIVESIZE 1046
- #define RPMTAG_PROVIDES 1047
- #define RPMTAG_REQUIREFLAGS 1048
- #define RPMTAG_REQUIRENAME 1049
- #define RPMTAG_REQUIREVERSION 1050
- #define RPMTAG_NOSOURCE 1051 /* internal */
- #define RPMTAG_NOPATCH 1052 /* internal */
- #define RPMTAG_CONFLICTFLAGS 1053
- #define RPMTAG_CONFLICTNAME 1054
- #define RPMTAG_CONFLICTVERSION 1055
- #define RPMTAG_DEFAULTPREFIX 1056
- #define RPMTAG_BUILDROOT 1057
- #define RPMTAG_INSTALLPREFIX 1058
- #define RPMTAG_EXCLUDEARCH 1059
- #define RPMTAG_EXCLUDEOS 1060
- #define RPMTAG_EXCLUSIVEARCH 1061
- #define RPMTAG_EXCLUSIVEOS 1062
- #define RPMTAG_AUTOREQPROV 1063 /* internal */
- #define RPMTAG_RPMVERSION 1064
- #define RPMTAG_TRIGGERSCRIPTS 1065 /* internal */
- #define RPMTAG_TRIGGERNAME 1066 /* internal */
- #define RPMTAG_TRIGGERVERSION 1067 /* internal */
- #define RPMTAG_TRIGGERFLAGS 1068 /* internal */
- #define RPMTAG_TRIGGERINDEX 1069 /* internal */
- #define RPMTAG_VERIFYSCRIPT 1079
- #define RPMTAG_CHANGELOGTIME 1080
- #define RPMTAG_CHANGELOGNAME 1081
- #define RPMTAG_CHANGELOGTEXT 1082
- #define RPMTAG_BROKENMD5 1083 /* internal */
- #define RPMTAG_PREREQ 1084 /* internal */
- #define RPMTAG_PREINPROG 1085
- #define RPMTAG_POSTINPROG 1086
- #define RPMTAG_PREUNPROG 1087
- #define RPMTAG_POSTUNPROG 1088
- #define RPMTAG_BUILDARCHS 1089
- #define RPMTAG_OBSOLETES 1090
-
- #define RPMTAG_EXTERNAL_TAG 1000000
-
- #define RPMFILE_STATE_NORMAL 0
- #define RPMFILE_STATE_REPLACED 1
- #define RPMFILE_STATE_NOTINSTALLED 2
- #define RPMFILE_STATE_NETSHARED 3
-
- /* these can be ORed together */
- #define RPMFILE_CONFIG (1 << 0)
- #define RPMFILE_DOC (1 << 1)
- #define RPMFILE_DONOTUSE (1 << 2)
- #define RPMFILE_MISSINGOK (1 << 3)
- #define RPMFILE_NOREPLACE (1 << 4)
- #define RPMFILE_SPECFILE (1 << 5)
-
- #define RPMINSTALL_REPLACEPKG (1 << 0)
- #define RPMINSTALL_REPLACEFILES (1 << 1)
- #define RPMINSTALL_TEST (1 << 2)
- #define RPMINSTALL_UPGRADE (1 << 3)
- #define RPMINSTALL_UPGRADETOOLD (1 << 4)
- #define RPMINSTALL_NODOCS (1 << 5)
- #define RPMINSTALL_NOSCRIPTS (1 << 6)
- #define RPMINSTALL_NOARCH (1 << 7)
- #define RPMINSTALL_NOOS (1 << 8)
- #define RPMINSTALL_ALLFILES (1 << 9)
- #define RPMINSTALL_JUSTDB (1 << 10)
- #define RPMINSTALL_KEEPOBSOLETE (1 << 11)
-
- #define RPMUNINSTALL_TEST (1 << 0)
- #define RPMUNINSTALL_NOSCRIPTS (1 << 1)
- #define RPMUNINSTALL_JUSTDB (1 << 2)
-
- #define RPMVERIFY_NONE 0
- #define RPMVERIFY_MD5 (1 << 0)
- #define RPMVERIFY_FILESIZE (1 << 1)
- #define RPMVERIFY_LINKTO (1 << 2)
- #define RPMVERIFY_USER (1 << 3)
- #define RPMVERIFY_GROUP (1 << 4)
- #define RPMVERIFY_MTIME (1 << 5)
- #define RPMVERIFY_MODE (1 << 6)
- #define RPMVERIFY_RDEV (1 << 7)
- #define RPMVERIFY_ALL ~(RPMVERIFY_NONE)
-
- #define RPMSENSE_ANY 0
- #define RPMSENSE_SERIAL (1 << 0)
- #define RPMSENSE_LESS (1 << 1)
- #define RPMSENSE_GREATER (1 << 2)
- #define RPMSENSE_EQUAL (1 << 3)
- #define RPMSENSE_PROVIDES (1 << 4) /* only used internally by builds */
- #define RPMSENSE_CONFLICTS (1 << 5) /* only used internally by builds */
- #define RPMSENSE_PREREQ (1 << 6)
- #define RPMSENSE_OBSOLETES (1 << 7) /* only used internally by builds */
- #define RPMSENSE_SENSEMASK 15 /* Mask to get senses, ie serial, */
- /* less, greater, equal. */
-
- #define RPMSENSE_TRIGGER_IN (1 << 16)
- #define RPMSENSE_TRIGGER_UN (1 << 17)
-
- /* Stuff for maintaining "variables" like SOURCEDIR, BUILDDIR, etc */
-
- #define RPMVAR_SOURCEDIR 0
- #define RPMVAR_BUILDDIR 1
- /* #define RPMVAR_DOCDIR 2 -- No longer used */
- #define RPMVAR_OPTFLAGS 3
- #define RPMVAR_TOPDIR 4
- #define RPMVAR_SPECDIR 5
- #define RPMVAR_ROOT 6
- #define RPMVAR_RPMDIR 7
- #define RPMVAR_SRPMDIR 8
- /* #define RPMVAR_ARCHSENSITIVE 9 -- No longer used */
- #define RPMVAR_REQUIREDISTRIBUTION 10
- /* #define RPMVAR_REQUIREGROUP 11 -- No longer used */
- #define RPMVAR_REQUIREVENDOR 12
- #define RPMVAR_DISTRIBUTION 13
- #define RPMVAR_VENDOR 14
- #define RPMVAR_MESSAGELEVEL 15
- #define RPMVAR_REQUIREICON 16
- #define RPMVAR_TIMECHECK 17
- #define RPMVAR_SIGTYPE 18
- #define RPMVAR_PGP_PATH 19
- #define RPMVAR_PGP_NAME 20
- /* #define RPMVAR_PGP_SECRING 21 -- No longer used */
- /* #define RPMVAR_PGP_PUBRING 22 -- No longer used */
- #define RPMVAR_EXCLUDEDOCS 23
- /* #define RPMVAR_BUILDARCH 24 -- No longer used */
- /* #define RPMVAR_BUILDOS 25 -- No longer used */
- #define RPMVAR_BUILDROOT 26
- #define RPMVAR_DBPATH 27
- #define RPMVAR_PACKAGER 28
- #define RPMVAR_FTPPROXY 29
- #define RPMVAR_TMPPATH 30
- /* #define RPMVAR_CPIOBIN 31 -- No longer used */
- #define RPMVAR_FTPPORT 32
- #define RPMVAR_NETSHAREDPATH 33
- #define RPMVAR_DEFAULTDOCDIR 34
- #define RPMVAR_FIXPERMS 35
- #define RPMVAR_GZIPBIN 36
- #define RPMVAR_RPMFILENAME 37
- #define RPMVAR_PROVIDES 38
-
- #define RPMVAR_NUM 39 /* number of RPMVAR entries */
-
- char * rpmGetVar(int var);
- int rpmGetBooleanVar(int var);
- void rpmSetVar(int var, char *val);
-
- /** rpmrc.c **/
-
- #define RPM_MACHTABLE_INSTARCH 0
- #define RPM_MACHTABLE_INSTOS 1
- #define RPM_MACHTABLE_BUILDARCH 2
- #define RPM_MACHTABLE_BUILDOS 3
- #define RPM_MACHTABLE_COUNT 4 /* number of arch/os tables */
-
- /* rpmReadConfigFiles() is for backwards compatibility only! It won't
- work if building is true! */
- int rpmReadConfigFiles(char * file, char * arch, char * os, int building);
- int rpmReadRC(char * file);
- void rpmGetArchInfo(char ** name, int * num);
- void rpmGetOsInfo(char ** name, int * num);
- int rpmMachineScore(int type, char * name);
- int rpmShowRC(FILE *f);
- void rpmSetTables(int archTable, int osTable); /* only used by build code */
- /* if either are NULL, they are set to the default value (munged uname())
- pushed through a translation table (if appropriate) */
- void rpmSetMachine(char * arch, char * os);
-
- /** **/
-
- typedef struct rpmdb_s * rpmdb;
-
- typedef void (*rpmNotifyFunction)(const unsigned long amount,
- const unsigned long total);
-
- int rpmdbOpen (char * root, rpmdb * dbp, int mode, int perms);
- /* 0 on error */
- int rpmdbInit(char * root, int perms);
- /* nonzero on error */
- void rpmdbClose (rpmdb db);
-
- int rpmdbFirstRecNum(rpmdb db);
- int rpmdbNextRecNum(rpmdb db, unsigned int lastOffset);
- /* 0 at end, -1 on error */
-
- Header rpmdbGetRecord(rpmdb db, unsigned int offset);
- int rpmdbFindByFile(rpmdb db, char * filespec, dbiIndexSet * matches);
- int rpmdbFindByGroup(rpmdb db, char * group, dbiIndexSet * matches);
- int rpmdbFindPackage(rpmdb db, char * name, dbiIndexSet * matches);
- int rpmdbFindByProvides(rpmdb db, char * provides, dbiIndexSet * matches);
- int rpmdbFindByRequiredBy(rpmdb db, char * requires, dbiIndexSet * matches);
- int rpmdbFindByConflicts(rpmdb db, char * conflicts, dbiIndexSet * matches);
-
- /* these are just convience functions */
- int rpmdbFindByLabel(rpmdb db, char * label, dbiIndexSet * matches);
- int rpmdbFindByHeader(rpmdb db, Header h, dbiIndexSet * matches);
-
- int rpmInstallSourcePackage(char * root, int fd, char ** specFile,
- rpmNotifyFunction notify, char * labelFormat);
- int rpmInstallPackage(char * rootdir, rpmdb db, int fd, char * prefix,
- int flags, rpmNotifyFunction notify, char * labelFormat,
- char * netsharedPath);
- int rpmVersionCompare(Header first, Header second);
- int rpmRemovePackage(char * root, rpmdb db, unsigned int offset, int flags);
- int rpmdbRebuild(char * root);
-
- int rpmVerifyFile(char * root, Header h, int filenum, int * result,
- int omitMask);
- int rpmVerifyScript(char * root, Header h, int err);
-
- typedef struct rpmDependencyCheck * rpmDependencies;
-
- struct rpmDependencyConflict {
- char * byName, * byVersion, * byRelease;
- /* these needs fields are misnamed -- they are used for the package
- which isn't needed as well */
- char * needsName, * needsVersion;
- int needsFlags;
- void * suggestedPackage; /* NULL if none */
- enum { RPMDEP_SENSE_REQUIRES, RPMDEP_SENSE_CONFLICTS } sense;
- } ;
-
- rpmDependencies rpmdepDependencies(rpmdb db); /* db may be NULL */
- void rpmdepAddPackage(rpmDependencies rpmdep, Header h, void * key);
- void rpmdepAvailablePackage(rpmDependencies rpmdep, Header h, void * key);
- void rpmdepUpgradePackage(rpmDependencies rpmdep, Header h, void * key);
- void rpmdepRemovePackage(rpmDependencies rpmdep, int dboffset);
-
- /* this checks for dependency satisfaction, but *not* ordering */
- int rpmdepCheck(rpmDependencies rpmdep,
- struct rpmDependencyConflict ** conflicts, int * numConflicts);
- /* Orders items, returns error on circle, finals keys[] is NULL. No dependency
- check is done, use rpmdepCheck() for that. If dependencies are not
- satisfied a "best-try" ordering is returned. */
- int rpmdepOrder(rpmDependencies order, void *** keysListPtr);
-
- void rpmdepDone(rpmDependencies rpmdep);
- void rpmdepFreeConflicts(struct rpmDependencyConflict * conflicts, int
- numConflicts);
-
- /** messages.c **/
-
- #define RPMMESS_DEBUG 1
- #define RPMMESS_VERBOSE 2
- #define RPMMESS_NORMAL 3
- #define RPMMESS_WARNING 4
- #define RPMMESS_ERROR 5
- #define RPMMESS_FATALERROR 6
-
- #define RPMMESS_QUIET (RPMMESS_NORMAL + 1)
-
- void rpmIncreaseVerbosity(void);
- void rpmSetVerbosity(int level);
- int rpmGetVerbosity(void);
- int rpmIsVerbose(void);
- int rpmIsDebug(void);
-
- /** rpmlead.c **/
-
- #define RPMLEAD_BINARY 0
- #define RPMLEAD_SOURCE 1
-
- #define RPMLEAD_MAGIC0 0xed
- #define RPMLEAD_MAGIC1 0xab
- #define RPMLEAD_MAGIC2 0xee
- #define RPMLEAD_MAGIC3 0xdb
-
- /* The lead needs to be 8 byte aligned */
-
- #define RPMLEAD_SIZE 96
-
- struct rpmlead {
- unsigned char magic[4];
- unsigned char major, minor;
- short type;
- short archnum;
- char name[66];
- short osnum;
- short signature_type;
- char reserved[16]; /* pads to 96 bytes -- 8 byte aligned! */
- } ;
-
- struct oldrpmlead { /* for version 1 packages */
- unsigned char magic[4];
- unsigned char major, minor;
- short type;
- short archnum;
- char name[66];
- unsigned int specOffset;
- unsigned int specLength;
- unsigned int archiveOffset;
- } ;
-
- /** rpmerr.c **/
-
- typedef void (*rpmErrorCallBackType)(void);
-
- void rpmError(int code, char * format, ...);
- int rpmErrorCode(void);
- char *rpmErrorString(void);
- rpmErrorCallBackType rpmErrorSetCallback(rpmErrorCallBackType);
-
- #define RPMERR_GDBMOPEN -2 /* gdbm open failed */
- #define RPMERR_GDBMREAD -3 /* gdbm read failed */
- #define RPMERR_GDBMWRITE -4 /* gdbm write failed */
- #define RPMERR_INTERNAL -5 /* internal RPM error */
- #define RPMERR_DBCORRUPT -6 /* rpm database is corrupt */
- #define RPMERR_OLDDBCORRUPT -7 /* old style rpm database is corrupt */
- #define RPMERR_OLDDBMISSING -8 /* old style rpm database is missing */
- #define RPMERR_NOCREATEDB -9 /* cannot create new database */
- #define RPMERR_DBOPEN -10 /* database open failed */
- #define RPMERR_DBGETINDEX -11 /* database get from index failed */
- #define RPMERR_DBPUTINDEX -12 /* database get from index failed */
- #define RPMERR_NEWPACKAGE -13 /* package is too new to handle */
- #define RPMERR_BADMAGIC -14 /* bad magic for an RPM */
- #define RPMERR_RENAME -15 /* rename(2) failed */
- #define RPMERR_UNLINK -16 /* unlink(2) failed */
- #define RPMERR_RMDIR -17 /* rmdir(2) failed */
- #define RPMERR_PKGINSTALLED -18 /* package already installed */
- #define RPMERR_CHOWN -19 /* chown() call failed */
- #define RPMERR_NOUSER -20 /* user does not exist */
- #define RPMERR_NOGROUP -21 /* group does not exist */
- #define RPMERR_MKDIR -22 /* mkdir() call failed */
- #define RPMERR_FILECONFLICT -23 /* file being installed exists */
- #define RPMERR_RPMRC -24 /* bad line in rpmrc */
- #define RPMERR_NOSPEC -25 /* .spec file is missing */
- #define RPMERR_NOTSRPM -26 /* a source rpm was expected */
- #define RPMERR_FLOCK -27 /* locking the database failed */
- #define RPMERR_OLDPACKAGE -28 /* trying upgrading to old version */
- #define RPMERR_BADARCH -29 /* bad architecture or arch mismatch */
- #define RPMERR_CREATE -30 /* failed to create a file */
- #define RPMERR_NOSPACE -31 /* out of disk space */
- #define RPMERR_NORELOCATE -32 /* tried to relocate improper package */
- #define RPMERR_BADOS -33 /* bad architecture or arch mismatch */
- #define RPMMESS_BACKUP -34 /* backup made during [un]install */
- #define RPMERR_MTAB -35 /* failed to read mount table */
- #define RPMERR_STAT -36 /* failed to stat something */
- #define RPMERR_BADDEV -37 /* file on device not listed in mtab */
- #define RPMMESS_ALTNAME -38 /* file written as .rpmnew */
- #define RPMMESS_PREREQLOOP -39 /* loop in prerequisites */
-
- /* spec.c build.c pack.c */
- #define RPMERR_UNMATCHEDIF -107 /* unclosed %ifarch or %ifos */
- #define RPMERR_BADARG -109
- #define RPMERR_SCRIPT -110 /* errors related to script exec */
- #define RPMERR_READERROR -111
- #define RPMERR_UNKNOWNOS -112
- #define RPMERR_UNKNOWNARCH -113
- #define RPMERR_EXEC -114
- #define RPMERR_FORK -115
- #define RPMERR_CPIO -116
- #define RPMERR_GZIP -117
- #define RPMERR_BADSPEC -118
- #define RPMERR_LDD -119 /* couldn't understand ldd output */
- #define RPMERR_BADFILENAME -120
-
- #define RPMERR_BADSIGTYPE -200 /* Unknown signature type */
- #define RPMERR_SIGGEN -201 /* Error generating signature */
-
- /** signature.c **/
-
- /**************************************************/
- /* */
- /* Signature Tags */
- /* */
- /* These go in the sig Header to specify */
- /* individual signature types. */
- /* */
- /**************************************************/
-
- #define RPMSIGTAG_SIZE 1000
- /* the md5 sum was broken *twice* on big endian machines */
- #define RPMSIGTAG_LEMD5_1 1001
- #define RPMSIGTAG_PGP 1002
- #define RPMSIGTAG_LEMD5_2 1003
- #define RPMSIGTAG_MD5 1004
-
- /**************************************************/
- /* */
- /* verifySignature() results */
- /* */
- /**************************************************/
-
- /* verifySignature() results */
- #define RPMSIG_OK 0
- #define RPMSIG_UNKNOWN 1
- #define RPMSIG_BAD 2
- #define RPMSIG_NOKEY 3 /* Do not have the key to check this signature */
-
- void rpmFreeSignature(Header h);
-
- int rpmVerifySignature(char *file, int_32 sigTag, void *sig, int count,
- char *result);
-
- int rpmGetFilesystemList(char *** listptr, int * num);
- int rpmGetFilesystemUsage(char ** filelist, int_32 * fssizes, int numFiles,
- uint_32 ** usagesPtr, int flags);
-
- #endif
-