diff options
author | tjr <tjr@FreeBSD.org> | 2003-01-13 02:58:18 +0000 |
---|---|---|
committer | tjr <tjr@FreeBSD.org> | 2003-01-13 02:58:18 +0000 |
commit | 9adc11de8a46be07db2a5881ec2c129b8b159af0 (patch) | |
tree | 409fb180fd40239aceb5e57cc2dd6eb80e8d67e5 /lib/libc | |
parent | 7c6b8aca6712346c8618c6036eadf3dd771695f6 (diff) | |
download | FreeBSD-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')
-rw-r--r-- | lib/libc/stdio/fileno.c | 12 |
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); } |