# rpmdb/fprint.c File Reference

`#include "system.h"`
`#include <rpmmacro.h>`
`#include <rpmdb.h>`
`#include "fprint.h"`
`#include "rpmhash.h"`
`#include "debug.h"`
Include dependency graph for fprint.c:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

## Functions

fingerPrintCache | fpCacheCreate (int sizeHint)
| Create finger print cache.
fingerPrintCache | fpCacheFree (fingerPrintCache cache)
| Destroy finger print cache.
static struct fprintCacheEntry_s * | cacheContainsDirectory (fingerPrintCache cache, const char *dirName)
| Find directory name entry in cache.
static fingerPrint | doLookup (fingerPrintCache cache, const char *dirName, const char *baseName, int scareMem)
| Return finger print of a file path.
fingerPrint | fpLookup (fingerPrintCache cache, const char *dirName, const char *baseName, int scareMem)
| Return finger print of a file path.
uint32_t | fpHashFunction (uint32_t h, const void *data, size_t size)
| Return hash value for a finger print.
int | fpEqual (const void *key1, const void *key2)
| Compare two finger print entries.
void | fpLookupList (fingerPrintCache cache, const char **dirNames, const char **baseNames, const uint32_t *dirIndexes, uint32_t fileCount, fingerPrint *fpList)
| Return finger prints of an array of file paths.

## Detailed Description

Definition in file fprint.c.

## Function Documentation

static struct fprintCacheEntry_s* cacheContainsDirectory | ( | fingerPrintCache | cache,
|  | const char * | dirName |
| ) |  |  | `[static, read]`

Find directory name entry in cache.

Parameters:

  | cache | pointer to fingerprint cache
  | dirName | string to locate in cache

Returns:
  pointer to directory name entry (or NULL if not found).

Definition at line 35 of file fprint.c.

References fprintCache_s::ht, and htGetEntry().

Referenced by doLookup().

static fingerPrint doLookup | ( | fingerPrintCache | cache,
|  | const char * | dirName,
|  | const char * | baseName,
|  | int | scareMem |
| ) |  |  | `[static]`

Return finger print of a file path.

Parameters:

  | cache | pointer to fingerprint cache
  | dirName | leading directory name of path
  | baseName | file name of path
  | scareMem |

Returns:
  pointer to the finger print associated with a file path.

Definition at line 55 of file fprint.c.

References alloca(), fingerPrint_s::baseName, cacheContainsDirectory(), fprintCacheEntry_s::dev, fprintCacheEntry_s::dirName, fingerPrint_s::entry, fprintCache_s::ht, htAddEntry(), fprintCacheEntry_s::ino, realpath(), rpmCleanPath(), stpncpy(), fingerPrint_s::subDir, xmalloc(), and xstrdup().

Referenced by fpLookup(), and fpLookupList().

fingerPrintCache fpCacheCreate | ( | int | sizeHint | ) |

Create finger print cache.

Parameters:

  | sizeHint | number of elements expected

Returns:
  pointer to initialized fingerprint cache

Definition at line 13 of file fprint.c.

References fprintCache_s::ht, htCreate(), and xmalloc().

Referenced by rpmdbFindByFile(), rpmdbFindFpList(), and rpmtsRun().

fingerPrintCache fpCacheFree | ( | fingerPrintCache | cache | ) |

Destroy finger print cache.

Parameters:

  | cache | pointer to fingerprint cache

Returns:
  NULL always

Definition at line 22 of file fprint.c.

References fprintCache_s::ht, and htFree().

Referenced by rpmdbFindByFile(), rpmdbFindFpList(), and rpmtsRun().

int fpEqual | ( | const void * | key1,
|  | const void * | key2 |
| ) |  |  |

Compare two finger print entries.

This routine is exactly equivalent to the FP_EQUAL macro.

Parameters:

  | key1 | finger print 1
  | key2 | finger print 2

Returns:
  result of comparing key1 and key2

Definition at line 201 of file fprint.c.

References FP_EQUAL.

Referenced by rpmtsRun().

uint32_t fpHashFunction | ( | uint32_t | h,
|  | const void * | data,
|  | size_t | size |
| ) |  |  |

Return hash value for a finger print.

Hash based on dev and inode only!

Parameters:

  | h | hash initial value
  | *data | finger print entry
  | size | size of fingerprint entry

Returns:
  hash value

Definition at line 186 of file fprint.c.

References fingerPrint_s::baseName, fprintCacheEntry_s::dev, fingerPrint_s::entry, and fprintCacheEntry_s::ino.

Referenced by rpmtsRun().

fingerPrint fpLookup | ( | fingerPrintCache | cache,
|  | const char * | dirName,
|  | const char * | baseName,
|  | int | scareMem |
| ) |  |  |

Return finger print of a file path.

Parameters:

  | cache | pointer to fingerprint cache
  | dirName | leading directory name of file path
  | baseName | base name of file path
  | scareMem |

Returns:
  pointer to the finger print associated with a file path.

Definition at line 180 of file fprint.c.

References doLookup().

Referenced by rpmdbFindByFile().

void fpLookupList | ( | fingerPrintCache | cache,
|  | const char ** | dirNames,
|  | const char ** | baseNames,
|  | const uint32_t * | dirIndexes,
|  | uint32_t | fileCount,
|  | fingerPrint * | fpList |
| ) |  |  |

Return finger prints of an array of file paths.

Warning:
  : scareMem is assumed!

Parameters:

  | cache | pointer to fingerprint cache
  | dirNames | directory names
  | baseNames | file base names
  | dirIndexes | index into dirNames for each baseNames
  | fileCount | number of file entries

Return values:

  | *fpList | array of finger prints

Definition at line 219 of file fprint.c.

References fingerPrint_s::baseName, doLookup(), fingerPrint_s::entry, and fingerPrint_s::subDir.

Referenced by rpmdbFindFpList(), and rpmtsRun().