Date: Wed, 27 Feb 2008 19:02:03 +0000 (UTC) From: John Baldwin <jhb@FreeBSD.org> To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org Subject: cvs commit: src/lib/libc/stdio fdopen.c fopen.c freopen.c Message-ID: <200802271902.m1RJ23wd012246@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
jhb 2008-02-27 19:02:02 UTC
FreeBSD src repository
Modified files:
lib/libc/stdio fdopen.c fopen.c freopen.c
Log:
File descriptors are an int, but our stdio FILE object uses a short to hold
them. Thus, any fd whose value is greater than SHRT_MAX is handled
incorrectly (the short value is sign-extended when converted to an int).
An unpleasant side effect is that if fopen() opens a file and gets a
backing fd that is greater than SHRT_MAX, fclose() will fail and the file
descriptor will be leaked. Better handle this by fixing fopen(), fdopen(),
and freopen() to fail attempts to use a fd greater than SHRT_MAX with
EMFILE.
At some point in the future we should look at expanding the file descriptor
in FILE to an int, but that is a bit complicated due to ABI issues.
MFC after: 1 week
Discussed on: arch
Reviewed by: wollman
Revision Changes Path
1.9 +12 -0 src/lib/libc/stdio/fdopen.c
1.12 +13 -0 src/lib/libc/stdio/fopen.c
1.19 +14 -0 src/lib/libc/stdio/freopen.c
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200802271902.m1RJ23wd012246>
