diff options
| author | Tim J. Robbins <tjr@FreeBSD.org> | 2002-09-20 13:20:41 +0000 | 
|---|---|---|
| committer | Tim J. Robbins <tjr@FreeBSD.org> | 2002-09-20 13:20:41 +0000 | 
| commit | 8f030a44b8c665d111ed900df1a8203dde0af1e7 (patch) | |
| tree | dba84dabdfa686ba4668a3256bd3ecb1eb4313be | |
| parent | f90c382c0c6c8b94d43903c8df4b52b4574fadd8 (diff) | |
Notes
| -rw-r--r-- | lib/libc/stdio/fgetwc.c | 28 | ||||
| -rw-r--r-- | lib/libc/stdio/fputwc.c | 32 | ||||
| -rw-r--r-- | lib/libc/stdio/local.h | 2 | 
3 files changed, 44 insertions, 18 deletions
diff --git a/lib/libc/stdio/fgetwc.c b/lib/libc/stdio/fgetwc.c index 90b17ea1468b..311391a825fa 100644 --- a/lib/libc/stdio/fgetwc.c +++ b/lib/libc/stdio/fgetwc.c @@ -38,13 +38,14 @@ __FBSDID("$FreeBSD$");  static __inline wint_t	__fgetwc_nbf(FILE *); +/* + * Non-MT-safe version. + */  wint_t -fgetwc(FILE *fp) +__fgetwc(FILE *fp)  {  	wint_t wc; -	FLOCKFILE(fp); -	ORIENT(fp, 1);  	if (MB_CUR_MAX == 1) {  		/*  		 * Assume we're using a single-byte locale. A safer test @@ -53,11 +54,26 @@ fgetwc(FILE *fp)  		wc = (wint_t)__sgetc(fp);  	} else  		wc = __fgetwc_nbf(fp); -	FUNLOCKFILE(fp);  	return (wc);  } +/* + * MT-safe version. + */ +wint_t +fgetwc(FILE *fp) +{ +	wint_t r; + +	FLOCKFILE(fp); +	ORIENT(fp, 1); +	r = __fgetwc(fp); +	FUNLOCKFILE(fp); + +	return (r); +} +  static __inline wint_t  __fgetwc_nbf(FILE *fp)  { @@ -85,10 +101,8 @@ __fgetwc_nbf(FILE *fp)  			break;  	} -	FUNLOCKFILE(fp);  	while (n-- != 0) -		ungetc((unsigned char)buf[n], fp); -	FLOCKFILE(fp); +		__ungetc((unsigned char)buf[n], fp);  	errno = EILSEQ;  	return (WEOF);  } diff --git a/lib/libc/stdio/fputwc.c b/lib/libc/stdio/fputwc.c index 34751ddbfb8d..10c3c18a5c45 100644 --- a/lib/libc/stdio/fputwc.c +++ b/lib/libc/stdio/fputwc.c @@ -37,16 +37,16 @@ __FBSDID("$FreeBSD$");  #include "libc_private.h"  #include "local.h" +/* + * Non-MT-safe version. + */  wint_t -fputwc(wchar_t wc, FILE *fp) +__fputwc(wchar_t wc, FILE *fp)  {  	char buf[MB_LEN_MAX];  	mbstate_t mbs;  	size_t i, len; -	FLOCKFILE(fp); -	ORIENT(fp, 1); -  	if (MB_LEN_MAX == 1 && wc > 0 && wc <= UCHAR_MAX) {  		/*  		 * Assume single-byte locale with no special encoding. @@ -57,19 +57,29 @@ fputwc(wchar_t wc, FILE *fp)  		len = 1;  	} else {  		memset(&mbs, 0, sizeof(mbs)); -		if ((len = wcrtomb(buf, wc, &mbs)) == (size_t)-1) { -			FUNLOCKFILE(fp); +		if ((len = wcrtomb(buf, wc, &mbs)) == (size_t)-1)  			return (WEOF); -		}  	}  	for (i = 0; i < len; i++) -		if (__sputc((unsigned char)buf[i], fp) == EOF) { -			FUNLOCKFILE(fp); +		if (__sputc((unsigned char)buf[i], fp) == EOF)  			return (WEOF); -		} +	return ((wint_t)wc); +} + +/* + * MT-safe version. + */ +wint_t +fputwc(wchar_t wc, FILE *fp) +{ +	wint_t r; + +	FLOCKFILE(fp); +	ORIENT(fp, 1); +	r = __fputwc(wc, fp);  	FUNLOCKFILE(fp); -	return ((wint_t)wc); +	return (r);  } diff --git a/lib/libc/stdio/local.h b/lib/libc/stdio/local.h index bfa4aab8b4cd..6c860cd87595 100644 --- a/lib/libc/stdio/local.h +++ b/lib/libc/stdio/local.h @@ -53,6 +53,8 @@ extern fpos_t	_sseek(FILE *, fpos_t, int);  extern int	_ftello(FILE *, fpos_t *);  extern int	_fseeko(FILE *, off_t, int, int);  extern int	__fflush(FILE *fp); +extern wint_t	__fgetwc(FILE *); +extern wint_t	__fputwc(wchar_t, FILE *);  extern int	__sflush(FILE *);  extern FILE	*__sfp(void);  extern int	__srefill(FILE *);  | 
