summaryrefslogtreecommitdiffstats
path: root/lib/libc/stdio/fileno.c
diff options
context:
space:
mode:
authortjr <tjr@FreeBSD.org>2003-01-13 02:58:18 +0000
committertjr <tjr@FreeBSD.org>2003-01-13 02:58:18 +0000
commit9adc11de8a46be07db2a5881ec2c129b8b159af0 (patch)
tree409fb180fd40239aceb5e57cc2dd6eb80e8d67e5 /lib/libc/stdio/fileno.c
parent7c6b8aca6712346c8618c6036eadf3dd771695f6 (diff)
downloadFreeBSD-src-9adc11de8a46be07db2a5881ec2c129b8b159af0.zip
FreeBSD-src-9adc11de8a46be07db2a5881ec2c129b8b159af0.tar.gz
Lock the stream before calling __sfileno() to retrieve the file descriptor.
1003.1-2001 requires that fileno() behave as if it locks the stream.
Diffstat (limited to 'lib/libc/stdio/fileno.c')
-rw-r--r--lib/libc/stdio/fileno.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/libc/stdio/fileno.c b/lib/libc/stdio/fileno.c
index 97f25e3..d7bf93d 100644
--- a/lib/libc/stdio/fileno.c
+++ b/lib/libc/stdio/fileno.c
@@ -40,7 +40,10 @@ static char sccsid[] = "@(#)fileno.c 8.1 (Berkeley) 6/4/93";
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include "namespace.h"
#include <stdio.h>
+#include "un-namespace.h"
+#include "libc_private.h"
/*
* fileno has traditionally been a macro in <stdio.h>. That is
@@ -51,6 +54,11 @@ __FBSDID("$FreeBSD$");
int
fileno(FILE *fp)
{
- /* ??? - Should probably use atomic_read. */
- return (__sfileno(fp));
+ int fd;
+
+ FLOCKFILE(fp);
+ fd = __sfileno(fp);
+ FUNLOCKFILE(fp);
+
+ return (fd);
}
OpenPOWER on IntegriCloud