1. 05 6月, 2021 1 次提交
  2. 12 4月, 2021 1 次提交
  3. 11 3月, 2021 1 次提交
  4. 09 9月, 2020 1 次提交
  5. 17 8月, 2020 1 次提交
  6. 17 9月, 2018 1 次提交
    • R
      fix null pointer subtraction and comparison in stdio · 849e7603
      Rich Felker 提交于
      morally, for null pointers a and b, a-b, a<b, and a>b should all be
      defined as 0; however, C does not define any of them.
      
      the stdio implementation makes heavy use of such pointer comparison
      and subtraction for buffer logic, and also uses null pos/base/end
      pointers to indicate that the FILE is not in the corresponding (read
      or write) mode ready for accesses through the buffer.
      
      all of the comparisons are fixed trivially by using != in place of the
      relational operators, since the opposite relation (e.g. pos>end) is
      logically impossible. the subtractions have been reviewed to check
      that they are conditional the stream being in the appropriate reading-
      or writing-through-buffer mode, with checks added where needed.
      
      in fgets and getdelim, the checks added should improve performance for
      unbuffered streams by avoiding a do-nothing call to memchr, and should
      be negligible for buffered streams.
      849e7603
  7. 24 2月, 2018 1 次提交
    • R
      consistently return number of bytes read from stdio read backend · f9280418
      Rich Felker 提交于
      the stdio FILE read backend's return type is size_t, not ssize_t, and
      all of the special (non-fd-backed) FILE types already return the
      number of bytes read (zero) on error or eof. only __stdio_read leaked
      a syscall error return into its return value.
      
      fread had a workaround for this behavior going all the way back to the
      original check-in. remove the workaround since it's no longer needed.
      f9280418
  8. 11 2月, 2016 1 次提交
    • R
      fix return value for fread/fwrite when size argument is 0 · 500c6886
      Rich Felker 提交于
      when the size argument was zero but nmemb was nonzero, these functions
      were returning nmemb, despite no data having been written.
      conceptually this is not wrong, but the standard requires a return
      value of zero in this case.
      500c6886
  9. 05 9月, 2014 1 次提交
    • R
      fix multiple stdio functions' behavior on zero-length operations · 6e2bb7ac
      Rich Felker 提交于
      previously, fgets, fputs, fread, and fwrite completely omitted locking
      and access to the FILE object when their arguments yielded a zero
      length read or write operation independent of the FILE state. this
      optimization was invalid; it wrongly skipped marking the stream as
      byte-oriented (a C conformance bug) and exposed observably missing
      synchronization (a POSIX conformance bug) where one of these functions
      could wrongly complete despite another thread provably holding the
      lock.
      6e2bb7ac
  10. 09 11月, 2012 1 次提交
    • R
      clean up stdio_impl.h · 835f9f95
      Rich Felker 提交于
      this header evolved to facilitate the extremely lazy practice of
      omitting explicit includes of the necessary headers in individual
      stdio source files; not only was this sloppy, but it also increased
      build time.
      
      now, stdio_impl.h is only including the headers it needs for its own
      use; any further headers needed by source files are included directly
      where needed.
      835f9f95
  11. 07 9月, 2012 1 次提交
    • R
      use restrict everywhere it's required by c99 and/or posix 2008 · 400c5e5c
      Rich Felker 提交于
      to deal with the fact that the public headers may be used with pre-c99
      compilers, __restrict is used in place of restrict, and defined
      appropriately for any supported compiler. we also avoid the form
      [restrict] since older versions of gcc rejected it due to a bug in the
      original c99 standard, and instead use the form *restrict.
      400c5e5c
  12. 17 7月, 2011 1 次提交
    • R
      fix logic error in fread · 94a0171d
      Rich Felker 提交于
      fread was calling f->read without checking that the file was in
      reading mode. this could:
      1. crash, if f->read was a null pointer
      2. cause unwanted blocking on a terminal already at eof
      3. allow reading on a write-only file
      94a0171d
  13. 28 3月, 2011 1 次提交
    • R
      major stdio overhaul, using readv/writev, plus other changes · e3cd6c5c
      Rich Felker 提交于
      the biggest change in this commit is that stdio now uses readv to fill
      the caller's buffer and the FILE buffer with a single syscall, and
      likewise writev to flush the FILE buffer and write out the caller's
      buffer in a single syscall.
      
      making this change required fundamental architectural changes to
      stdio, so i also made a number of other improvements in the process:
      
      - the implementation no longer assumes that further io will fail
        following errors, and no longer blocks io when the error flag is set
        (though the latter could easily be changed back if desired)
      
      - unbuffered mode is no longer implemented as a one-byte buffer. as a
        consequence, scanf unreading has to use ungetc, to the unget buffer
        has been enlarged to hold at least 2 wide characters.
      
      - the FILE structure has been rearranged to maintain the locations of
        the fields that might be used in glibc getc/putc type macros, while
        shrinking the structure to save some space.
      
      - error cases for fflush, fseek, etc. should be more correct.
      
      - library-internal macros are used for getc_unlocked and putc_unlocked
        now, eliminating some ugly code duplication. __uflow and __overflow
        are no longer used anywhere but these macros. switch to read or
        write mode is also separated so the code can be better shared, e.g.
        with ungetc.
      
      - lots of other small things.
      e3cd6c5c
  14. 12 2月, 2011 1 次提交