#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 was here, now he's not. * */ #include #include #include #include #include /* XXX move rpmlib provides to rpmds instead */ #include #ifdef _RPM_4_4_COMPAT #include /* 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 */