From b602f1c1513328fe91f70233c78d11d9e638982d Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Fri, 20 May 2016 14:28:13 -0500 Subject: Add bufgetgrgid() --- lib/lib.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'lib/lib.c') diff --git a/lib/lib.c b/lib/lib.c index 98597b24..66814a45 100644 --- a/lib/lib.c +++ b/lib/lib.c @@ -1102,3 +1102,31 @@ struct passwd *bufgetpwuid(uid_t uid) return &list->pw; } + +// Return cached passwd entries. +struct group *bufgetgrgid(gid_t gid) +{ + struct grgidbuf_list { + struct grgidbuf_list *next; + struct group gr; + } *list; + struct group *temp; + static struct grgidbuf_list *grgidbuf; + + for (list = grgidbuf; list; list = list->next) + if (list->gr.gr_gid == gid) return &(list->gr); + + list = xmalloc(512); + list->next = grgidbuf; + + errno = getgrgid_r(gid, &list->gr, sizeof(*list)+(char *)list, + 512-sizeof(*list), &temp); + if (!temp) { + free(list); + + return 0; + } + grgidbuf = list; + + return &list->gr; +} -- cgit v1.2.3