diff options
-rw-r--r-- | lib/rpmug.c | 28 | ||||
-rw-r--r-- | lib/rpmug.h | 2 |
2 files changed, 30 insertions, 0 deletions
diff --git a/lib/rpmug.c b/lib/rpmug.c index 47aa6ccf5..2bb18e5a3 100644 --- a/lib/rpmug.c +++ b/lib/rpmug.c @@ -5,9 +5,36 @@ #include <rpm/rpmlog.h> #include <rpm/rpmstring.h> +#include "lib/misc.h" #include "lib/rpmug.h" #include "debug.h" +#define HASHTYPE strCache +#define HTKEYTYPE const char * +#include "lib/rpmhash.H" +#include "lib/rpmhash.C" +#undef HASHTYPE +#undef HTKEYTYPE + +static strCache strStash = NULL; + +const char * rpmugStashStr(const char *str) +{ + const char *ret = NULL; + if (str) { + if (strStash == NULL) { + strStash = strCacheCreate(64, hashFunctionString, strcmp, + (strCacheFreeKey)rfree); + } + + if (!strCacheGetEntry(strStash, str, &ret)) { + strCacheAddEntry(strStash, xstrdup(str)); + (void) strCacheGetEntry(strStash, str, &ret); + } + } + return ret; +} + /* * These really ought to use hash tables. I just made the * guess that most files would be owned by root or the same person/group @@ -171,4 +198,5 @@ void rpmugFree(void) rpmugGid(NULL, NULL); rpmugUname(-1); rpmugGname(-1); + strCacheFree(strStash); } diff --git a/lib/rpmug.h b/lib/rpmug.h index 7dbe77d15..35e5d631d 100644 --- a/lib/rpmug.h +++ b/lib/rpmug.h @@ -3,6 +3,8 @@ #include <sys/types.h> +const char * rpmugStashStr(const char *str); + int rpmugUid(const char * name, uid_t * uid); int rpmugGid(const char * name, gid_t * gid); |