diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2005-05-25 19:14:06 +0000 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2005-05-25 19:14:06 +0000 |
commit | 2eb4c7c4b75c78250ba27a844e3d5f1958c113b6 (patch) | |
tree | 3ef77e3a724058986329ee239a03a00663515f42 /lib/getlogin_r.c | |
parent | 4707916315b717082639e71de738ae35d0cd0251 (diff) | |
download | gnulib-2eb4c7c4b75c78250ba27a844e3d5f1958c113b6.tar.gz |
Fix a few glitches in getlogin_r.
Diffstat (limited to 'lib/getlogin_r.c')
-rw-r--r-- | lib/getlogin_r.c | 27 |
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; } |