diff options
Diffstat (limited to 'lib/rpmlib.h')
-rw-r--r-- | lib/rpmlib.h | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/lib/rpmlib.h b/lib/rpmlib.h new file mode 100644 index 0000000..6ccdeb7 --- /dev/null +++ b/lib/rpmlib.h @@ -0,0 +1,210 @@ +#ifndef H_RPMLIB +#define H_RPMLIB + +/** \ingroup rpmcli rpmrc rpmdep rpmtrans rpmdb lead signature header payload dbi + * \file lib/rpmlib.h + * + * In Memoriam: Steve Taylor <staylor@redhat.com> was here, now he's not. + * + */ + +#include <popt.h> + +#include <rpm/rpmio.h> +#include <rpm/header.h> +#include <rpm/rpmtag.h> +#include <rpm/rpmds.h> /* XXX move rpmlib provides to rpmds instead */ +#include <rpm/rpmpgp.h> +#ifdef _RPM_4_4_COMPAT +#include <rpm/rpmlegacy.h> /* legacy compat definitions if enabled */ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct rpmMacroContext_s * rpmGlobalMacroContext; + +extern struct rpmMacroContext_s * rpmCLIMacroContext; + +extern const char * const RPMVERSION; + +extern const char * const rpmNAME; + +extern const char * const rpmEVR; + +extern const int rpmFLAGS; + +/** \ingroup header + * Translate and merge legacy signature tags into header. + * @todo Remove headerSort() through headerInitIterator() modifies sig. + * @param h header + * @param sigh signature header + */ +void headerMergeLegacySigs(Header h, const Header sigh); + +/** \ingroup header + * Regenerate signature header. + * @todo Remove headerSort() through headerInitIterator() modifies h. + * @param h header + * @param noArchiveSize don't copy archive size tag (pre rpm-4.1) + * @return regenerated signature header + */ +Header headerRegenSigHeader(const Header h, int noArchiveSize); + +/* ==================================================================== */ +/** \name RPMRC */ + +/** \ingroup rpmrc + * Build and install arch/os table identifiers. + * @todo Eliminate from API. + */ +enum rpm_machtable_e { + RPM_MACHTABLE_INSTARCH = 0, /*!< Install platform architecture. */ + RPM_MACHTABLE_INSTOS = 1, /*!< Install platform operating system. */ + RPM_MACHTABLE_BUILDARCH = 2, /*!< Build platform architecture. */ + RPM_MACHTABLE_BUILDOS = 3 /*!< Build platform operating system. */ +}; +#define RPM_MACHTABLE_COUNT 4 /*!< No. of arch/os tables. */ + +/** \ingroup rpmrc + * Read macro configuration file(s) for a target. + * @param file colon separated files to read (NULL uses default) + * @param target target platform (NULL uses default) + * @return 0 on success, -1 on error + */ +int rpmReadConfigFiles(const char * file, + const char * target); + +/** \ingroup rpmrc + * Return current arch name and/or number. + * @todo Generalize to extract arch component from target_platform macro. + * @retval name address of arch name (or NULL) + * @retval num address of arch number (or NULL) + */ +void rpmGetArchInfo( const char ** name, + int * num); + +/** \ingroup rpmrc + * Return current os name and/or number. + * @todo Generalize to extract os component from target_platform macro. + * @retval name address of os name (or NULL) + * @retval num address of os number (or NULL) + */ +void rpmGetOsInfo( const char ** name, + int * num); + +/** \ingroup rpmrc + * Return arch/os score of a name. + * An arch/os score measures the "nearness" of a name to the currently + * running (or defined) platform arch/os. For example, the score of arch + * "i586" on an i686 platform is (usually) 2. The arch/os score is used + * to select one of several otherwise identical packages using the arch/os + * tags from the header as hints of the intended platform for the package. + * @todo Rewrite to use RE's against config.guess target platform output. + * + * @param type any of the RPM_MACHTABLE_* constants + * @param name name + * @return arch score (0 is no match, lower is preferred) + */ +int rpmMachineScore(int type, const char * name); + +/** \ingroup rpmrc + * Display current rpmrc (and macro) configuration. + * @param fp output file handle + * @return 0 always + */ +int rpmShowRC(FILE * fp); + +/** \ingroup rpmrc + * @deprecated Use addMacro to set _target_* macros. + * @todo Eliminate from API. + # @note Only used by build code. + * @param archTable + * @param osTable + */ +void rpmSetTables(int archTable, int osTable); + +/** \ingroup rpmrc + * Destroy rpmrc arch/os compatibility tables. + * @todo Eliminate from API. + */ +void rpmFreeRpmrc(void); + +/** + * Compare headers to determine which header is "newer". + * @param first 1st header + * @param second 2nd header + * @return result of comparison + */ +int rpmVersionCompare(Header first, Header second); + +/** \ingroup header + * Check for supported payload format in header. + * @param h header to check + * @return RPMRC_OK if supported, RPMRC_FAIL otherwise + */ +rpmRC headerCheckPayloadFormat(Header h); + +/** \ingroup header + * Check header consistency, performing headerGetEntry() the hard way. + * + * Sanity checks on the header are performed while looking for a + * header-only digest or signature to verify the blob. If found, + * the digest or signature is verified. + * + * @param ts transaction set + * @param uh unloaded header blob + * @param uc no. of bytes in blob (or 0 to disable) + * @retval *msg verification error message (or NULL) + * @return RPMRC_OK on success + */ +rpmRC headerCheck(rpmts ts, const void * uh, size_t uc, char ** msg); + +/** \ingroup header + * Return checked and loaded header. + * @param ts transaction set + * @param fd file handle + * @retval hdrp address of header (or NULL) + * @retval *msg verification error message (or NULL) + * @return RPMRC_OK on success + */ +rpmRC rpmReadHeader(rpmts ts, FD_t fd, Header *hdrp, char ** msg); + +/** \ingroup header + * Return package header from file handle, verifying digests/signatures. + * @param ts transaction set + * @param fd file handle + * @param fn file name + * @retval hdrp address of header (or NULL) + * @return RPMRC_OK on success + */ +rpmRC rpmReadPackageFile(rpmts ts, FD_t fd, + const char * fn, Header * hdrp); + +/** \ingroup rpmtrans + * Install source package. + * @param ts transaction set + * @param fd file handle + * @retval specFilePtr address of spec file name (or NULL) + * @retval cookie address of cookie pointer (or NULL) + * @return rpmRC return code + */ +rpmRC rpmInstallSourcePackage(rpmts ts, FD_t fd, + char ** specFilePtr, + char ** cookie); + +/** \ingroup rpmtrans + * Segmented string compare for version or release strings. + * + * @param a 1st string + * @param b 2nd string + * @return +1 if a is "newer", 0 if equal, -1 if b is "newer" + */ +int rpmvercmp(const char * a, const char * b); + +#ifdef __cplusplus +} +#endif + +#endif /* H_RPMLIB */ |