/* written by Paul Eggert and Derek Price */
-#include <config.h>
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
#include "getlogin_r.h"
getlogin_r (char *name, size_t size)
{
char *n;
- int save_errno = errno;
+ size_t nlen;
errno = 0;
n = getlogin ();
- 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;
}