summaryrefslogtreecommitdiff
path: root/lib/getlogin_r.c
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2005-05-25 19:14:06 +0000
committerPaul Eggert <eggert@cs.ucla.edu>2005-05-25 19:14:06 +0000
commit2eb4c7c4b75c78250ba27a844e3d5f1958c113b6 (patch)
tree3ef77e3a724058986329ee239a03a00663515f42 /lib/getlogin_r.c
parent4707916315b717082639e71de738ae35d0cd0251 (diff)
downloadgnulib-2eb4c7c4b75c78250ba27a844e3d5f1958c113b6.tar.gz
Fix a few glitches in getlogin_r.
Diffstat (limited to 'lib/getlogin_r.c')
-rw-r--r--lib/getlogin_r.c27
1 files changed, 11 insertions, 16 deletions
diff --git a/lib/getlogin_r.c b/lib/getlogin_r.c
index 5683504c7d..c02db2fe65 100644
--- a/lib/getlogin_r.c
+++ b/lib/getlogin_r.c
@@ -18,7 +18,9 @@
/* written by Paul Eggert and Derek Price */
-#include <config.h>
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
#include "getlogin_r.h"
@@ -38,22 +40,15 @@ int
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;
+ if (!n)
+ return errno ? errno : ENOENT;
+ nlen = strlen (n);
+ if (size <= nlen)
+ return ERANGE;
+ memcpy (name, n, nlen + 1);
+ return 0;
}