libbb/procps: smaller global data for username/groupname cache
function old new delta get_cached 101 133 +32 cache_user_group - 4 +4 get_cached_username 17 14 -3 username 8 - -8 groupname 8 - -8 clear_username_cache 65 47 -18 ------------------------------------------------------------------------------ (add/remove: 1/2 grow/shrink: 1/2 up/down: 36/-37) Total: -1 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
b230ff9d8f
commit
89a55972fd
@ -21,40 +21,29 @@ typedef struct cache_t {
|
|||||||
int size;
|
int size;
|
||||||
} cache_t;
|
} cache_t;
|
||||||
|
|
||||||
static cache_t username, groupname;
|
static cache_t *cache_user_group;
|
||||||
|
|
||||||
static void clear_cache(cache_t *cp)
|
|
||||||
{
|
|
||||||
free(cp->cache);
|
|
||||||
cp->cache = NULL;
|
|
||||||
cp->size = 0;
|
|
||||||
}
|
|
||||||
void FAST_FUNC clear_username_cache(void)
|
void FAST_FUNC clear_username_cache(void)
|
||||||
{
|
{
|
||||||
clear_cache(&username);
|
if (cache_user_group) {
|
||||||
clear_cache(&groupname);
|
free(cache_user_group[0].cache);
|
||||||
|
free(cache_user_group[1].cache);
|
||||||
|
free(cache_user_group);
|
||||||
|
cache_user_group = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0 /* more generic, but we don't need that yet */
|
static char* get_cached(int user_group, uid_t id,
|
||||||
/* Returns -N-1 if not found. */
|
|
||||||
/* cp->cache[N] is allocated and must be filled in this case */
|
|
||||||
static int get_cached(cache_t *cp, uid_t id)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < cp->size; i++)
|
|
||||||
if (cp->cache[i].id == id)
|
|
||||||
return i;
|
|
||||||
i = cp->size++;
|
|
||||||
cp->cache = xrealloc_vector(cp->cache, 2, i);
|
|
||||||
cp->cache[i++].id = id;
|
|
||||||
return -i;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static char* get_cached(cache_t *cp, uid_t id,
|
|
||||||
char* FAST_FUNC x2x_utoa(uid_t id))
|
char* FAST_FUNC x2x_utoa(uid_t id))
|
||||||
{
|
{
|
||||||
|
cache_t *cp;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (!cache_user_group)
|
||||||
|
cache_user_group = xzalloc(sizeof(cache_user_group[0]) * 2);
|
||||||
|
|
||||||
|
cp = &cache_user_group[user_group];
|
||||||
|
|
||||||
for (i = 0; i < cp->size; i++)
|
for (i = 0; i < cp->size; i++)
|
||||||
if (cp->cache[i].id == id)
|
if (cp->cache[i].id == id)
|
||||||
return cp->cache[i].name;
|
return cp->cache[i].name;
|
||||||
@ -67,11 +56,11 @@ static char* get_cached(cache_t *cp, uid_t id,
|
|||||||
}
|
}
|
||||||
const char* FAST_FUNC get_cached_username(uid_t uid)
|
const char* FAST_FUNC get_cached_username(uid_t uid)
|
||||||
{
|
{
|
||||||
return get_cached(&username, uid, uid2uname_utoa);
|
return get_cached(0, uid, uid2uname_utoa);
|
||||||
}
|
}
|
||||||
const char* FAST_FUNC get_cached_groupname(gid_t gid)
|
const char* FAST_FUNC get_cached_groupname(gid_t gid)
|
||||||
{
|
{
|
||||||
return get_cached(&groupname, gid, gid2group_utoa);
|
return get_cached(1, gid, gid2group_utoa);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user