diff options
author | Rob Landley <rob@landley.net> | 2018-07-02 21:59:22 -0500 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2018-07-02 21:59:22 -0500 |
commit | 92a54f8092c3e7c5dafacea77f529d88ec5912b2 (patch) | |
tree | f67a159710eea1ce85f46f256a496460afdb2e94 | |
parent | 5a6179f8c3674792b680cf6ab23b7550acc2ed34 (diff) | |
download | toybox-92a54f8092c3e7c5dafacea77f529d88ec5912b2.tar.gz |
Fix bugs in yesterday's bufgetgrgid() work (reported by Elliott).
-rw-r--r-- | lib/lib.c | 12 |
1 files changed, 6 insertions, 6 deletions
@@ -1220,14 +1220,14 @@ struct passwd *bufgetpwuid(uid_t uid) } *list = 0; struct passwd *temp; static struct pwuidbuf_list *pwuidbuf; - int size = 0; + unsigned size = 256; // If we already have this one, return it. for (list = pwuidbuf; list; list = list->next) if (list->pw.pw_uid == uid) return &(list->pw); for (;;) { - list = xrealloc(list, size += 512); + list = xrealloc(list, size *= 2); errno = getpwuid_r(uid, &list->pw, sizeof(*list)+(char *)list, size-sizeof(*list), &temp); if (errno != ERANGE) break; @@ -1244,7 +1244,7 @@ struct passwd *bufgetpwuid(uid_t uid) return &list->pw; } -// Return cached passwd entries. +// Return cached group entries. struct group *bufgetgrgid(gid_t gid) { struct grgidbuf_list { @@ -1253,15 +1253,15 @@ struct group *bufgetgrgid(gid_t gid) } *list = 0; struct group *temp; static struct grgidbuf_list *grgidbuf; - int size = 0; + unsigned size = 256; for (list = grgidbuf; list; list = list->next) if (list->gr.gr_gid == gid) return &(list->gr); for (;;) { - list = xrealloc(temp, size += 512); + list = xrealloc(list, size *= 2); errno = getgrgid_r(gid, &list->gr, sizeof(*list)+(char *)list, - 4096-sizeof(*list), &temp); + size-sizeof(*list), &temp); if (errno != ERANGE) break; } if (!temp) { |