diff options
author | Thomas Fitzsimmons <fitzsim@redhat.com> | 2002-05-08 04:12:49 +0400 |
---|---|---|
committer | Thomas Fitzsimmons <fitzsim@redhat.com> | 2002-05-08 04:12:49 +0400 |
commit | e71372faea4af670215b087a69c2b7432181a852 (patch) | |
tree | 5adf28cd89c62937515cb7362e878ec45b51d190 /newlib/libc/stdio/fread.c | |
parent | 735bb7e7d7c52aedc7099411ef235fee206e7240 (diff) |
* libc/include/sys/stdio.h: New file.
* libc/sys/linux/sys/stdio.h: New file.
* libc/include/stdio.h: Add declarations for flockfile,
ftrylockfile, and funlockfile. Include <sys/stdio.h>.
* libc/stdio/clearerr.c: Add file locking.
* libc/stdio/fclose.c: Likewise.
* libc/stdio/feof.c: Likewise.
* libc/stdio/ferror.c: Likewise.
* libc/stdio/fflush.c: Likewise.
* libc/stdio/fgetc.c: Likewise.
* libc/stdio/fgetpos.c: Likewise.
* libc/stdio/fgets.c: Likewise.
* libc/stdio/fileno.c: Likewise.
* libc/stdio/fputc.c: Likewise.
* libc/stdio/fputs.c: Likewise.
* libc/stdio/fread.c: Likewise.
* libc/stdio/freopen.c: Likewise.
* libc/stdio/fseek.c: Likewise.
* libc/stdio/ftell.c: Likewise.
* libc/stdio/fwrite.c: Likewise.
* libc/stdio/getc.c: Likewise.
* libc/stdio/putc.c: Likewise.
* libc/stdio/setvbuf.c: Likewise.
* libc/stdio/ungetc.c: Likewise.
* libc/stdio/vfprintf.c: Likewise.
Diffstat (limited to 'newlib/libc/stdio/fread.c')
-rw-r--r-- | newlib/libc/stdio/fread.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/newlib/libc/stdio/fread.c b/newlib/libc/stdio/fread.c index 38f791b6d..faca53735 100644 --- a/newlib/libc/stdio/fread.c +++ b/newlib/libc/stdio/fread.c @@ -122,6 +122,8 @@ _DEFUN (fread, (buf, size, count, fp), if ((resid = count * size) == 0) return 0; + + _flockfile(fp); if (fp->_r < 0) fp->_r = 0; total = resid; @@ -139,8 +141,12 @@ _DEFUN (fread, (buf, size, count, fp), /* no more input: return partial result */ #ifdef __SCLE if (fp->_flags & __SCLE) - return crlf(fp, buf, total-resid, 1) / size; + { + _funlockfile(fp); + return crlf(fp, buf, total-resid, 1) / size; + } #endif + _funlockfile(fp); return (total - resid) / size; } } @@ -149,7 +155,11 @@ _DEFUN (fread, (buf, size, count, fp), fp->_p += resid; #ifdef __SCLE if (fp->_flags & __SCLE) - return crlf(fp, buf, total, 0) / size; + { + _funlockfile(fp); + return crlf(fp, buf, total, 0) / size; + } #endif + _funlockfile(fp); return count; } |