- if (n)
- {
- size_t nlen = strlen (n);
- if (nlen < size)
- {
- memcpy (name, n, nlen + 1);
- return 0;
- }
- errno = ERANGE;
- }
-
- if (errno) return errno;
- errno = save_errno;
- return -1;
+
+ /* A system function like getlogin_r is never supposed to set errno
+ to zero, so make sure errno is nonzero here. ENOENT is a
+ reasonable errno value if getlogin returns NULL. */
+ if (!errno)
+ errno = ENOENT;
+
+ if (!n)
+ return errno;
+ nlen = strlen (n);
+ if (size <= nlen)
+ return ERANGE;
+ memcpy (name, n, nlen + 1);
+ return 0;