chiark / gitweb /
assign errno for getgrnam_r()/getpwnam_r()
authorKay Sievers <kay.sievers@vrfy.org>
Tue, 25 Aug 2009 19:06:35 +0000 (21:06 +0200)
committerKay Sievers <kay.sievers@vrfy.org>
Tue, 25 Aug 2009 19:09:22 +0000 (21:09 +0200)
On Mon, Aug 24, 2009 at 19:50, Lennart Poettering<lennart@poettering.net> 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

index 3641b3630f8e4ef1fef56c905937cbb3daf043d7..84dee559c40cafdb4c345786c8d6d61dee88a4fc 100644 (file)
@@ -135,8 +135,7 @@ uid_t util_lookup_user(struct udev *udev, const char *user)
        if (endptr[0] == '\0')
                return uid;
 
        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)
        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;
 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;
        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;
        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;
        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;
                        gid = gr->gr_gid;
-               else if (errno == ERANGE) {
+               else if (errno == ERANGE) {
                        buflen *= 2;
                        continue;
                        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);
                        err(udev, "specified group '%s' unknown\n", group);
-               else
+               } else {
                        err(udev, "error resolving group '%s': %m\n", group);
                        err(udev, "error resolving group '%s': %m\n", group);
+               }
                break;
        }
        free(buf);
                break;
        }
        free(buf);