diff options
-rw-r--r-- | newlib/ChangeLog | 12 | ||||
-rw-r--r-- | newlib/libc/include/stdio.h | 10 | ||||
-rw-r--r-- | newlib/libc/stdio/Makefile.am | 8 | ||||
-rw-r--r-- | newlib/libc/stdio/Makefile.in | 26 | ||||
-rw-r--r-- | newlib/libc/stdio/getc_u.c | 68 | ||||
-rw-r--r-- | newlib/libc/stdio/getchar_u.c | 79 | ||||
-rw-r--r-- | newlib/libc/stdio/putc_u.c | 69 | ||||
-rw-r--r-- | newlib/libc/stdio/putchar.c | 4 | ||||
-rw-r--r-- | newlib/libc/stdio/putchar_u.c | 80 |
9 files changed, 343 insertions, 13 deletions
diff --git a/newlib/ChangeLog b/newlib/ChangeLog index e240513..0bc6b70 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,3 +1,15 @@ +2002-05-08 Thomas Fitzsimmons <fitzsim@redhat.com> + + * libc/stdio/getc_u.c: New file. + * libc/stdio/getchar_u.c: New file. + * libc/stdio/putc_u.c: New file. + * libc/stdio/putchar_u.c: New file. + * libc/include/stdio.h: Add declarations for getc_unlocked, + getchar_unlocked, putc_unlocked and putchar_unlocked. + * libc/stdio/Makefile.am (LIB_SOURCES): Add new files. + (CHEWOUT_FILES): Add new files' .def's. + * libc/stdio/putchar.c (_putchar_r): Replace __sputc with putc. + Wed May 8 17:47:35 2002 J"orn Rennecke <joern.rennecke@superh.com> * libc/machine/sh/memset.S (memset, __SHMEDIA__ code): diff --git a/newlib/libc/include/stdio.h b/newlib/libc/include/stdio.h index 767438f..ccc048d 100644 --- a/newlib/libc/include/stdio.h +++ b/newlib/libc/include/stdio.h @@ -222,9 +222,13 @@ FILE * _EXFUN(popen, (const char *, const char *)); int _EXFUN(putw, (int, FILE *)); void _EXFUN(setbuffer, (FILE *, char *, int)); int _EXFUN(setlinebuf, (FILE *)); -void _EXFUN(flockfile, (FILE *)); -int _EXFUN(ftrylockfile, (FILE *)); -void _EXFUN(funlockfile, (FILE *)); +int _EXFUN(getc_unlocked, (FILE *)); +int _EXFUN(getchar_unlocked, (void)); +void _EXFUN(flockfile, (FILE *)); +int _EXFUN(ftrylockfile, (FILE *)); +void _EXFUN(funlockfile, (FILE *)); +int _EXFUN(putc_unlocked, (int, FILE *)); +int _EXFUN(putchar_unlocked, (int)); #endif /* diff --git a/newlib/libc/stdio/Makefile.am b/newlib/libc/stdio/Makefile.am index 8010c72..c859cbf 100644 --- a/newlib/libc/stdio/Makefile.am +++ b/newlib/libc/stdio/Makefile.am @@ -33,6 +33,8 @@ LIB_SOURCES = \ fwrite.c \ getc.c \ getchar.c \ + getc_u.c \ + getchar_u.c \ gets.c \ getw.c \ iprintf.c \ @@ -42,6 +44,8 @@ LIB_SOURCES = \ printf.c \ putc.c \ putchar.c \ + putc_u.c \ + putchar_u.c \ puts.c \ putw.c \ refill.c \ @@ -121,6 +125,8 @@ CHEWOUT_FILES = \ fwrite.def \ getc.def \ getchar.def \ + getc_u.def \ + getchar_u.def \ gets.def \ getw.def \ iprintf.def \ @@ -128,6 +134,8 @@ CHEWOUT_FILES = \ perror.def \ putc.def \ putchar.def \ + putc_u.def \ + putchar_u.def \ puts.def \ putw.def \ remove.def \ diff --git a/newlib/libc/stdio/Makefile.in b/newlib/libc/stdio/Makefile.in index 6e60de4..aff17a3 100644 --- a/newlib/libc/stdio/Makefile.in +++ b/newlib/libc/stdio/Makefile.in @@ -131,6 +131,8 @@ LIB_SOURCES = \ fwrite.c \ getc.c \ getchar.c \ + getc_u.c \ + getchar_u.c \ gets.c \ getw.c \ iprintf.c \ @@ -140,6 +142,8 @@ LIB_SOURCES = \ printf.c \ putc.c \ putchar.c \ + putc_u.c \ + putchar_u.c \ puts.c \ putw.c \ refill.c \ @@ -206,6 +210,8 @@ CHEWOUT_FILES = \ fwrite.def \ getc.def \ getchar.def \ + getc_u.def \ + getchar_u.def \ gets.def \ getw.def \ iprintf.def \ @@ -213,6 +219,8 @@ CHEWOUT_FILES = \ perror.def \ putc.def \ putchar.def \ + putc_u.def \ + putchar_u.def \ puts.def \ putw.def \ remove.def \ @@ -251,8 +259,9 @@ LIBS = @LIBS@ @USE_LIBTOOL_FALSE@findfp.o fiprintf.o flags.o fopen.o fprintf.o \ @USE_LIBTOOL_FALSE@fputc.o fputs.o fread.o freopen.o fscanf.o fseek.o \ @USE_LIBTOOL_FALSE@fsetpos.o ftell.o fvwrite.o fwalk.o fwrite.o getc.o \ -@USE_LIBTOOL_FALSE@getchar.o gets.o getw.o iprintf.o makebuf.o mktemp.o \ -@USE_LIBTOOL_FALSE@perror.o printf.o putc.o putchar.o puts.o putw.o \ +@USE_LIBTOOL_FALSE@getchar.o getc_u.o getchar_u.o gets.o getw.o \ +@USE_LIBTOOL_FALSE@iprintf.o makebuf.o mktemp.o perror.o printf.o \ +@USE_LIBTOOL_FALSE@putc.o putchar.o putc_u.o putchar_u.o puts.o putw.o \ @USE_LIBTOOL_FALSE@refill.o remove.o rename.o rewind.o rget.o scanf.o \ @USE_LIBTOOL_FALSE@setbuf.o setvbuf.o siprintf.o snprintf.o sprintf.o \ @USE_LIBTOOL_FALSE@sscanf.o stdio.o tmpfile.o tmpnam.o ungetc.o \ @@ -268,12 +277,13 @@ LTLIBRARIES = $(noinst_LTLIBRARIES) @USE_LIBTOOL_TRUE@fopen.lo fprintf.lo fputc.lo fputs.lo fread.lo \ @USE_LIBTOOL_TRUE@freopen.lo fscanf.lo fseek.lo fsetpos.lo ftell.lo \ @USE_LIBTOOL_TRUE@fvwrite.lo fwalk.lo fwrite.lo getc.lo getchar.lo \ -@USE_LIBTOOL_TRUE@gets.lo getw.lo iprintf.lo makebuf.lo mktemp.lo \ -@USE_LIBTOOL_TRUE@perror.lo printf.lo putc.lo putchar.lo puts.lo \ -@USE_LIBTOOL_TRUE@putw.lo refill.lo remove.lo rename.lo rewind.lo \ -@USE_LIBTOOL_TRUE@rget.lo scanf.lo setbuf.lo setvbuf.lo siprintf.lo \ -@USE_LIBTOOL_TRUE@snprintf.lo sprintf.lo sscanf.lo stdio.lo tmpfile.lo \ -@USE_LIBTOOL_TRUE@tmpnam.lo ungetc.lo vfscanf.lo vprintf.lo vscanf.lo \ +@USE_LIBTOOL_TRUE@getc_u.lo getchar_u.lo gets.lo getw.lo iprintf.lo \ +@USE_LIBTOOL_TRUE@makebuf.lo mktemp.lo perror.lo printf.lo putc.lo \ +@USE_LIBTOOL_TRUE@putchar.lo putc_u.lo putchar_u.lo puts.lo putw.lo \ +@USE_LIBTOOL_TRUE@refill.lo remove.lo rename.lo rewind.lo rget.lo \ +@USE_LIBTOOL_TRUE@scanf.lo setbuf.lo setvbuf.lo siprintf.lo snprintf.lo \ +@USE_LIBTOOL_TRUE@sprintf.lo sscanf.lo stdio.lo tmpfile.lo tmpnam.lo \ +@USE_LIBTOOL_TRUE@ungetc.lo vfscanf.lo vprintf.lo vscanf.lo \ @USE_LIBTOOL_TRUE@vsnprintf.lo vsprintf.lo vsscanf.lo wbuf.lo wsetup.lo CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) diff --git a/newlib/libc/stdio/getc_u.c b/newlib/libc/stdio/getc_u.c new file mode 100644 index 0000000..877c7f8 --- /dev/null +++ b/newlib/libc/stdio/getc_u.c @@ -0,0 +1,68 @@ +/* + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the University of California, Berkeley. The name of the + * University may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +/* +FUNCTION +<<getc_unlocked>>---non-thread-safe version of getc (macro) + +INDEX + getc_unlocked + +POSIX_SYNOPSIS + #include <stdio.h> + int getc_unlocked(FILE *<[fp]>); + +DESCRIPTION +<<getc_unlocked>> is a non-thread-safe version of <<getc>> declared in +<<stdio.h>>. <<getc_unlocked>> may only safely be used within a scope +protected by flockfile() (or ftrylockfile()) and funlockfile(). These +functions may safely be used in a multi-threaded program if and only +if they are called while the invoking thread owns the ( FILE *) +object, as is the case after a successful call to the flockfile() or +ftrylockfile() functions. If threads are disabled, then +<<getc_unlocked>> is equivalent to <<getc>>. + +RETURNS +See <<getc>>. + +PORTABILITY +POSIX 1003.1 requires <<getc_unlocked>>. <<getc_unlocked>> may be +implemented as a macro, so arguments should not have side-effects. + +Supporting OS subroutines required: <<close>>, <<fstat>>, <<isatty>>, +<<lseek>>, <<read>>, <<sbrk>>, <<write>>. */ + +#if defined(LIBC_SCCS) && !defined(lint) +static char sccsid[] = "%W% (Berkeley) %G%"; +#endif /* LIBC_SCCS and not lint */ + +#include <stdio.h> + +/* + * A subroutine version of the macro getc_unlocked. + */ + +#undef getc_unlocked + +int +getc_unlocked (fp) + register FILE *fp; +{ + /* CHECK_INIT is called (eventually) by __srefill. */ + + return __sgetc (fp); +} diff --git a/newlib/libc/stdio/getchar_u.c b/newlib/libc/stdio/getchar_u.c new file mode 100644 index 0000000..f36f888 --- /dev/null +++ b/newlib/libc/stdio/getchar_u.c @@ -0,0 +1,79 @@ +/* + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the University of California, Berkeley. The name of the + * University may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +/* +FUNCTION +<<getchar_unlocked>>---non-thread-safe version of getchar (macro) + +INDEX + getchar_unlocked + +POSIX_SYNOPSIS + #include <stdio.h> + int getchar_unlocked(); + +DESCRIPTION +<<getchar_unlocked>> is a non-thread-safe version of <<getchar>> +declared in <<stdio.h>>. <<getchar_unlocked>> may only safely be used +within a scope protected by flockfile() (or ftrylockfile()) and +funlockfile(). These functions may safely be used in a multi-threaded +program if and only if they are called while the invoking thread owns +the ( FILE *) object, as is the case after a successful call to the +flockfile() or ftrylockfile() functions. If threads are disabled, +then <<getchar_unlocked>> is equivalent to <<getchar>>. + +RETURNS +See <<getchar>>. + +PORTABILITY +POSIX 1003.1 requires <<getchar_unlocked>>. <<getchar_unlocked>> may +be implemented as a macro. + +Supporting OS subroutines required: <<close>>, <<fstat>>, <<isatty>>, +<<lseek>>, <<read>>, <<sbrk>>, <<write>>. */ + +#if defined(LIBC_SCCS) && !defined(lint) +static char sccsid[] = "%W% (Berkeley) %G%"; +#endif /* LIBC_SCCS and not lint */ + +/* + * A subroutine version of the macro getchar_unlocked. + */ + +#include <stdio.h> +#include <reent.h> + +#undef getchar_unlocked + +int +_getchar_unlocked_r (f) + struct _reent *f; +{ + return getc_unlocked (_stdin_r (f)); +} + +#ifndef _REENT_ONLY + +int +getchar_unlocked () +{ + /* CHECK_INIT is called (eventually) by __srefill. */ + + return _getchar_unlocked_r (_REENT); +} + +#endif diff --git a/newlib/libc/stdio/putc_u.c b/newlib/libc/stdio/putc_u.c new file mode 100644 index 0000000..a3c0e08 --- /dev/null +++ b/newlib/libc/stdio/putc_u.c @@ -0,0 +1,69 @@ +/* + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the University of California, Berkeley. The name of the + * University may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +/* +FUNCTION +<<putc_unlocked>>---non-thread-safe version of putc (macro) + +INDEX + putc_unlocked + +POSIX_SYNOPSIS + #include <stdio.h> + int putc_unlocked(int <[ch]>, FILE *<[fp]>); + +DESCRIPTION +<<putc_unlocked>> is a non-thread-safe version of <<putc>> declared in +<<stdio.h>>. <<putc_unlocked>> may only safely be used within a scope +protected by flockfile() (or ftrylockfile()) and funlockfile(). These +functions may safely be used in a multi-threaded program if and only +if they are called while the invoking thread owns the ( FILE *) +object, as is the case after a successful call to the flockfile() or +ftrylockfile() functions. If threads are disabled, then +<<putc_unlocked>> is equivalent to <<putc>>. + +RETURNS +See <<putc>>. + +PORTABILITY +POSIX 1003.1 requires <<putc_unlocked>>. <<putc_unlocked>> may be +implemented as a macro, so arguments should not have side-effects. + +Supporting OS subroutines required: <<close>>, <<fstat>>, <<isatty>>, +<<lseek>>, <<read>>, <<sbrk>>, <<write>>. */ + +#if defined(LIBC_SCCS) && !defined(lint) +static char sccsid[] = "%W% (Berkeley) %G%"; +#endif /* LIBC_SCCS and not lint */ + +#include <stdio.h> + +/* + * A subroutine version of the macro putc_unlocked. + */ + +#undef putc_unlocked + +int +putc_unlocked (c, fp) + int c; + register FILE *fp; +{ + /* CHECK_INIT is (eventually) called by __swbuf. */ + + return __sputc (c, fp); +} diff --git a/newlib/libc/stdio/putchar.c b/newlib/libc/stdio/putchar.c index b725a49..ff207f3 100644 --- a/newlib/libc/stdio/putchar.c +++ b/newlib/libc/stdio/putchar.c @@ -65,7 +65,7 @@ static char sccsid[] = "%W% (Berkeley) %G%"; #endif /* LIBC_SCCS and not lint */ /* - * A subroutine version of the macro putchar + * A subroutine version of the macro putchar. */ #include <stdio.h> @@ -80,7 +80,7 @@ _putchar_r (ptr, c) int c; { _REENT_SMALL_CHECK_INIT(_stdout_r (ptr)); - return __sputc (c, _stdout_r (ptr)); + return putc (c, _stdout_r (ptr)); } #ifndef _REENT_ONLY diff --git a/newlib/libc/stdio/putchar_u.c b/newlib/libc/stdio/putchar_u.c new file mode 100644 index 0000000..3542fe4 --- /dev/null +++ b/newlib/libc/stdio/putchar_u.c @@ -0,0 +1,80 @@ +/* + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the University of California, Berkeley. The name of the + * University may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +/* +FUNCTION +<<putchar_unlocked>>---non-thread-safe version of putchar (macro) + +INDEX + putchar_unlocked + +POSIX_SYNOPSIS + #include <stdio.h> + int putchar_unlocked(int <[ch]>); + +DESCRIPTION +<<putchar_unlocked>> is a non-thread-safe version of <<putchar>> +declared in <<stdio.h>>. <<putchar_unlocked>> may only safely be used +within a scope protected by flockfile() (or ftrylockfile()) and +funlockfile(). These functions may safely be used in a multi-threaded +program if and only if they are called while the invoking thread owns +the ( FILE *) object, as is the case after a successful call to the +flockfile() or ftrylockfile() functions. If threads are disabled, +then <<putchar_unlocked>> is equivalent to <<putchar>>. + +RETURNS +See <<putchar>>. + +PORTABILITY +POSIX 1003.1 requires <<putchar_unlocked>>. <<putchar_unlocked>> may +be implemented as a macro. + +Supporting OS subroutines required: <<close>>, <<fstat>>, <<isatty>>, +<<lseek>>, <<read>>, <<sbrk>>, <<write>>. */ + +#if defined(LIBC_SCCS) && !defined(lint) +static char sccsid[] = "%W% (Berkeley) %G%"; +#endif /* LIBC_SCCS and not lint */ + +/* + * A subroutine version of the macro putchar_unlocked. + */ + +#include <stdio.h> + +#undef putchar_unlocked + +int +_putchar_unlocked_r (ptr, c) + struct _reent *ptr; + int c; +{ + return putc_unlocked (c, _stdout_r (ptr)); +} + +#ifndef _REENT_ONLY + +int +putchar_unlocked (c) + int c; +{ + /* CHECK_INIT is (eventually) called by __swbuf. */ + + _putchar_unlocked_r (_REENT, c); +} + +#endif |