diff options
author | ache <ache@FreeBSD.org> | 2001-09-01 15:28:24 +0000 |
---|---|---|
committer | ache <ache@FreeBSD.org> | 2001-09-01 15:28:24 +0000 |
commit | 040bf33abb9c840d4c82451216ca2948e787fea6 (patch) | |
tree | ee54a20cc4f7b4c40b42a25070f3d75c3d0f8d9e /lib/libc/stdio/fseek.c | |
parent | 77759ea63b149af08d749c57155482f866c1b82c (diff) | |
download | FreeBSD-src-040bf33abb9c840d4c82451216ca2948e787fea6.zip FreeBSD-src-040bf33abb9c840d4c82451216ca2948e787fea6.tar.gz |
Save errno before function call and restore it on success (because many
internal functions there may fail and set (i.e. overwrite) errno in normal
(not error) situation). In original variant errno testing after call
(as POSIX suggest) is wrong when errno overwrite happens.
Diffstat (limited to 'lib/libc/stdio/fseek.c')
-rw-r--r-- | lib/libc/stdio/fseek.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/libc/stdio/fseek.c b/lib/libc/stdio/fseek.c index e831347..38a8bf5 100644 --- a/lib/libc/stdio/fseek.c +++ b/lib/libc/stdio/fseek.c @@ -63,6 +63,7 @@ fseek(fp, offset, whence) int whence; { int ret; + int serrno = errno; /* make sure stdio is set up */ if (!__sdidinit) @@ -71,6 +72,8 @@ fseek(fp, offset, whence) FLOCKFILE(fp); ret = _fseeko(fp, (off_t)offset, whence, 1); FUNLOCKFILE(fp); + if (ret == 0) + errno = serrno; return (ret); } @@ -81,6 +84,7 @@ fseeko(fp, offset, whence) int whence; { int ret; + int serrno = errno; /* make sure stdio is set up */ if (!__sdidinit) @@ -89,6 +93,8 @@ fseeko(fp, offset, whence) FLOCKFILE(fp); ret = _fseeko(fp, offset, whence, 0); FUNLOCKFILE(fp); + if (ret == 0) + errno = serrno; return (ret); } |