Index: stdio/fread.c =================================================================== RCS file: /home/ncvs/src/lib/libc/stdio/fread.c,v retrieving revision 1.12 diff -u -r1.12 fread.c --- stdio/fread.c 12 Oct 2002 16:13:37 -0000 1.12 +++ stdio/fread.c 15 Dec 2005 10:33:46 -0000 @@ -47,11 +47,23 @@ #include "local.h" #include "libc_private.h" +/* + * MT-safe version + */ + +size_t +fread(void * __restrict buf, size_t size, size_t count, FILE * __restrict fp) +{ + int ret; + + FLOCKFILE(fp); + ret = __fread(buf, size, count, fp); + FUNLOCKFILE(fp); + return (ret); +} + size_t -fread(buf, size, count, fp) - void * __restrict buf; - size_t size, count; - FILE * __restrict fp; +__fread(void * __restrict buf, size_t size, size_t count, FILE * __restrict fp) { size_t resid; char *p; @@ -65,7 +77,6 @@ */ if ((resid = count * size) == 0) return (0); - FLOCKFILE(fp); ORIENT(fp, -1); if (fp->_r < 0) fp->_r = 0; @@ -79,13 +90,11 @@ resid -= r; if (__srefill(fp)) { /* no more input: return partial result */ - FUNLOCKFILE(fp); return ((total - resid) / size); } } (void)memcpy((void *)p, (void *)fp->_p, resid); fp->_r -= resid; fp->_p += resid; - FUNLOCKFILE(fp); return (count); } Index: stdio/local.h =================================================================== RCS file: /home/ncvs/src/lib/libc/stdio/local.h,v retrieving revision 1.27 diff -u -r1.27 local.h --- stdio/local.h 12 Sep 2005 13:46:32 -0000 1.27 +++ stdio/local.h 15 Dec 2005 10:33:46 -0000 @@ -78,7 +78,8 @@ extern int __vfwprintf(FILE *, const wchar_t *, __va_list); extern int __vfwscanf(FILE * __restrict, const wchar_t * __restrict, __va_list); - +extern size_t __fread(void * __restrict buf, size_t size, size_t count, + FILE * __restrict fp); extern int __sdidinit; Index: stdio/vfscanf.c =================================================================== RCS file: /home/ncvs/src/lib/libc/stdio/vfscanf.c,v retrieving revision 1.38 diff -u -r1.38 vfscanf.c --- stdio/vfscanf.c 8 Apr 2005 20:58:47 -0000 1.38 +++ stdio/vfscanf.c 15 Dec 2005 10:33:46 -0000 @@ -412,7 +412,7 @@ } nread += sum; } else { - size_t r = fread((void *)va_arg(ap, char *), 1, + size_t r = __fread((void *)va_arg(ap, char *), 1, width, fp); if (r == 0)