From 4851d131d62936c531dc4044ce19a4c4a66ba0a1 Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Tue, 25 Aug 2009 21:06:35 +0200 Subject: assign errno for getgrnam_r()/getpwnam_r() On Mon, Aug 24, 2009 at 19:50, Lennart Poettering wrote: > One little comment here: on POSIX getrnam_r() doesn't touch > errno. Instead it returns the error value as return value. --- libudev/libudev-util-private.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) (limited to 'libudev/libudev-util-private.c') diff --git a/libudev/libudev-util-private.c b/libudev/libudev-util-private.c index 3641b3630f..84dee559c4 100644 --- a/libudev/libudev-util-private.c +++ b/libudev/libudev-util-private.c @@ -135,8 +135,7 @@ uid_t util_lookup_user(struct udev *udev, const char *user) if (endptr[0] == '\0') return uid; - errno = 0; - getpwnam_r(user, &pwbuf, buf, buflen, &pw); + errno = getpwnam_r(user, &pwbuf, buf, buflen, &pw); if (pw != NULL) return pw->pw_uid; if (errno == 0 || errno == ENOENT || errno == ESRCH) @@ -149,7 +148,7 @@ uid_t util_lookup_user(struct udev *udev, const char *user) gid_t util_lookup_group(struct udev *udev, const char *group) { char *endptr; - int buflen; + int buflen = sysconf(_SC_GETGR_R_SIZE_MAX); char *buf; struct group grbuf; struct group *gr; @@ -160,28 +159,23 @@ gid_t util_lookup_group(struct udev *udev, const char *group) gid = strtoul(group, &endptr, 10); if (endptr[0] == '\0') return gid; - - buflen = sysconf(_SC_GETGR_R_SIZE_MAX); - if (buflen < 0) - buflen = 1000; buf = NULL; gid = 0; for (;;) { buf = realloc(buf, buflen); if (!buf) break; - errno = 0; - getgrnam_r(group, &grbuf, buf, buflen, &gr); - if (gr != NULL) + errno = getgrnam_r(group, &grbuf, buf, buflen, &gr); + if (gr != NULL) { gid = gr->gr_gid; - else if (errno == ERANGE) { + } else if (errno == ERANGE) { buflen *= 2; continue; - } - else if (errno == 0 || errno == ENOENT || errno == ESRCH) + } else if (errno == 0 || errno == ENOENT || errno == ESRCH) { err(udev, "specified group '%s' unknown\n", group); - else + } else { err(udev, "error resolving group '%s': %m\n", group); + } break; } free(buf); -- cgit v1.2.3-54-g00ecf