108 lines
2.7 KiB
C
108 lines
2.7 KiB
C
#ifndef H_FINGERPRINT
|
|
#define H_FINGERPRINT
|
|
|
|
/** \ingroup rpmtrans
|
|
* \file lib/fprint.h
|
|
* Identify a file name path by a unique "finger print".
|
|
*/
|
|
|
|
#include <rpm/rpmtypes.h>
|
|
|
|
/**
|
|
*/
|
|
typedef struct fprintCache_s * fingerPrintCache;
|
|
|
|
/**
|
|
* @todo Convert to pointer and make abstract.
|
|
*/
|
|
typedef struct fingerPrint_s fingerPrint;
|
|
|
|
struct rpmffi_s {
|
|
rpmte p;
|
|
int fileno;
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* Create finger print cache.
|
|
* @param sizeHint number of elements expected
|
|
* @param pool string pool (or NULL for private)
|
|
* @return pointer to initialized fingerprint cache
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
fingerPrintCache fpCacheCreate(int sizeHint, rpmstrPool pool);
|
|
|
|
/**
|
|
* Destroy finger print cache.
|
|
* @param cache pointer to fingerprint cache
|
|
* @return NULL always
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
fingerPrintCache fpCacheFree(fingerPrintCache cache);
|
|
|
|
RPM_GNUC_INTERNAL
|
|
fingerPrint * fpCacheGetByFp(fingerPrintCache cache,
|
|
struct fingerPrint_s * fp, int ix,
|
|
struct rpmffi_s ** recs, int * numRecs);
|
|
|
|
RPM_GNUC_INTERNAL
|
|
void fpCachePopulate(fingerPrintCache cache, rpmts ts, int fileCount);
|
|
|
|
/* compare an existing fingerprint with a looked-up fingerprint for db/bn */
|
|
RPM_GNUC_INTERNAL
|
|
int fpLookupEquals(fingerPrintCache cache, fingerPrint * fp,
|
|
const char * dirName, const char * baseName);
|
|
|
|
RPM_GNUC_INTERNAL
|
|
const char *fpEntryDir(fingerPrintCache cache, fingerPrint *fp);
|
|
|
|
RPM_GNUC_INTERNAL
|
|
dev_t fpEntryDev(fingerPrintCache cache, fingerPrint *fp);
|
|
|
|
/**
|
|
* Return finger print of a file path.
|
|
* @param cache pointer to fingerprint cache
|
|
* @param dirName leading directory name of file path
|
|
* @param baseName base name of file path
|
|
* @retval fp pointer of fingerprint struct to fill out
|
|
* @return 0 on success
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
int fpLookup(fingerPrintCache cache,
|
|
const char * dirName, const char * baseName,
|
|
fingerPrint **fp);
|
|
|
|
/**
|
|
* Compare two finger print entries.
|
|
* This routine is exactly equivalent to the FP_EQUAL macro.
|
|
* @param key1 finger print 1
|
|
* @param key2 finger print 2
|
|
* @return result of comparing key1 and key2
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
int fpEqual(const fingerPrint * key1, const fingerPrint * key2);
|
|
|
|
/**
|
|
* Return finger prints of an array of file paths.
|
|
* @param cache pointer to fingerprint cache
|
|
* @param pool pointer to file name pool
|
|
* @param dirNames directory names
|
|
* @param baseNames file base names
|
|
* @param dirIndexes index into dirNames for each baseNames
|
|
* @param fileCount number of file entries
|
|
* @return pointer to array of finger prints
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
fingerPrint * fpLookupList(fingerPrintCache cache, rpmstrPool pool,
|
|
rpmsid * dirNames, rpmsid * baseNames,
|
|
const uint32_t * dirIndexes, int fileCount);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|