diff options
Diffstat (limited to 'lib/libc/stdio')
-rw-r--r-- | lib/libc/stdio/fread.c | 23 | ||||
-rw-r--r-- | lib/libc/stdio/local.h | 3 | ||||
-rw-r--r-- | lib/libc/stdio/vfscanf.c | 2 |
3 files changed, 19 insertions, 9 deletions
diff --git a/lib/libc/stdio/fread.c b/lib/libc/stdio/fread.c index 73c7c19..3edb84a 100644 --- a/lib/libc/stdio/fread.c +++ b/lib/libc/stdio/fread.c @@ -47,11 +47,23 @@ __FBSDID("$FreeBSD$"); #include "local.h" #include "libc_private.h" +/* + * MT-safe version + */ + 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) +{ + int ret; + + FLOCKFILE(fp); + ret = __fread(buf, size, count, fp); + FUNLOCKFILE(fp); + return (ret); +} + +size_t +__fread(void * __restrict buf, size_t size, size_t count, FILE * __restrict fp) { size_t resid; char *p; @@ -65,7 +77,6 @@ fread(buf, size, count, fp) */ if ((resid = count * size) == 0) return (0); - FLOCKFILE(fp); ORIENT(fp, -1); if (fp->_r < 0) fp->_r = 0; @@ -79,13 +90,11 @@ fread(buf, size, count, fp) 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); } diff --git a/lib/libc/stdio/local.h b/lib/libc/stdio/local.h index 74c3238..de038fa 100644 --- a/lib/libc/stdio/local.h +++ b/lib/libc/stdio/local.h @@ -78,7 +78,8 @@ extern int __vfscanf(FILE *, const char *, __va_list); 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; diff --git a/lib/libc/stdio/vfscanf.c b/lib/libc/stdio/vfscanf.c index ea3004c..27df280 100644 --- a/lib/libc/stdio/vfscanf.c +++ b/lib/libc/stdio/vfscanf.c @@ -412,7 +412,7 @@ literal: } 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) |