diff options
author | jilles <jilles@FreeBSD.org> | 2013-04-17 21:08:15 +0000 |
---|---|---|
committer | jilles <jilles@FreeBSD.org> | 2013-04-17 21:08:15 +0000 |
commit | f83f35001e2b029d79877a70ee9b9032887f68e7 (patch) | |
tree | 6da12e9b345215ad4581d9cfec73a4dd0cb98b77 /lib/libc | |
parent | fc3fc9c0367891aa532b658cfbbd708ba83351bf (diff) | |
download | FreeBSD-src-f83f35001e2b029d79877a70ee9b9032887f68e7.zip FreeBSD-src-f83f35001e2b029d79877a70ee9b9032887f68e7.tar.gz |
pututxline: Don't set errno=0 in subfunctions.
The functions utx_active_add(), utx_active_remove(), utx_lastlogin_add() and
utx_log_add() set errno to 0 if they are successful. This not only violates
POSIX if pututxline() is successful, but may also overwrite a valid error
with 0 if, for example, utx_lastlogin_add() fails while utx_log_add()
succeeds.
Reviewed by: ed
Diffstat (limited to 'lib/libc')
-rw-r--r-- | lib/libc/gen/pututxline.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/libc/gen/pututxline.c b/lib/libc/gen/pututxline.c index 555386c..4982c02 100644 --- a/lib/libc/gen/pututxline.c +++ b/lib/libc/gen/pututxline.c @@ -131,7 +131,8 @@ exact: else error = 0; fclose(fp); - errno = error; + if (error != 0) + errno = error; return (error == 0 ? 0 : 1); } @@ -169,7 +170,8 @@ utx_active_remove(struct futx *fu) } fclose(fp); - errno = error; + if (ret != 0) + errno = error; return (ret); } @@ -225,7 +227,8 @@ utx_lastlogin_add(const struct futx *fu) ret = -1; } fclose(fp); - errno = error; + if (ret == -1) + errno = error; return (ret); } @@ -277,7 +280,8 @@ utx_log_add(const struct futx *fu) else error = 0; _close(fd); - errno = error; + if (error != 0) + errno = error; return (error == 0 ? 0 : 1); } |