From 98e47524e910e11b4517e3a16e0001419eb09e87 Mon Sep 17 00:00:00 2001 From: ache Date: Mon, 16 Oct 2006 09:57:15 +0000 Subject: Honor errno obtained from __sflags Move errno restoring after FUNLOCKFILE in one case --- lib/libc/stdio/freopen.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'lib/libc') diff --git a/lib/libc/stdio/freopen.c b/lib/libc/stdio/freopen.c index bc2e831..70cfd60 100644 --- a/lib/libc/stdio/freopen.c +++ b/lib/libc/stdio/freopen.c @@ -67,7 +67,9 @@ freopen(file, mode, fp) int dflags, flags, isopen, oflags, sverrno, wantfd; if ((flags = __sflags(mode, &oflags)) == 0) { + sverrno = errno; (void) fclose(fp); + errno = sverrno; return (NULL); } @@ -193,8 +195,8 @@ finish: if (f < 0) { /* did not get it after all */ fp->_flags = 0; /* set it free */ - errno = sverrno; /* restore in case _close clobbered */ FUNLOCKFILE(fp); + errno = sverrno; /* restore in case _close clobbered */ return (NULL); } -- cgit v1.1