fix error return value for cuserid
authorRich Felker <dalias@aerifal.cx>
Sat, 13 Feb 2021 19:03:23 +0000 (14:03 -0500)
committerRich Felker <dalias@aerifal.cx>
Sat, 13 Feb 2021 19:03:23 +0000 (14:03 -0500)
the historical function was specified to return an empty string in the
caller-provided buffer, not a null pointer, to indicate error when the
argument is non-null. only when the argument is null should it return
a null pointer on error.

src/legacy/cuserid.c

index 07866ac..dcaf73d 100644 (file)
@@ -9,12 +9,13 @@ char *cuserid(char *buf)
        static char usridbuf[L_cuserid];
        struct passwd pw, *ppw;
        long pwb[256];
+       if (buf) *buf = 0;
        getpwuid_r(geteuid(), &pw, (void *)pwb, sizeof pwb, &ppw);
        if (!ppw)
-               return 0;
+               return buf;
        size_t len = strnlen(pw.pw_name, L_cuserid);
        if (len == L_cuserid)
-               return 0;
+               return buf;
        if (!buf) buf = usridbuf;
        memcpy(buf, pw.pw_name, len+1);
        return buf;