From b4d98c68558acbe9782e24963999f922d52ccf28 Mon Sep 17 00:00:00 2001 From: tjr Date: Wed, 17 Mar 2004 01:43:08 +0000 Subject: Re-add macro versions of getc(), getchar(), putc(), putchar(), feof(), ferror(), fileno() and clearerr(), using the value of __isthreaded to decide between the fast inline single-threaded code and the more general function equivalent. This gives most of the performance benefits of the old unsafe macros while preserving thread safety. --- include/stdio.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'include/stdio.h') diff --git a/include/stdio.h b/include/stdio.h index 58f4995..90428b9 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -416,6 +416,22 @@ static __inline int __sputc(int _c, FILE *_p) { #define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF))) #define __sfileno(p) ((p)->_file) +extern int __isthreaded; + +#define feof(p) (!__isthreaded ? __sfeof(p) : feof(p)) +#define ferror(p) (!__isthreaded ? __sferror(p) : ferror(p)) +#define clearerr(p) (!__isthreaded ? __sclearerr(p) : clearerr(p)) + +#if __POSIX_VISIBLE +#define fileno(p) (!__isthreaded ? __sfileno(p) : fileno(p)) +#endif + +#define getc(fp) (!__isthreaded ? __sgetc(fp) : getc(fp)) +#define putc(x, fp) (!__isthreaded ? __sputc(x, fp) : putc(x, fp)) + +#define getchar() getc(stdin) +#define putchar(x) putc(x, stdout) + #if __BSD_VISIBLE /* * See ISO/IEC 9945-1 ANSI/IEEE Std 1003.1 Second Edition 1996-07-12 -- cgit v1.1