cvs commit: src/lib/libc/stdio fdopen.c fopen.c freopen.c

John Baldwin jhb at FreeBSD.org
Wed Feb 27 19:02:04 UTC 2008


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


More information about the cvs-all mailing list