aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--newlib/ChangeLog12
-rw-r--r--newlib/libc/include/stdio.h10
-rw-r--r--newlib/libc/stdio/Makefile.am8
-rw-r--r--newlib/libc/stdio/Makefile.in26
-rw-r--r--newlib/libc/stdio/getc_u.c68
-rw-r--r--newlib/libc/stdio/getchar_u.c79
-rw-r--r--newlib/libc/stdio/putc_u.c69
-rw-r--r--newlib/libc/stdio/putchar.c4
-rw-r--r--newlib/libc/stdio/putchar_u.c80
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