aboutsummaryrefslogtreecommitdiff
path: root/libio
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2004-12-22 20:10:10 +0000
committerUlrich Drepper <drepper@redhat.com>2004-12-22 20:10:10 +0000
commita334319f6530564d22e775935d9c91663623a1b4 (patch)
treeb5877475619e4c938e98757d518bb1e9cbead751 /libio
parent0ecb606cb6cf65de1d9fc8a919bceb4be476c602 (diff)
downloadglibc-a334319f6530564d22e775935d9c91663623a1b4.zip
glibc-a334319f6530564d22e775935d9c91663623a1b4.tar.gz
glibc-a334319f6530564d22e775935d9c91663623a1b4.tar.bz2
(CFLAGS-tst-align.c): Add -mpreferred-stack-boundary=4.
Diffstat (limited to 'libio')
-rw-r--r--libio/Makefile12
-rw-r--r--libio/Versions3
-rw-r--r--libio/bits/libio-ldbl.h25
-rw-r--r--libio/bits/stdio-ldbl.h74
-rw-r--r--libio/bits/stdio.h12
-rw-r--r--libio/bits/stdio2.h69
-rw-r--r--libio/bug-memstream1.c133
-rw-r--r--libio/bug-wmemstream1.c136
-rw-r--r--libio/fileops.c39
-rw-r--r--libio/fmemopen.c30
-rw-r--r--libio/fputwc.c4
-rw-r--r--libio/fputwc_u.c4
-rw-r--r--libio/fwprintf.c6
-rw-r--r--libio/fwscanf.c6
-rw-r--r--libio/genops.c72
-rw-r--r--libio/getwc_u.c4
-rw-r--r--libio/iofclose.c4
-rw-r--r--libio/iofgets.c10
-rw-r--r--libio/iofgets_u.c10
-rw-r--r--libio/iofgetws.c10
-rw-r--r--libio/iofgetws_u.c10
-rw-r--r--libio/iofopncook.c34
-rw-r--r--libio/iofwide.c75
-rw-r--r--libio/iogetdelim.c10
-rw-r--r--libio/iogetline.c56
-rw-r--r--libio/iogetwline.c4
-rw-r--r--libio/ioungetwc.c4
-rw-r--r--libio/iovdprintf.c10
-rw-r--r--libio/iovsprintf.c14
-rw-r--r--libio/iovsscanf.c9
-rw-r--r--libio/iovswscanf.c11
-rw-r--r--libio/libc_fatal.c31
-rw-r--r--libio/libio.h57
-rw-r--r--libio/libioP.h242
-rw-r--r--libio/memstream.c15
-rw-r--r--libio/obprintf.c12
-rw-r--r--libio/oldfileops.c13
-rw-r--r--libio/oldiofclose.c4
-rw-r--r--libio/stdio.h66
-rw-r--r--libio/strfile.h13
-rw-r--r--libio/strops.c125
-rw-r--r--libio/swprintf.c6
-rw-r--r--libio/swscanf.c7
-rw-r--r--libio/tst-fopenloc2.c116
-rw-r--r--libio/tst-memstream1.c89
-rw-r--r--libio/tst-memstream2.c104
-rw-r--r--libio/tst-setvbuf1.c39
-rw-r--r--libio/tst-wmemstream1.c7
-rw-r--r--libio/tst-wmemstream2.c7
-rw-r--r--libio/vasprintf.c9
-rw-r--r--libio/vscanf.c7
-rw-r--r--libio/vsnprintf.c9
-rw-r--r--libio/vswprintf.c19
-rw-r--r--libio/vwprintf.c9
-rw-r--r--libio/vwscanf.c7
-rw-r--r--libio/wfiledoalloc.c32
-rw-r--r--libio/wfileops.c4
-rw-r--r--libio/wgenops.c12
-rw-r--r--libio/wmemstream.c150
-rw-r--r--libio/wprintf.c7
-rw-r--r--libio/wscanf.c7
-rw-r--r--libio/wstrops.c142
62 files changed, 528 insertions, 1739 deletions
diff --git a/libio/Makefile b/libio/Makefile
index 553fbda..a97623f 100644
--- a/libio/Makefile
+++ b/libio/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1995-2002,2003,2004,2006 Free Software Foundation, Inc.
+# Copyright (C) 1995-2002, 2003, 2004 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
# The GNU C Library is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
subdir := libio
headers := stdio.h libio.h _G_config.h bits/stdio.h bits/stdio-lock.h \
- bits/sys_errlist.h bits/stdio2.h bits/stdio-ldbl.h bits/libio-ldbl.h
+ bits/sys_errlist.h bits/stdio2.h
routines := \
filedoalloc iofclose iofdopen iofflush iofgetpos iofgets iofopen \
@@ -35,7 +35,7 @@ routines := \
iofputws iofputws_u iogetwline iowpadn ioungetwc putwc putwc_u \
putwchar putwchar_u putchar putchar_u fwprintf swprintf vwprintf \
wprintf wscanf fwscanf vwscanf vswprintf iovswscanf swscanf wgenops \
- wstrops wfileops iofwide fwide wmemstream \
+ wstrops wfileops iofwide fwide \
\
clearerr feof ferror fileno fputc freopen fseek getc getchar \
memstream pclose putc putchar rewind setbuf setlinebuf vasprintf \
@@ -54,11 +54,7 @@ tests = tst_swprintf tst_wprintf tst_swscanf tst_wscanf tst_getwc tst_putwc \
tst-freopen bug-rewind bug-rewind2 bug-ungetc bug-fseek \
tst-mmap-eofsync tst-mmap-fflushsync bug-mmap-fflush \
tst-mmap2-eofsync tst-mmap-offend bug-fopena+ bug-wfflush \
- bug-ungetc2 bug-ftell bug-ungetc3 bug-ungetc4 tst-fopenloc2 \
- tst-memstream1 tst-memstream2 \
- tst-wmemstream1 tst-wmemstream2 \
- bug-memstream1 bug-wmemstream1 \
- tst-setvbuf1
+ bug-ungetc2 bug-ftell bug-ungetc3 bug-ungetc4
test-srcs = test-freopen
all: # Make this the default target; it will be defined in Rules.
diff --git a/libio/Versions b/libio/Versions
index e7a96da..c870494 100644
--- a/libio/Versions
+++ b/libio/Versions
@@ -145,9 +145,6 @@ libc {
# w*
wprintf; wscanf;
}
- GLIBC_2.4 {
- open_wmemstream;
- }
GLIBC_PRIVATE {
# Used by NPTL and librt
__libc_fatal;
diff --git a/libio/bits/libio-ldbl.h b/libio/bits/libio-ldbl.h
deleted file mode 100644
index 8674bcb..0000000
--- a/libio/bits/libio-ldbl.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* -mlong-double-64 compatibility mode for libio functions.
- Copyright (C) 2006 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-#ifndef _IO_STDIO_H
-# error "Never include <bits/libio-ldbl.h> directly; use <libio.h> instead."
-#endif
-
-__LDBL_REDIR_DECL (_IO_vfscanf)
-__LDBL_REDIR_DECL (_IO_vfprintf)
diff --git a/libio/bits/stdio-ldbl.h b/libio/bits/stdio-ldbl.h
deleted file mode 100644
index 7a42912..0000000
--- a/libio/bits/stdio-ldbl.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* -mlong-double-64 compatibility mode for stdio functions.
- Copyright (C) 2006 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-#ifndef _STDIO_H
-# error "Never include <bits/stdio-ldbl.h> directly; use <stdio.h> instead."
-#endif
-
-__BEGIN_NAMESPACE_STD
-__LDBL_REDIR_DECL (fprintf)
-__LDBL_REDIR_DECL (printf)
-__LDBL_REDIR_DECL (sprintf)
-__LDBL_REDIR_DECL (vfprintf)
-__LDBL_REDIR_DECL (vprintf)
-__LDBL_REDIR_DECL (vsprintf)
-__LDBL_REDIR_DECL (fscanf)
-__LDBL_REDIR_DECL (scanf)
-__LDBL_REDIR_DECL (sscanf)
-__END_NAMESPACE_STD
-
-#if defined __USE_BSD || defined __USE_ISOC99 || defined __USE_UNIX98
-__BEGIN_NAMESPACE_C99
-__LDBL_REDIR_DECL (snprintf)
-__LDBL_REDIR_DECL (vsnprintf)
-__END_NAMESPACE_C99
-#endif
-
-#ifdef __USE_ISOC99
-__BEGIN_NAMESPACE_C99
-__LDBL_REDIR_DECL (vfscanf)
-__LDBL_REDIR_DECL (vsscanf)
-__LDBL_REDIR_DECL (vscanf)
-__END_NAMESPACE_C99
-#endif
-
-#ifdef __USE_GNU
-__LDBL_REDIR_DECL (vdprintf)
-__LDBL_REDIR_DECL (dprintf)
-__LDBL_REDIR_DECL (vasprintf)
-__LDBL_REDIR_DECL (__asprintf)
-__LDBL_REDIR_DECL (asprintf)
-__LDBL_REDIR_DECL (obstack_printf)
-__LDBL_REDIR_DECL (obstack_vprintf)
-#endif
-
-#if __USE_FORTIFY_LEVEL > 0 && !defined __cplusplus
-__LDBL_REDIR_DECL (__sprintf_chk)
-__LDBL_REDIR_DECL (__vsprintf_chk)
-# if defined __USE_BSD || defined __USE_ISOC99 || defined __USE_UNIX98
-__LDBL_REDIR_DECL (__snprintf_chk)
-__LDBL_REDIR_DECL (__vsnprintf_chk)
-# endif
-# if __USE_FORTIFY_LEVEL > 1
-__LDBL_REDIR_DECL (__fprintf_chk)
-__LDBL_REDIR_DECL (__printf_chk)
-__LDBL_REDIR_DECL (__vfprintf_chk)
-__LDBL_REDIR_DECL (__vprintf_chk)
-# endif
-#endif
diff --git a/libio/bits/stdio.h b/libio/bits/stdio.h
index 2d44fad..9e951ad 100644
--- a/libio/bits/stdio.h
+++ b/libio/bits/stdio.h
@@ -1,5 +1,5 @@
/* Optimizing macros and inline functions for stdio functions.
- Copyright (C) 1998, 2000, 2001, 2004, 2007 Free Software Foundation, Inc.
+ Copyright (C) 1998, 2000, 2001, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -44,16 +44,6 @@ getchar (void)
}
-# ifdef __USE_MISC
-/* Faster version when locking is not necessary. */
-__STDIO_INLINE int
-fgetc_unlocked (FILE *__fp)
-{
- return _IO_getc_unlocked (__fp);
-}
-# endif /* misc */
-
-
# if defined __USE_POSIX || defined __USE_MISC
/* This is defined in POSIX.1:1996. */
__STDIO_INLINE int
diff --git a/libio/bits/stdio2.h b/libio/bits/stdio2.h
index f1d745c..acf07ea 100644
--- a/libio/bits/stdio2.h
+++ b/libio/bits/stdio2.h
@@ -1,5 +1,5 @@
/* Checking macros for stdio functions.
- Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -49,7 +49,7 @@ extern int __vsnprintf_chk (char *__restrict __s, size_t __n, int __flag,
__builtin___vsnprintf_chk (str, len, __USE_FORTIFY_LEVEL - 1, __bos (str), \
fmt, ap)
-#endif
+#endif
#if __USE_FORTIFY_LEVEL > 1
@@ -61,67 +61,18 @@ extern int __vfprintf_chk (FILE *__restrict __stream, int __flag,
extern int __vprintf_chk (int __flag, __const char *__restrict __format,
_G_va_list __ap);
-# if __GNUC_PREREQ (4, 0)
-# define printf(...) \
+# define printf(...) \
__printf_chk (__USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
-# define fprintf(stream, ...) \
+# define fprintf(stream, ...) \
__fprintf_chk (stream, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
-# define vprintf(format, ap) \
+# define vprintf(format, ap) \
__vprintf_chk (__USE_FORTIFY_LEVEL - 1, format, ap)
-# define vfprintf(stream, format, ap) \
+# define vfprintf(stream, format, ap) \
__vfprintf_chk (stream, __USE_FORTIFY_LEVEL - 1, format, ap)
-# else
-# define printf(...) \
- __builtin___printf_chk (__USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
-# define fprintf(stream, ...) \
- __builtin___fprintf_chk (stream, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
-# define vprintf(format, ap) \
- __builtin___vprintf_chk (__USE_FORTIFY_LEVEL - 1, format, ap)
-# define vfprintf(stream, format, ap) \
- __builtin___vfprintf_chk (stream, __USE_FORTIFY_LEVEL - 1, format, ap)
-# endif
#endif
-extern char *__gets_chk (char *__str, size_t) __wur;
-extern char *__REDIRECT (__gets_alias, (char *__str), gets) __wur;
-
-extern __always_inline __wur char *
-gets (char *__str)
-{
- if (__bos (__str) != (size_t) -1)
- return __gets_chk (__str, __bos (__str));
- return __gets_alias (__str);
-}
-
-extern char *__fgets_chk (char *__restrict __s, size_t __size, int __n,
- FILE *__restrict __stream) __wur;
-extern char *__REDIRECT (__fgets_alias,
- (char *__restrict __s, int __n,
- FILE *__restrict __stream), fgets) __wur;
-
-extern __always_inline __wur char *
-fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
-{
- if (__bos (__s) != (size_t) -1
- && (!__builtin_constant_p (__n) || (size_t) __n > __bos (__s)))
- return __fgets_chk (__s, __bos (__s), __n, __stream);
- return __fgets_alias (__s, __n, __stream);
-}
-
-#ifdef __USE_GNU
-extern char *__fgets_unlocked_chk (char *__restrict __s, size_t __size,
- int __n, FILE *__restrict __stream) __wur;
-extern char *__REDIRECT (__fgets_unlocked_alias,
- (char *__restrict __s, int __n,
- FILE *__restrict __stream), fgets_unlocked) __wur;
-
-extern __always_inline __wur char *
-fgets_unlocked (char *__restrict __s, int __n, FILE *__restrict __stream)
-{
- if (__bos (__s) != (size_t) -1
- && (!__builtin_constant_p (__n) || (size_t) __n > __bos (__s)))
- return __fgets_unlocked_chk (__s, __bos (__s), __n, __stream);
- return __fgets_unlocked_alias (__s, __n, __stream);
-}
-#endif
+extern char *__gets_chk (char *__str, size_t);
+#define gets(__str) \
+ ((__bos (__str) == (size_t) -1) \
+ ? (gets) (__str) : __gets_chk (__str, __bos (__str)))
diff --git a/libio/bug-memstream1.c b/libio/bug-memstream1.c
deleted file mode 100644
index 8af36fe..0000000
--- a/libio/bug-memstream1.c
+++ /dev/null
@@ -1,133 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-
-
-static int
-do_test (void)
-{
- size_t size;
- char *buf;
- FILE *fp = open_memstream (&buf, &size);
- if (fp == NULL)
- {
- puts ("open_memstream failed");
- return 1;
- }
-
- off64_t off = ftello64 (fp);
- if (off != 0)
- {
- puts ("initial position wrong");
- return 1;
- }
-
- if (fseek (fp, 32768, SEEK_SET) != 0)
- {
- puts ("fseek failed");
- return 1;
- }
-
- if (fputs ("foo", fp) == EOF)
- {
- puts ("fputs failed");
- return 1;
- }
-
- if (fclose (fp) == EOF)
- {
- puts ("fclose failed");
- return 1;
- }
-
- if (size != 32768 + 3)
- {
- printf ("expected size %d, got %zu\n", 32768 + 3, size);
- return 1;
- }
-
- for (int i = 0; i < 32768; ++i)
- if (buf[i] != '\0')
- {
- printf ("byte at offset %d is %#hhx\n", i, buf[i]);
- return 1;
- }
-
- if (memcmp (buf + 32768, "foo", 3) != 0)
- {
- puts ("written string incorrect");
- return 1;
- }
-
- /* Mark the buffer. */
- memset (buf, 'A', size);
- free (buf);
-
- /* Try again, this time with write mode enabled before the seek. */
- fp = open_memstream (&buf, &size);
- if (fp == NULL)
- {
- puts ("2nd open_memstream failed");
- return 1;
- }
-
- off = ftello64 (fp);
- if (off != 0)
- {
- puts ("2nd initial position wrong");
- return 1;
- }
-
- if (fputs ("bar", fp) == EOF)
- {
- puts ("2nd fputs failed");
- return 1;
- }
-
- if (fseek (fp, 32768, SEEK_SET) != 0)
- {
- puts ("2nd fseek failed");
- return 1;
- }
-
- if (fputs ("foo", fp) == EOF)
- {
- puts ("3rd fputs failed");
- return 1;
- }
-
- if (fclose (fp) == EOF)
- {
- puts ("2nd fclose failed");
- return 1;
- }
-
- if (size != 32768 + 3)
- {
- printf ("2nd expected size %d, got %zu\n", 32768 + 3, size);
- return 1;
- }
-
- if (memcmp (buf, "bar", 3) != 0)
- {
- puts ("initial string incorrect in 2nd try");
- return 1;
- }
-
- for (int i = 3; i < 32768; ++i)
- if (buf[i] != '\0')
- {
- printf ("byte at offset %d is %#hhx in 2nd try\n", i, buf[i]);
- return 1;
- }
-
- if (memcmp (buf + 32768, "foo", 3) != 0)
- {
- puts ("written string incorrect in 2nd try");
- return 1;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/libio/bug-wmemstream1.c b/libio/bug-wmemstream1.c
deleted file mode 100644
index 22d67f7..0000000
--- a/libio/bug-wmemstream1.c
+++ /dev/null
@@ -1,136 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <wchar.h>
-
-
-static int
-do_test (void)
-{
- size_t size;
- wchar_t *buf;
- FILE *fp = open_wmemstream (&buf, &size);
- if (fp == NULL)
- {
- puts ("open_wmemstream failed");
- return 1;
- }
-
- off64_t off = ftello64 (fp);
- if (off != 0)
- {
- puts ("initial position wrong");
- return 1;
- }
-
- if (fseek (fp, 32768, SEEK_SET) != 0)
- {
- puts ("fseek failed");
- return 1;
- }
-
- if (fputws (L"foo", fp) == EOF)
- {
- puts ("fputws failed");
- return 1;
- }
-
- if (fclose (fp) == EOF)
- {
- puts ("fclose failed");
- return 1;
- }
-
- if (size != 32768 + 3)
- {
- printf ("expected size %d, got %zu\n", 32768 + 3, size);
- return 1;
- }
-
- for (int i = 0; i < 32768; ++i)
- if (buf[i] != L'\0')
- {
- printf ("wide character at offset %d is %#x\n",
- i, (unsigned int) buf[i]);
- return 1;
- }
-
- if (wmemcmp (buf + 32768, L"foo", 3) != 0)
- {
- puts ("written string incorrect");
- return 1;
- }
-
- /* Mark the buffer. */
- wmemset (buf, L'A', size);
- free (buf);
-
- /* Try again, this time with write mode enabled before the seek. */
- fp = open_wmemstream (&buf, &size);
- if (fp == NULL)
- {
- puts ("2nd open_wmemstream failed");
- return 1;
- }
-
- off = ftello64 (fp);
- if (off != 0)
- {
- puts ("2nd initial position wrong");
- return 1;
- }
-
- if (fputws (L"bar", fp) == EOF)
- {
- puts ("2nd fputws failed");
- return 1;
- }
-
- if (fseek (fp, 32768, SEEK_SET) != 0)
- {
- puts ("2nd fseek failed");
- return 1;
- }
-
- if (fputws (L"foo", fp) == EOF)
- {
- puts ("3rd fputws failed");
- return 1;
- }
-
- if (fclose (fp) == EOF)
- {
- puts ("2nd fclose failed");
- return 1;
- }
-
- if (size != 32768 + 3)
- {
- printf ("2nd expected size %d, got %zu\n", 32768 + 3, size);
- return 1;
- }
-
- if (wmemcmp (buf, L"bar", 3) != 0)
- {
- puts ("initial string incorrect in 2nd try");
- return 1;
- }
-
- for (int i = 3; i < 32768; ++i)
- if (buf[i] != L'\0')
- {
- printf ("wide character at offset %d is %#x in 2nd try\n",
- i, (unsigned int) buf[i]);
- return 1;
- }
-
- if (wmemcmp (buf + 32768, L"foo", 3) != 0)
- {
- puts ("written string incorrect in 2nd try");
- return 1;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/libio/fileops.c b/libio/fileops.c
index 886b372..19151cf 100644
--- a/libio/fileops.c
+++ b/libio/fileops.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1993, 1995, 1997-2005, 2006, 2007
- Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1995, 1997-2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Per Bothner <bothner@cygnus.com>.
@@ -175,8 +174,14 @@ _IO_new_file_close_it (fp)
close_status = _IO_SYSCLOSE (fp);
/* Free buffer. */
+ if (fp->_mode <= 0)
+ {
+ INTUSE(_IO_setb) (fp, NULL, NULL, 0);
+ _IO_setg (fp, NULL, NULL, NULL);
+ _IO_setp (fp, NULL, NULL);
+ }
#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
- if (fp->_mode > 0)
+ else
{
if (_IO_have_wbackup (fp))
INTUSE(_IO_free_wbackup_area) (fp);
@@ -185,9 +190,6 @@ _IO_new_file_close_it (fp)
_IO_wsetp (fp, NULL, NULL);
}
#endif
- INTUSE(_IO_setb) (fp, NULL, NULL, 0);
- _IO_setg (fp, NULL, NULL, NULL);
- _IO_setp (fp, NULL, NULL);
INTUSE(_IO_un_link) ((struct _IO_FILE_plus *) fp);
fp->_flags = _IO_MAGIC|CLOSED_FILEBUF_FLAGS;
@@ -397,9 +399,6 @@ _IO_new_file_fopen (fp, filename, mode, is32not64)
/* And now the transliteration. */
cc->__cd_out.__cd.__data[0].__trans = &__libio_translit;
- /* From now on use the wide character callback functions. */
- ((struct _IO_FILE_plus *) fp)->vtable = fp->_wide_data->_wide_vtable;
-
/* Set the mode now. */
result->_mode = 1;
}
@@ -473,7 +472,7 @@ _IO_file_setbuf_mmap (fp, p, len)
return result;
}
-static _IO_size_t new_do_write (_IO_FILE *, const char *, _IO_size_t);
+static _IO_size_t new_do_write (_IO_FILE *, const char *, _IO_size_t) __THROW;
/* Write TO_DO bytes from DATA to FP.
Then mark FP as having empty buffers. */
@@ -827,10 +826,10 @@ _IO_new_file_overflow (f, ch)
return EOF;
}
/* If currently reading or no buffer allocated. */
- if ((f->_flags & _IO_CURRENTLY_PUTTING) == 0 || f->_IO_write_base == NULL)
+ if ((f->_flags & _IO_CURRENTLY_PUTTING) == 0 || f->_IO_write_base == 0)
{
/* Allocate a buffer if needed. */
- if (f->_IO_write_base == NULL)
+ if (f->_IO_write_base == 0)
{
INTUSE(_IO_doallocbuf) (f);
_IO_setg (f, f->_IO_buf_base, f->_IO_buf_base, f->_IO_buf_base);
@@ -1282,7 +1281,7 @@ _IO_new_file_xsputn (f, data, n)
register const char *s = (const char *) data;
_IO_size_t to_do = n;
int must_flush = 0;
- _IO_size_t count = 0;
+ _IO_size_t count;
if (n <= 0)
return 0;
@@ -1291,6 +1290,7 @@ _IO_new_file_xsputn (f, data, n)
(or the filebuf is unbuffered), use sys_write directly. */
/* First figure out how much space is available in the buffer. */
+ count = f->_IO_write_end - f->_IO_write_ptr; /* Space available. */
if ((f->_flags & _IO_LINE_BUF) && (f->_flags & _IO_CURRENTLY_PUTTING))
{
count = f->_IO_buf_end - f->_IO_write_ptr;
@@ -1308,9 +1308,6 @@ _IO_new_file_xsputn (f, data, n)
}
}
}
- else if (f->_IO_write_end > f->_IO_write_ptr)
- count = f->_IO_write_end - f->_IO_write_ptr; /* Space available. */
-
/* Then fill the buffer. */
if (count > 0)
{
@@ -1341,9 +1338,7 @@ _IO_new_file_xsputn (f, data, n)
_IO_size_t block_size, do_write;
/* Next flush the (full) buffer. */
if (_IO_OVERFLOW (f, EOF) == EOF)
- /* If nothing else has to be written we must not signal the
- caller that everything has been written. */
- return to_do == 0 ? EOF : n - to_do;
+ return n - to_do;
/* Try to maintain alignment: write a whole number of blocks.
dont_write is what gets left over. */
@@ -1469,7 +1464,8 @@ _IO_file_xsgetn (fp, data, n)
}
INTDEF(_IO_file_xsgetn)
-static _IO_size_t _IO_file_xsgetn_mmap (_IO_FILE *, void *, _IO_size_t);
+static _IO_size_t _IO_file_xsgetn_mmap (_IO_FILE *, void *, _IO_size_t)
+ __THROW;
static _IO_size_t
_IO_file_xsgetn_mmap (fp, data, n)
_IO_FILE *fp;
@@ -1528,7 +1524,8 @@ _IO_file_xsgetn_mmap (fp, data, n)
return s - (char *) data;
}
-static _IO_size_t _IO_file_xsgetn_maybe_mmap (_IO_FILE *, void *, _IO_size_t);
+static _IO_size_t _IO_file_xsgetn_maybe_mmap (_IO_FILE *, void *, _IO_size_t)
+ __THROW;
static _IO_size_t
_IO_file_xsgetn_maybe_mmap (fp, data, n)
_IO_FILE *fp;
diff --git a/libio/fmemopen.c b/libio/fmemopen.c
index f3b2800..ab6ffdd 100644
--- a/libio/fmemopen.c
+++ b/libio/fmemopen.c
@@ -1,5 +1,5 @@
/* Fmemopen implementation.
- Copyright (C) 2000, 2002, 2005, 2006 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Hanno Mueller, kontakt@hanno.de, 2000.
@@ -27,6 +27,8 @@
* but couldn't find it in libio. The following snippet of code is an
* attempt to implement what glibc's documentation describes.
*
+ * No, it isn't really tested yet. :-)
+ *
*
*
* I already see some potential problems:
@@ -71,7 +73,6 @@
#include <libio.h>
#include <stdio.h>
#include <stdlib.h>
-#include <stdint.h>
#include <string.h>
#include <sys/types.h>
#include "libioP.h"
@@ -127,7 +128,7 @@ fmemopen_write (void *cookie, const char *b, size_t s)
if ((size_t) (c->pos + addnullc) == c->size)
{
__set_errno (ENOSPC);
- return 0;
+ return -1;
}
s = c->size - c->pos - addnullc;
}
@@ -165,7 +166,7 @@ fmemopen_seek (void *cookie, _IO_off64_t *p, int w)
break;
case SEEK_END:
- np = c->maxpos - *p;
+ np = c->size - *p;
break;
default:
@@ -175,9 +176,9 @@ fmemopen_seek (void *cookie, _IO_off64_t *p, int w)
if (np < 0 || (size_t) np > c->size)
return -1;
- *p = c->pos = np;
+ c->pos = np;
- return 0;
+ return np;
}
@@ -202,13 +203,6 @@ fmemopen (void *buf, size_t len, const char *mode)
cookie_io_functions_t iof;
fmemopen_cookie_t *c;
- if (__builtin_expect (len == 0, 0))
- {
- einval:
- __set_errno (EINVAL);
- return NULL;
- }
-
c = (fmemopen_cookie_t *) malloc (sizeof (fmemopen_cookie_t));
if (c == NULL)
return NULL;
@@ -226,15 +220,7 @@ fmemopen (void *buf, size_t len, const char *mode)
c->buffer[0] = '\0';
}
else
- {
- if (__builtin_expect ((uintptr_t) len > -(uintptr_t) buf, 0))
- {
- free (c);
- goto einval;
- }
-
- c->buffer = buf;
- }
+ c->buffer = buf;
c->size = len;
diff --git a/libio/fputwc.c b/libio/fputwc.c
index 42cf9d7..8c74943 100644
--- a/libio/fputwc.c
+++ b/libio/fputwc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993,1996,1997,1998,1999,2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1993,1996,1997,1998,1999,2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -33,7 +33,7 @@ fputwc (wc, fp)
wchar_t wc;
_IO_FILE *fp;
{
- wint_t result;
+ int result;
CHECK_FILE (fp, EOF);
_IO_acquire_lock (fp);
if (_IO_fwide (fp, 1) < 0)
diff --git a/libio/fputwc_u.c b/libio/fputwc_u.c
index 0478410..93cbcab 100644
--- a/libio/fputwc_u.c
+++ b/libio/fputwc_u.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1996, 1997, 1999, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1996, 1997, 1999 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -35,7 +35,7 @@ fputwc_unlocked (wc, fp)
wchar_t wc;
_IO_FILE *fp;
{
- CHECK_FILE (fp, WEOF);
+ CHECK_FILE (fp, EOF);
if (_IO_fwide (fp, 1) < 0)
return WEOF;
return _IO_putwc_unlocked (wc, fp);
diff --git a/libio/fwprintf.c b/libio/fwprintf.c
index 9d9111d..cadeda0 100644
--- a/libio/fwprintf.c
+++ b/libio/fwprintf.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1991, 1997, 1999, 2000, 2001, 2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1997, 1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -17,7 +16,6 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
-#include <libioP.h>
#include <stdarg.h>
#include <stdio.h>
#include <wchar.h>
@@ -37,4 +35,4 @@ __fwprintf (FILE *stream, const wchar_t *format, ...)
return done;
}
-ldbl_weak_alias (__fwprintf, fwprintf)
+weak_alias (__fwprintf, fwprintf)
diff --git a/libio/fwscanf.c b/libio/fwscanf.c
index 17296fa..411e182 100644
--- a/libio/fwscanf.c
+++ b/libio/fwscanf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1997, 1999, 2000, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1997, 1999, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -16,7 +16,6 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
-#include <libioP.h>
#include <stdarg.h>
#include <stdio.h>
#include <wchar.h>
@@ -24,7 +23,7 @@
/* Read formatted input from STREAM according to the format string FORMAT. */
/* VARARGS2 */
int
-__fwscanf (FILE *stream, const wchar_t *format, ...)
+fwscanf (FILE *stream, const wchar_t *format, ...)
{
va_list arg;
int done;
@@ -35,4 +34,3 @@ __fwscanf (FILE *stream, const wchar_t *format, ...)
return done;
}
-ldbl_strong_alias (__fwscanf, fwscanf)
diff --git a/libio/genops.c b/libio/genops.c
index 8d62da7..741ed77 100644
--- a/libio/genops.c
+++ b/libio/genops.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1993,1995,1997-2002, 2003, 2004, 2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1993,1995,1997-2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -33,10 +32,6 @@
#include <stdlib.h>
#endif
#include <string.h>
-#include <stdbool.h>
-#ifdef _LIBC
-#include <sched.h>
-#endif
#ifdef _IO_MTSAFE_IO
static _IO_lock_t list_all_lock = _IO_lock_initializer;
@@ -367,7 +362,7 @@ __uflow (fp)
#endif
if (fp->_mode == 0)
- _IO_fwide (fp, -1);
+ _IO_fwide (fp, -11);
if (_IO_in_put_mode (fp))
if (INTUSE(_IO_switch_to_get_mode) (fp) == EOF)
return EOF;
@@ -662,7 +657,6 @@ _IO_no_init (fp, flags, orientation, wd, jmp)
fp->_wide_data->_wide_vtable = jmp;
}
#endif
- fp->_freeres_list = NULL;
}
int
@@ -920,27 +914,10 @@ INTDEF(_IO_flush_all_linebuffered)
weak_alias (_IO_flush_all_linebuffered, _flushlbf)
#endif
-
-/* The following is a bit tricky. In general, we want to unbuffer the
- streams so that all output which follows is seen. If we are not
- looking for memory leaks it does not make much sense to free the
- actual buffer because this will happen anyway once the program
- terminated. If we do want to look for memory leaks we have to free
- the buffers. Whether something is freed is determined by the
- function sin the libc_freeres section. Those are called as part of
- the atexit routine, just like _IO_cleanup. The problem is we do
- not know whether the freeres code is called first or _IO_cleanup.
- if the former is the case, we set the DEALLOC_BUFFER variable to
- true and _IO_unbuffer_write will take care of the rest. If
- _IO_unbuffer_write is called first we add the streams to a list
- which the freeres function later can walk through. */
static void _IO_unbuffer_write (void);
-static bool dealloc_buffers;
-static _IO_FILE *freeres_list;
-
static void
-_IO_unbuffer_write (void)
+_IO_unbuffer_write ()
{
struct _IO_FILE *fp;
for (fp = (_IO_FILE *) INTUSE(_IO_list_all); fp; fp = fp->_chain)
@@ -950,32 +927,7 @@ _IO_unbuffer_write (void)
|| (fp->_flags & _IO_IS_APPENDING))
/* Iff stream is un-orientated, it wasn't used. */
&& fp->_mode != 0)
- {
- int cnt;
-#define MAXTRIES 2
- for (cnt = 0; cnt < MAXTRIES; ++cnt)
- if (_IO_lock_trylock (*fp->_lock) == 0)
- break;
- else
- /* Give the other thread time to finish up its use of the
- stream. */
- __sched_yield ();
-
- if (! dealloc_buffers && !(fp->_flags & _IO_USER_BUF))
- {
- fp->_flags |= _IO_USER_BUF;
-
- fp->_freeres_list = freeres_list;
- freeres_list = fp;
- fp->_freeres_buf = fp->_IO_buf_base;
- fp->_freeres_size = _IO_blen (fp);
- }
-
- _IO_SETBUF (fp, NULL, 0);
-
- if (cnt < MAXTRIES)
- _IO_lock_unlock (*fp->_lock);
- }
+ _IO_SETBUF (fp, NULL, 0);
/* Make sure that never again the wide char functions can be
used. */
@@ -983,25 +935,11 @@ _IO_unbuffer_write (void)
}
}
-
-libc_freeres_fn (buffer_free)
-{
- dealloc_buffers = true;
-
- while (freeres_list != NULL)
- {
- FREE_BUF (freeres_list->_freeres_buf, freeres_list->_freeres_size);
-
- freeres_list = freeres_list->_freeres_list;
- }
-}
-
-
int
_IO_cleanup ()
{
/* We do *not* want locking. Some threads might use streams but
- that is their problem, we flush them underneath them. */
+ that is there problem, we flush them underneath them. */
int result = _IO_flush_all_lockp (0);
/* We currently don't have a reliable mechanism for making sure that
diff --git a/libio/getwc_u.c b/libio/getwc_u.c
index 229343c..bdad3c8 100644
--- a/libio/getwc_u.c
+++ b/libio/getwc_u.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993,1995,1996,1997,1999,2000, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1993,1995,1996,1997,1999,2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -33,7 +33,7 @@
wint_t
__getwc_unlocked (FILE *fp)
{
- CHECK_FILE (fp, WEOF);
+ CHECK_FILE (fp, EOF);
return _IO_getwc_unlocked (fp);
}
diff --git a/libio/iofclose.c b/libio/iofclose.c
index aa2ba40..a372ae2 100644
--- a/libio/iofclose.c
+++ b/libio/iofclose.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993,1995,1997-2004,2005 Free Software Foundation, Inc.
+/* Copyright (C) 1993,1995,1997-2003,2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -62,8 +62,8 @@ _IO_new_fclose (fp)
status = INTUSE(_IO_file_close_it) (fp);
else
status = fp->_flags & _IO_ERR_SEEN ? -1 : 0;
- _IO_release_lock (fp);
_IO_FINISH (fp);
+ _IO_release_lock (fp);
if (fp->_mode > 0)
{
#if _LIBC
diff --git a/libio/iofgets.c b/libio/iofgets.c
index 601b174..879cc97 100644
--- a/libio/iofgets.c
+++ b/libio/iofgets.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2002, 2003, 2005
+/* Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2002, 2003
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -41,14 +41,6 @@ _IO_fgets (buf, n, fp)
CHECK_FILE (fp, NULL);
if (n <= 0)
return NULL;
- if (__builtin_expect (n == 1, 0))
- {
- /* Another irregular case: since we have to store a NUL byte and
- there is only room for exactly one byte, we don't have to
- read anything. */
- buf[0] = '\0';
- return buf;
- }
_IO_acquire_lock (fp);
/* This is very tricky since a file descriptor may be in the
non-blocking mode. The error flag doesn't mean much in this
diff --git a/libio/iofgets_u.c b/libio/iofgets_u.c
index 4fb5b1c..ded2a7c 100644
--- a/libio/iofgets_u.c
+++ b/libio/iofgets_u.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993,1995-1998,2002,2005 Free Software Foundation, Inc.
+/* Copyright (C) 1993,1995,1996,1997,1998,2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -40,14 +40,6 @@ fgets_unlocked (buf, n, fp)
CHECK_FILE (fp, NULL);
if (n <= 0)
return NULL;
- if (__builtin_expect (n == 1, 0))
- {
- /* Another irregular case: since we have to store a NUL byte and
- there is only room for exactly one byte, we don't have to
- read anything. */
- buf[0] = '\0';
- return buf;
- }
/* This is very tricky since a file descriptor may be in the
non-blocking mode. The error flag doesn't mean much in this
case. We return an error only when there is a new error. */
diff --git a/libio/iofgetws.c b/libio/iofgetws.c
index 7753911..654c051 100644
--- a/libio/iofgetws.c
+++ b/libio/iofgetws.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2001, 2005
+/* Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2001
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -41,14 +41,6 @@ fgetws (buf, n, fp)
CHECK_FILE (fp, NULL);
if (n <= 0)
return NULL;
- if (__builtin_expect (n == 1, 0))
- {
- /* Another irregular case: since we have to store a NUL byte and
- there is only room for exactly one byte, we don't have to
- read anything. */
- buf[0] = L'\0';
- return buf;
- }
_IO_acquire_lock (fp);
/* This is very tricky since a file descriptor may be in the
non-blocking mode. The error flag doesn't mean much in this
diff --git a/libio/iofgetws_u.c b/libio/iofgetws_u.c
index 9fb8a5c..1253564 100644
--- a/libio/iofgetws_u.c
+++ b/libio/iofgetws_u.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 95, 96, 97, 98, 99, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 95, 96, 97, 98, 99 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -40,14 +40,6 @@ fgetws_unlocked (buf, n, fp)
CHECK_FILE (fp, NULL);
if (n <= 0)
return NULL;
- if (__builtin_expect (n == 1, 0))
- {
- /* Another irregular case: since we have to store a NUL byte and
- there is only room for exactly one byte, we don't have to
- read anything. */
- buf[0] = L'\0';
- return buf;
- }
/* This is very tricky since a file descriptor may be in the
non-blocking mode. The error flag doesn't mean much in this
case. We return an error only when there is a new error. */
diff --git a/libio/iofopncook.c b/libio/iofopncook.c
index 976ff50..321eb67 100644
--- a/libio/iofopncook.c
+++ b/libio/iofopncook.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1993,95,97,99,2000,2002,2004, 2005
- Free Software Foundation, Inc.
+/* Copyright (C) 1993,95,97,99,2000,2002,2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -37,8 +36,6 @@ static _IO_ssize_t _IO_cookie_read (register _IO_FILE* fp, void* buf,
static _IO_ssize_t _IO_cookie_write (register _IO_FILE* fp,
const void* buf, _IO_ssize_t size);
static _IO_off64_t _IO_cookie_seek (_IO_FILE *fp, _IO_off64_t offset, int dir);
-static _IO_off64_t _IO_cookie_seekoff (_IO_FILE *fp, _IO_off64_t offset,
- int dir, int mode);
static int _IO_cookie_close (_IO_FILE* fp);
static _IO_ssize_t
@@ -64,16 +61,9 @@ _IO_cookie_write (fp, buf, size)
struct _IO_cookie_file *cfile = (struct _IO_cookie_file *) fp;
if (cfile->__io_functions.write == NULL)
- {
- fp->_flags |= _IO_ERR_SEEN;
- return 0;
- }
-
- _IO_ssize_t n = cfile->__io_functions.write (cfile->__cookie, buf, size);
- if (n < size)
- fp->_flags |= _IO_ERR_SEEN;
+ return -1;
- return n;
+ return cfile->__io_functions.write (cfile->__cookie, buf, size);
}
static _IO_off64_t
@@ -104,20 +94,6 @@ _IO_cookie_close (fp)
}
-static _IO_off64_t
-_IO_cookie_seekoff (fp, offset, dir, mode)
- _IO_FILE *fp;
- _IO_off64_t offset;
- int dir;
- int mode;
-{
- /* We must force the fileops code to always use seek to determine
- the position. */
- fp->_offset = _IO_pos_BAD;
- return INTUSE(_IO_file_seekoff) (fp, offset, dir, mode);
-}
-
-
static const struct _IO_jump_t _IO_cookie_jumps = {
JUMP_INIT_DUMMY,
JUMP_INIT(finish, INTUSE(_IO_file_finish)),
@@ -127,7 +103,7 @@ static const struct _IO_jump_t _IO_cookie_jumps = {
JUMP_INIT(pbackfail, INTUSE(_IO_default_pbackfail)),
JUMP_INIT(xsputn, INTUSE(_IO_file_xsputn)),
JUMP_INIT(xsgetn, INTUSE(_IO_default_xsgetn)),
- JUMP_INIT(seekoff, _IO_cookie_seekoff),
+ JUMP_INIT(seekoff, INTUSE(_IO_file_seekoff)),
JUMP_INIT(seekpos, _IO_default_seekpos),
JUMP_INIT(setbuf, INTUSE(_IO_file_setbuf)),
JUMP_INIT(sync, INTUSE(_IO_file_sync)),
@@ -247,7 +223,7 @@ static const struct _IO_jump_t _IO_old_cookie_jumps = {
JUMP_INIT(pbackfail, INTUSE(_IO_default_pbackfail)),
JUMP_INIT(xsputn, INTUSE(_IO_file_xsputn)),
JUMP_INIT(xsgetn, INTUSE(_IO_default_xsgetn)),
- JUMP_INIT(seekoff, _IO_cookie_seekoff),
+ JUMP_INIT(seekoff, INTUSE(_IO_file_seekoff)),
JUMP_INIT(seekpos, _IO_default_seekpos),
JUMP_INIT(setbuf, INTUSE(_IO_file_setbuf)),
JUMP_INIT(sync, INTUSE(_IO_file_sync)),
diff --git a/libio/iofwide.c b/libio/iofwide.c
index a993668..0312421 100644
--- a/libio/iofwide.c
+++ b/libio/iofwide.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999-2003, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -40,7 +40,6 @@
# include <wcsmbs/wcsmbsload.h>
# include <iconv/gconv_int.h>
# include <shlib-compat.h>
-# include <sysdep.h>
#endif
@@ -69,7 +68,7 @@ static int do_always_noconv (struct _IO_codecvt *codecvt);
/* The functions used in `codecvt' for libio are always the same. */
-const struct _IO_codecvt __libio_codecvt =
+struct _IO_codecvt __libio_codecvt =
{
.__codecvt_destr = NULL, /* Destructor, never used. */
.__codecvt_do_out = do_out,
@@ -83,7 +82,7 @@ const struct _IO_codecvt __libio_codecvt =
#ifdef _LIBC
-const struct __gconv_trans_data __libio_translit attribute_hidden =
+struct __gconv_trans_data __libio_translit attribute_hidden =
{
.__trans_fct = __gconv_transliterate
};
@@ -127,11 +126,12 @@ _IO_fwide (fp, mode)
selected locale for LC_CTYPE. */
#ifdef _LIBC
{
+ struct gconv_fcts fcts;
+
/* Clear the state. We start all over again. */
memset (&fp->_wide_data->_IO_state, '\0', sizeof (__mbstate_t));
memset (&fp->_wide_data->_IO_last_state, '\0', sizeof (__mbstate_t));
- struct gconv_fcts fcts;
__wcsmbs_clone_conv (&fcts);
assert (fcts.towc_nsteps == 1);
assert (fcts.tomb_nsteps == 1);
@@ -159,8 +159,7 @@ _IO_fwide (fp, mode)
cc->__cd_out.__cd.__data[0].__statep = &fp->_wide_data->_IO_state;
/* And now the transliteration. */
- cc->__cd_out.__cd.__data[0].__trans
- = (struct __gconv_trans_data *) &__libio_translit;
+ cc->__cd_out.__cd.__data[0].__trans = &__libio_translit;
}
#else
# ifdef _GLIBCPP_USE_WCHAR_T
@@ -229,23 +228,17 @@ do_out (struct _IO_codecvt *codecvt, __mbstate_t *statep,
size_t dummy;
const unsigned char *from_start_copy = (unsigned char *) from_start;
- codecvt->__cd_out.__cd.__data[0].__outbuf = (unsigned char *) to_start;
- codecvt->__cd_out.__cd.__data[0].__outbufend = (unsigned char *) to_end;
+ codecvt->__cd_out.__cd.__data[0].__outbuf = to_start;
+ codecvt->__cd_out.__cd.__data[0].__outbufend = to_end;
codecvt->__cd_out.__cd.__data[0].__statep = statep;
- __gconv_fct fct = gs->__fct;
-#ifdef PTR_DEMANGLE
- if (gs->__shlib_handle != NULL)
- PTR_DEMANGLE (fct);
-#endif
-
- status = DL_CALL_FCT (fct,
+ status = DL_CALL_FCT (gs->__fct,
(gs, codecvt->__cd_out.__cd.__data, &from_start_copy,
(const unsigned char *) from_end, NULL,
&dummy, 0, 0));
*from_stop = (wchar_t *) from_start_copy;
- *to_stop = (char *) codecvt->__cd_out.__cd.__data[0].__outbuf;
+ *to_stop = codecvt->__cd_out.__cd.__data[0].__outbuf;
switch (status)
{
@@ -301,21 +294,15 @@ do_unshift (struct _IO_codecvt *codecvt, __mbstate_t *statep,
int status;
size_t dummy;
- codecvt->__cd_out.__cd.__data[0].__outbuf = (unsigned char *) to_start;
- codecvt->__cd_out.__cd.__data[0].__outbufend = (unsigned char *) to_end;
+ codecvt->__cd_out.__cd.__data[0].__outbuf = to_start;
+ codecvt->__cd_out.__cd.__data[0].__outbufend = to_end;
codecvt->__cd_out.__cd.__data[0].__statep = statep;
- __gconv_fct fct = gs->__fct;
-#ifdef PTR_DEMANGLE
- if (gs->__shlib_handle != NULL)
- PTR_DEMANGLE (fct);
-#endif
-
- status = DL_CALL_FCT (fct,
+ status = DL_CALL_FCT (gs->__fct,
(gs, codecvt->__cd_out.__cd.__data, NULL, NULL,
NULL, &dummy, 1, 0));
- *to_stop = (char *) codecvt->__cd_out.__cd.__data[0].__outbuf;
+ *to_stop = codecvt->__cd_out.__cd.__data[0].__outbuf;
switch (status)
{
@@ -370,22 +357,15 @@ do_in (struct _IO_codecvt *codecvt, __mbstate_t *statep,
size_t dummy;
const unsigned char *from_start_copy = (unsigned char *) from_start;
- codecvt->__cd_in.__cd.__data[0].__outbuf = (unsigned char *) to_start;
- codecvt->__cd_in.__cd.__data[0].__outbufend = (unsigned char *) to_end;
+ codecvt->__cd_in.__cd.__data[0].__outbuf = (char *) to_start;
+ codecvt->__cd_in.__cd.__data[0].__outbufend = (char *) to_end;
codecvt->__cd_in.__cd.__data[0].__statep = statep;
- __gconv_fct fct = gs->__fct;
-#ifdef PTR_DEMANGLE
- if (gs->__shlib_handle != NULL)
- PTR_DEMANGLE (fct);
-#endif
-
- status = DL_CALL_FCT (fct,
+ status = DL_CALL_FCT (gs->__fct,
(gs, codecvt->__cd_in.__cd.__data, &from_start_copy,
- (const unsigned char *) from_end, NULL,
- &dummy, 0, 0));
+ from_end, NULL, &dummy, 0, 0));
- *from_stop = (const char *) from_start_copy;
+ *from_stop = from_start_copy;
*to_stop = (wchar_t *) codecvt->__cd_in.__cd.__data[0].__outbuf;
switch (status)
@@ -474,20 +454,13 @@ do_length (struct _IO_codecvt *codecvt, __mbstate_t *statep,
int status;
size_t dummy;
- codecvt->__cd_in.__cd.__data[0].__outbuf = (unsigned char *) to_buf;
- codecvt->__cd_in.__cd.__data[0].__outbufend = (unsigned char *) &to_buf[max];
+ codecvt->__cd_in.__cd.__data[0].__outbuf = (char *) to_buf;
+ codecvt->__cd_in.__cd.__data[0].__outbufend = (char *) &to_buf[max];
codecvt->__cd_in.__cd.__data[0].__statep = statep;
- __gconv_fct fct = gs->__fct;
-#ifdef PTR_DEMANGLE
- if (gs->__shlib_handle != NULL)
- PTR_DEMANGLE (fct);
-#endif
-
- status = DL_CALL_FCT (fct,
- (gs, codecvt->__cd_in.__cd.__data, &cp,
- (const unsigned char *) from_end, NULL,
- &dummy, 0, 0));
+ status = DL_CALL_FCT (gs->__fct,
+ (gs, codecvt->__cd_in.__cd.__data, &cp, from_end,
+ NULL, &dummy, 0, 0));
result = cp - (const unsigned char *) from_start;
#else
diff --git a/libio/iogetdelim.c b/libio/iogetdelim.c
index a362bf9..3d0c976 100644
--- a/libio/iogetdelim.c
+++ b/libio/iogetdelim.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1994,1996-1998,2001,2003,2005 Free Software Foundation, Inc.
+/* Copyright (C) 1994,1996,1997,1998,2001,2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -45,7 +45,7 @@ _IO_getdelim (lineptr, n, delimiter, fp)
int delimiter;
_IO_FILE *fp;
{
- _IO_ssize_t result;
+ int result;
_IO_ssize_t cur_len = 0;
_IO_ssize_t len;
@@ -91,12 +91,6 @@ _IO_getdelim (lineptr, n, delimiter, fp)
t = (char *) memchr ((void *) fp->_IO_read_ptr, delimiter, len);
if (t != NULL)
len = (t - fp->_IO_read_ptr) + 1;
- if (__builtin_expect (cur_len + len + 1 < 0, 0))
- {
- __set_errno (EOVERFLOW);
- result = -1;
- goto unlock_return;
- }
/* Make enough space for len+1 (for final NUL) bytes. */
needed = cur_len + len + 1;
if (needed > *n)
diff --git a/libio/iogetline.c b/libio/iogetline.c
index 022a444..eca38cf 100644
--- a/libio/iogetline.c
+++ b/libio/iogetline.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1993,1997,1998,2000,2001,2002,2005
- Free Software Foundation, Inc.
+/* Copyright (C) 1993,1997,1998,2000,2001,2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -74,8 +73,7 @@ _IO_getline_info (fp, buf, n, delim, extract_delim, eof)
int c = __uflow (fp);
if (c == EOF)
{
- if (eof)
- *eof = c;
+ if (eof) *eof = c;
break;
}
if (c == delim)
@@ -91,31 +89,31 @@ _IO_getline_info (fp, buf, n, delim, extract_delim, eof)
*ptr++ = c;
n--;
}
- else
- {
- char *t;
- if ((_IO_size_t) len >= n)
- len = n;
- t = (char *) memchr ((void *) fp->_IO_read_ptr, delim, len);
- if (t != NULL)
- {
- _IO_size_t old_len = ptr-buf;
- len = t - fp->_IO_read_ptr;
- if (extract_delim >= 0)
- {
- ++t;
- if (extract_delim > 0)
- ++len;
- }
- memcpy ((void *) ptr, (void *) fp->_IO_read_ptr, len);
- fp->_IO_read_ptr = t;
- return old_len + len;
- }
- memcpy ((void *) ptr, (void *) fp->_IO_read_ptr, len);
- fp->_IO_read_ptr += len;
- ptr += len;
- n -= len;
- }
+ else
+ {
+ char *t;
+ if ((_IO_size_t) len >= n)
+ len = n;
+ t = (char *) memchr ((void *) fp->_IO_read_ptr, delim, len);
+ if (t != NULL)
+ {
+ _IO_size_t old_len = ptr-buf;
+ len = t - fp->_IO_read_ptr;
+ if (extract_delim >= 0)
+ {
+ ++t;
+ if (extract_delim > 0)
+ ++len;
+ }
+ memcpy ((void *) ptr, (void *) fp->_IO_read_ptr, len);
+ fp->_IO_read_ptr = t;
+ return old_len + len;
+ }
+ memcpy ((void *) ptr, (void *) fp->_IO_read_ptr, len);
+ fp->_IO_read_ptr += len;
+ ptr += len;
+ n -= len;
+ }
}
return ptr - buf;
}
diff --git a/libio/iogetwline.c b/libio/iogetwline.c
index 45db478..e529b7d 100644
--- a/libio/iogetwline.c
+++ b/libio/iogetwline.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993,1997-2000,2002,2005 Free Software Foundation, Inc.
+/* Copyright (C) 1993,1997,1998,1999,2000,2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -87,9 +87,9 @@ _IO_getwline_info (fp, buf, n, delim, extract_delim, eof)
*ptr++ = wc;
else if (extract_delim < 0)
INTUSE(_IO_sputbackc) (fp, wc);
+ return ptr - buf;
if (extract_delim > 0)
++len;
- return ptr - buf;
}
*ptr++ = wc;
n--;
diff --git a/libio/ioungetwc.c b/libio/ioungetwc.c
index f7b6866..00d3e96 100644
--- a/libio/ioungetwc.c
+++ b/libio/ioungetwc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2006
+/* Copyright (C) 1993, 1996, 1997, 1998, 1999, 2001, 2002, 2003
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -34,7 +34,7 @@ ungetwc (c, fp)
wint_t c;
_IO_FILE *fp;
{
- wint_t result;
+ int result;
CHECK_FILE (fp, WEOF);
_IO_acquire_lock (fp);
_IO_fwide (fp, 1);
diff --git a/libio/iovdprintf.c b/libio/iovdprintf.c
index edab849..e81d870 100644
--- a/libio/iovdprintf.c
+++ b/libio/iovdprintf.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1995, 1997-2000, 2001, 2002, 2003, 2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1995,1997-2000,2001,2002,2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -26,7 +25,7 @@
This exception applies to code released by its copyright holders
in files containing the exception. */
-#include <libioP.h>
+#include "libioP.h"
#include <stdio_ext.h>
int
@@ -64,4 +63,7 @@ _IO_vdprintf (d, format, arg)
return done;
}
-ldbl_weak_alias (_IO_vdprintf, vdprintf)
+
+#ifdef weak_alias
+weak_alias (_IO_vdprintf, vdprintf)
+#endif
diff --git a/libio/iovsprintf.c b/libio/iovsprintf.c
index 7fcd0a1..b26a99b 100644
--- a/libio/iovsprintf.c
+++ b/libio/iovsprintf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1997-2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1997-2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -29,7 +29,10 @@
#include "strfile.h"
int
-__IO_vsprintf (char *string, const char *format, _IO_va_list args)
+_IO_vsprintf (string, format, args)
+ char *string;
+ const char *format;
+ _IO_va_list args;
{
_IO_strfile sf;
int ret;
@@ -44,7 +47,8 @@ __IO_vsprintf (char *string, const char *format, _IO_va_list args)
_IO_putc_unlocked ('\0', (_IO_FILE *) &sf._sbf);
return ret;
}
-INTDEF2(__IO_vsprintf, _IO_vsprintf)
+INTDEF(_IO_vsprintf)
-ldbl_strong_alias (__IO_vsprintf, _IO_vsprintf)
-ldbl_weak_alias (__IO_vsprintf, vsprintf)
+#ifdef weak_alias
+weak_alias (_IO_vsprintf, vsprintf)
+#endif
diff --git a/libio/iovsscanf.c b/libio/iovsscanf.c
index 10e4b0a..1a965c2 100644
--- a/libio/iovsscanf.c
+++ b/libio/iovsscanf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1997-2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1997-2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -45,5 +45,8 @@ _IO_vsscanf (string, format, args)
ret = INTUSE(_IO_vfscanf) ((_IO_FILE *) &sf._sbf, format, args, NULL);
return ret;
}
-ldbl_weak_alias (_IO_vsscanf, __vsscanf)
-ldbl_weak_alias (_IO_vsscanf, vsscanf)
+
+#ifdef weak_alias
+weak_alias (_IO_vsscanf, __vsscanf)
+weak_alias (_IO_vsscanf, vsscanf)
+#endif
diff --git a/libio/iovswscanf.c b/libio/iovswscanf.c
index 182d8da..1bbddd4 100644
--- a/libio/iovswscanf.c
+++ b/libio/iovswscanf.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1993, 1997-2000, 2001, 2002, 2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1997-2000, 2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -31,7 +30,10 @@
#include <wchar.h>
int
-__vswscanf (const wchar_t *string, const wchar_t *format, _IO_va_list args)
+vswscanf (string, format, args)
+ const wchar_t *string;
+ const wchar_t *format;
+ _IO_va_list args;
{
int ret;
_IO_strfile sf;
@@ -45,5 +47,4 @@ __vswscanf (const wchar_t *string, const wchar_t *format, _IO_va_list args)
ret = _IO_vfwscanf ((_IO_FILE *) &sf._sbf, format, args, NULL);
return ret;
}
-ldbl_hidden_def (__vswscanf, vswscanf)
-ldbl_strong_alias (__vswscanf, vswscanf)
+libc_hidden_def (vswscanf)
diff --git a/libio/libc_fatal.c b/libio/libc_fatal.c
deleted file mode 100644
index be23849..0000000
--- a/libio/libc_fatal.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright (C) 1993, 1995, 1997, 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-#include <stdio.h>
-
-/* Abort with an error message. */
-void
-__libc_fatal (message)
- const char *message;
-{
- /* This function should write MESSAGE out in the most reliable way.
- It is called in situations like internal stdio lossage. */
-
- abort ();
-}
-libc_hidden_def (__libc_fatal)
diff --git a/libio/libio.h b/libio/libio.h
index 9df0861..3b6facd 100644
--- a/libio/libio.h
+++ b/libio/libio.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-1995,1997-2005,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1991-1995, 1997-2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Per Bothner <bothner@cygnus.com>.
@@ -142,7 +142,6 @@
#ifdef _LIBC
# define _IO_FLAGS2_FORTIFY 4
#endif
-#define _IO_FLAGS2_USER_WBUF 8
/* These are "formatting flags" matching the iostream fmtflags enum values. */
#define _IO_SKIPWS 01
@@ -318,19 +317,13 @@ struct _IO_FILE_complete
/* Wide character stream stuff. */
struct _IO_codecvt *_codecvt;
struct _IO_wide_data *_wide_data;
- struct _IO_FILE *_freeres_list;
- void *_freeres_buf;
- size_t _freeres_size;
# else
void *__pad1;
void *__pad2;
- void *__pad3;
- void *__pad4;
- size_t __pad5;
# endif
int _mode;
/* Make sure we don't get into trouble again. */
- char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
+ char _unused2[15 * sizeof (int) - 2 * sizeof (void *)];
#endif
};
@@ -410,15 +403,15 @@ extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write,
extern "C" {
#endif
-extern int __underflow (_IO_FILE *);
-extern int __uflow (_IO_FILE *);
-extern int __overflow (_IO_FILE *, int);
-extern _IO_wint_t __wunderflow (_IO_FILE *);
-extern _IO_wint_t __wuflow (_IO_FILE *);
-extern _IO_wint_t __woverflow (_IO_FILE *, _IO_wint_t);
+extern int __underflow (_IO_FILE *) __THROW;
+extern int __uflow (_IO_FILE *) __THROW;
+extern int __overflow (_IO_FILE *, int) __THROW;
+extern _IO_wint_t __wunderflow (_IO_FILE *) __THROW;
+extern _IO_wint_t __wuflow (_IO_FILE *) __THROW;
+extern _IO_wint_t __woverflow (_IO_FILE *, _IO_wint_t) __THROW;
#if __GNUC__ >= 3
-# define _IO_BE(expr, res) __builtin_expect ((expr), res)
+# define _IO_BE(expr, res) __builtin_expect (expr, res)
#else
# define _IO_BE(expr, res) (expr)
#endif
@@ -448,12 +441,12 @@ extern _IO_wint_t __woverflow (_IO_FILE *, _IO_wint_t);
#define _IO_feof_unlocked(__fp) (((__fp)->_flags & _IO_EOF_SEEN) != 0)
#define _IO_ferror_unlocked(__fp) (((__fp)->_flags & _IO_ERR_SEEN) != 0)
-extern int _IO_getc (_IO_FILE *__fp);
-extern int _IO_putc (int __c, _IO_FILE *__fp);
+extern int _IO_getc (_IO_FILE *__fp) __THROW;
+extern int _IO_putc (int __c, _IO_FILE *__fp) __THROW;
extern int _IO_feof (_IO_FILE *__fp) __THROW;
extern int _IO_ferror (_IO_FILE *__fp) __THROW;
-extern int _IO_peekc_locked (_IO_FILE *__fp);
+extern int _IO_peekc_locked (_IO_FILE *__fp) __THROW;
/* This one is for Emacs. */
#define _IO_PENDING_OUTPUT_COUNT(_fp) \
@@ -479,20 +472,20 @@ extern int _IO_ftrylockfile (_IO_FILE *) __THROW;
#endif /* !_IO_MTSAFE_IO */
extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
- _IO_va_list, int *__restrict);
+ _IO_va_list, int *__restrict) __THROW;
extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
- _IO_va_list);
-extern _IO_ssize_t _IO_padn (_IO_FILE *, int, _IO_ssize_t);
-extern _IO_size_t _IO_sgetn (_IO_FILE *, void *, _IO_size_t);
+ _IO_va_list) __THROW;
+extern _IO_ssize_t _IO_padn (_IO_FILE *, int, _IO_ssize_t) __THROW;
+extern _IO_size_t _IO_sgetn (_IO_FILE *, void *, _IO_size_t) __THROW;
-extern _IO_off64_t _IO_seekoff (_IO_FILE *, _IO_off64_t, int, int);
-extern _IO_off64_t _IO_seekpos (_IO_FILE *, _IO_off64_t, int);
+extern _IO_off64_t _IO_seekoff (_IO_FILE *, _IO_off64_t, int, int) __THROW;
+extern _IO_off64_t _IO_seekpos (_IO_FILE *, _IO_off64_t, int) __THROW;
extern void _IO_free_backup_area (_IO_FILE *) __THROW;
#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-extern _IO_wint_t _IO_getwc (_IO_FILE *__fp);
-extern _IO_wint_t _IO_putwc (wchar_t __wc, _IO_FILE *__fp);
+extern _IO_wint_t _IO_getwc (_IO_FILE *__fp) __THROW;
+extern _IO_wint_t _IO_putwc (wchar_t __wc, _IO_FILE *__fp) __THROW;
extern int _IO_fwide (_IO_FILE *__fp, int __mode) __THROW;
# if __GNUC__ >= 2
/* While compiling glibc we have to handle compatibility with very old
@@ -528,17 +521,13 @@ weak_extern (_IO_stdin_used);
# endif
extern int _IO_vfwscanf (_IO_FILE * __restrict, const wchar_t * __restrict,
- _IO_va_list, int *__restrict);
+ _IO_va_list, int *__restrict) __THROW;
extern int _IO_vfwprintf (_IO_FILE *__restrict, const wchar_t *__restrict,
- _IO_va_list);
-extern _IO_ssize_t _IO_wpadn (_IO_FILE *, wint_t, _IO_ssize_t);
+ _IO_va_list) __THROW;
+extern _IO_ssize_t _IO_wpadn (_IO_FILE *, wint_t, _IO_ssize_t) __THROW;
extern void _IO_free_wbackup_area (_IO_FILE *) __THROW;
#endif
-#ifdef __LDBL_COMPAT
-# include <bits/libio-ldbl.h>
-#endif
-
#ifdef __cplusplus
}
#endif
diff --git a/libio/libioP.h b/libio/libioP.h
index a574b40..319b0fd 100644
--- a/libio/libioP.h
+++ b/libio/libioP.h
@@ -1,5 +1,4 @@
-/* Copyright (C) 1993, 1997-2003,2004,2005,2006,2007
- Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1997-2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -36,8 +35,6 @@
/*# include <comthread.h>*/
#endif
-#include <math_ldbl_opt.h>
-
#include "iolibio.h"
/* Control of exported symbols. Used in glibc. By default we don't
@@ -380,7 +377,7 @@ typedef struct _IO_FILE *_IO_ITER;
extern void _IO_switch_to_main_get_area (_IO_FILE *) __THROW;
extern void _IO_switch_to_backup_area (_IO_FILE *) __THROW;
-extern int _IO_switch_to_get_mode (_IO_FILE *);
+extern int _IO_switch_to_get_mode (_IO_FILE *) __THROW;
extern void _IO_init (_IO_FILE *, int) __THROW;
extern int _IO_sputbackc (_IO_FILE *, int) __THROW;
extern int _IO_sungetc (_IO_FILE *) __THROW;
@@ -394,7 +391,7 @@ extern unsigned _IO_adjust_column (unsigned, const char *, int) __THROW;
extern void _IO_switch_to_main_wget_area (_IO_FILE *) __THROW;
extern void _IO_switch_to_wbackup_area (_IO_FILE *) __THROW;
-extern int _IO_switch_to_wget_mode (_IO_FILE *);
+extern int _IO_switch_to_wget_mode (_IO_FILE *) __THROW;
extern void _IO_wsetb (_IO_FILE *, wchar_t *, wchar_t *, int) __THROW;
extern wint_t _IO_sputbackwc (_IO_FILE *, wint_t) __THROW;
extern wint_t _IO_sungetwc (_IO_FILE *) __THROW;
@@ -404,8 +401,8 @@ extern unsigned _IO_adjust_wcolumn (unsigned, const wchar_t *, int) __THROW;
/* Marker-related function. */
-extern void _IO_init_marker (struct _IO_marker *, _IO_FILE *);
-extern void _IO_init_wmarker (struct _IO_marker *, _IO_FILE *);
+extern void _IO_init_marker (struct _IO_marker *, _IO_FILE *) __THROW;
+extern void _IO_init_wmarker (struct _IO_marker *, _IO_FILE *) __THROW;
extern void _IO_remove_marker (struct _IO_marker *) __THROW;
extern int _IO_marker_difference (struct _IO_marker *, struct _IO_marker *)
__THROW;
@@ -434,22 +431,22 @@ libc_hidden_proto (_IO_list_resetlock)
/* Default jumptable functions. */
extern int _IO_default_underflow (_IO_FILE *) __THROW;
-extern int _IO_default_uflow (_IO_FILE *);
-extern wint_t _IO_wdefault_uflow (_IO_FILE *);
+extern int _IO_default_uflow (_IO_FILE *) __THROW;
+extern wint_t _IO_wdefault_uflow (_IO_FILE *) __THROW;
extern int _IO_default_doallocate (_IO_FILE *) __THROW;
extern int _IO_wdefault_doallocate (_IO_FILE *) __THROW;
extern void _IO_default_finish (_IO_FILE *, int) __THROW;
extern void _IO_wdefault_finish (_IO_FILE *, int) __THROW;
extern int _IO_default_pbackfail (_IO_FILE *, int) __THROW;
extern wint_t _IO_wdefault_pbackfail (_IO_FILE *, wint_t) __THROW;
-extern _IO_FILE* _IO_default_setbuf (_IO_FILE *, char *, _IO_ssize_t);
+extern _IO_FILE* _IO_default_setbuf (_IO_FILE *, char *, _IO_ssize_t) __THROW;
extern _IO_size_t _IO_default_xsputn (_IO_FILE *, const void *, _IO_size_t);
extern _IO_size_t _IO_wdefault_xsputn (_IO_FILE *, const void *, _IO_size_t);
extern _IO_size_t _IO_default_xsgetn (_IO_FILE *, void *, _IO_size_t);
extern _IO_size_t _IO_wdefault_xsgetn (_IO_FILE *, void *, _IO_size_t);
extern _IO_off64_t _IO_default_seekoff (_IO_FILE *, _IO_off64_t, int, int)
__THROW;
-extern _IO_off64_t _IO_default_seekpos (_IO_FILE *, _IO_off64_t, int);
+extern _IO_off64_t _IO_default_seekpos (_IO_FILE *, _IO_off64_t, int) __THROW;
extern _IO_ssize_t _IO_default_write (_IO_FILE *, const void *, _IO_ssize_t);
extern _IO_ssize_t _IO_default_read (_IO_FILE *, void *, _IO_ssize_t);
extern int _IO_default_stat (_IO_FILE *, void *) __THROW;
@@ -472,23 +469,23 @@ extern const struct _IO_jump_t _IO_streambuf_jumps;
extern const struct _IO_jump_t _IO_old_proc_jumps attribute_hidden;
extern const struct _IO_jump_t _IO_str_jumps attribute_hidden;
extern const struct _IO_jump_t _IO_wstr_jumps attribute_hidden;
-extern const struct _IO_codecvt __libio_codecvt attribute_hidden;
-extern int _IO_do_write (_IO_FILE *, const char *, _IO_size_t);
-extern int _IO_new_do_write (_IO_FILE *, const char *, _IO_size_t);
-extern int _IO_old_do_write (_IO_FILE *, const char *, _IO_size_t);
-extern int _IO_wdo_write (_IO_FILE *, const wchar_t *, _IO_size_t);
-extern int _IO_flush_all_lockp (int);
-extern int _IO_flush_all (void);
-extern int _IO_cleanup (void);
-extern void _IO_flush_all_linebuffered (void);
-extern int _IO_new_fgetpos (_IO_FILE *, _IO_fpos_t *);
-extern int _IO_old_fgetpos (_IO_FILE *, _IO_fpos_t *);
-extern int _IO_new_fsetpos (_IO_FILE *, const _IO_fpos_t *);
-extern int _IO_old_fsetpos (_IO_FILE *, const _IO_fpos_t *);
-extern int _IO_new_fgetpos64 (_IO_FILE *, _IO_fpos64_t *);
-extern int _IO_old_fgetpos64 (_IO_FILE *, _IO_fpos64_t *);
-extern int _IO_new_fsetpos64 (_IO_FILE *, const _IO_fpos64_t *);
-extern int _IO_old_fsetpos64 (_IO_FILE *, const _IO_fpos64_t *);
+extern struct _IO_codecvt __libio_codecvt attribute_hidden;
+extern int _IO_do_write (_IO_FILE *, const char *, _IO_size_t) __THROW;
+extern int _IO_new_do_write (_IO_FILE *, const char *, _IO_size_t) __THROW;
+extern int _IO_old_do_write (_IO_FILE *, const char *, _IO_size_t) __THROW;
+extern int _IO_wdo_write (_IO_FILE *, const wchar_t *, _IO_size_t) __THROW;
+extern int _IO_flush_all_lockp (int) __THROW;
+extern int _IO_flush_all (void) __THROW;
+extern int _IO_cleanup (void) __THROW;
+extern void _IO_flush_all_linebuffered (void) __THROW;
+extern int _IO_new_fgetpos (_IO_FILE *, _IO_fpos_t *) __THROW;
+extern int _IO_old_fgetpos (_IO_FILE *, _IO_fpos_t *) __THROW;
+extern int _IO_new_fsetpos (_IO_FILE *, const _IO_fpos_t *) __THROW;
+extern int _IO_old_fsetpos (_IO_FILE *, const _IO_fpos_t *) __THROW;
+extern int _IO_new_fgetpos64 (_IO_FILE *, _IO_fpos64_t *) __THROW;
+extern int _IO_old_fgetpos64 (_IO_FILE *, _IO_fpos64_t *) __THROW;
+extern int _IO_new_fsetpos64 (_IO_FILE *, const _IO_fpos64_t *) __THROW;
+extern int _IO_old_fsetpos64 (_IO_FILE *, const _IO_fpos64_t *) __THROW;
extern void _IO_old_init (_IO_FILE *fp, int flags) __THROW;
@@ -534,79 +531,95 @@ extern void _IO_old_init (_IO_FILE *fp, int flags) __THROW;
/* Jumptable functions for files. */
extern int _IO_file_doallocate (_IO_FILE *) __THROW;
-extern _IO_FILE* _IO_file_setbuf (_IO_FILE *, char *, _IO_ssize_t);
-extern _IO_off64_t _IO_file_seekoff (_IO_FILE *, _IO_off64_t, int, int);
+extern _IO_FILE* _IO_file_setbuf (_IO_FILE *, char *, _IO_ssize_t) __THROW;
+extern _IO_off64_t _IO_file_seekoff (_IO_FILE *, _IO_off64_t, int, int)
+ __THROW;
extern _IO_off64_t _IO_file_seekoff_mmap (_IO_FILE *, _IO_off64_t, int, int)
__THROW;
-extern _IO_size_t _IO_file_xsputn (_IO_FILE *, const void *, _IO_size_t);
-extern _IO_size_t _IO_file_xsgetn (_IO_FILE *, void *, _IO_size_t);
+extern _IO_size_t _IO_file_xsputn (_IO_FILE *, const void *, _IO_size_t)
+ __THROW;
+extern _IO_size_t _IO_file_xsgetn (_IO_FILE *, void *, _IO_size_t) __THROW;
extern int _IO_file_stat (_IO_FILE *, void *) __THROW;
extern int _IO_file_close (_IO_FILE *) __THROW;
extern int _IO_file_close_mmap (_IO_FILE *) __THROW;
-extern int _IO_file_underflow (_IO_FILE *);
-extern int _IO_file_underflow_mmap (_IO_FILE *);
-extern int _IO_file_underflow_maybe_mmap (_IO_FILE *);
-extern int _IO_file_overflow (_IO_FILE *, int);
+extern int _IO_file_underflow (_IO_FILE *) __THROW;
+extern int _IO_file_underflow_mmap (_IO_FILE *) __THROW;
+extern int _IO_file_underflow_maybe_mmap (_IO_FILE *) __THROW;
+extern int _IO_file_overflow (_IO_FILE *, int) __THROW;
#define _IO_file_is_open(__fp) ((__fp)->_fileno != -1)
extern void _IO_file_init (struct _IO_FILE_plus *) __THROW;
-extern _IO_FILE* _IO_file_attach (_IO_FILE *, int);
-extern _IO_FILE* _IO_file_open (_IO_FILE *, const char *, int, int, int, int);
+extern _IO_FILE* _IO_file_attach (_IO_FILE *, int) __THROW;
+extern _IO_FILE* _IO_file_open (_IO_FILE *, const char *, int, int, int, int)
+ __THROW;
libc_hidden_proto (_IO_file_open)
-extern _IO_FILE* _IO_file_fopen (_IO_FILE *, const char *, const char *, int);
-extern _IO_ssize_t _IO_file_write (_IO_FILE *, const void *, _IO_ssize_t);
-extern _IO_ssize_t _IO_file_read (_IO_FILE *, void *, _IO_ssize_t);
-extern int _IO_file_sync (_IO_FILE *);
-extern int _IO_file_close_it (_IO_FILE *);
+extern _IO_FILE* _IO_file_fopen (_IO_FILE *, const char *, const char *, int)
+ __THROW;
+extern _IO_ssize_t _IO_file_write (_IO_FILE *, const void *, _IO_ssize_t)
+ __THROW;
+extern _IO_ssize_t _IO_file_read (_IO_FILE *, void *, _IO_ssize_t) __THROW;
+extern int _IO_file_sync (_IO_FILE *) __THROW;
+extern int _IO_file_close_it (_IO_FILE *) __THROW;
extern _IO_off64_t _IO_file_seek (_IO_FILE *, _IO_off64_t, int) __THROW;
-extern void _IO_file_finish (_IO_FILE *, int);
+extern void _IO_file_finish (_IO_FILE *, int) __THROW;
-extern _IO_FILE* _IO_new_file_attach (_IO_FILE *, int);
-extern int _IO_new_file_close_it (_IO_FILE *);
-extern void _IO_new_file_finish (_IO_FILE *, int);
+extern _IO_FILE* _IO_new_file_attach (_IO_FILE *, int) __THROW;
+extern int _IO_new_file_close_it (_IO_FILE *) __THROW;
+extern void _IO_new_file_finish (_IO_FILE *, int) __THROW;
extern _IO_FILE* _IO_new_file_fopen (_IO_FILE *, const char *, const char *,
- int);
+ int) __THROW;
extern void _IO_no_init (_IO_FILE *, int, int, struct _IO_wide_data *,
const struct _IO_jump_t *) __THROW;
extern void _IO_new_file_init (struct _IO_FILE_plus *) __THROW;
-extern _IO_FILE* _IO_new_file_setbuf (_IO_FILE *, char *, _IO_ssize_t);
-extern _IO_FILE* _IO_file_setbuf_mmap (_IO_FILE *, char *, _IO_ssize_t);
-extern int _IO_new_file_sync (_IO_FILE *);
-extern int _IO_new_file_underflow (_IO_FILE *);
-extern int _IO_new_file_overflow (_IO_FILE *, int);
-extern _IO_off64_t _IO_new_file_seekoff (_IO_FILE *, _IO_off64_t, int, int);
-extern _IO_ssize_t _IO_new_file_write (_IO_FILE *, const void *, _IO_ssize_t);
-extern _IO_size_t _IO_new_file_xsputn (_IO_FILE *, const void *, _IO_size_t);
-
-extern _IO_FILE* _IO_old_file_setbuf (_IO_FILE *, char *, _IO_ssize_t);
-extern _IO_off64_t _IO_old_file_seekoff (_IO_FILE *, _IO_off64_t, int, int);
-extern _IO_size_t _IO_old_file_xsputn (_IO_FILE *, const void *, _IO_size_t);
-extern int _IO_old_file_underflow (_IO_FILE *);
-extern int _IO_old_file_overflow (_IO_FILE *, int);
+extern _IO_FILE* _IO_new_file_setbuf (_IO_FILE *, char *, _IO_ssize_t) __THROW;
+extern _IO_FILE* _IO_file_setbuf_mmap (_IO_FILE *, char *, _IO_ssize_t)
+ __THROW;
+extern int _IO_new_file_sync (_IO_FILE *) __THROW;
+extern int _IO_new_file_underflow (_IO_FILE *) __THROW;
+extern int _IO_new_file_overflow (_IO_FILE *, int) __THROW;
+extern _IO_off64_t _IO_new_file_seekoff (_IO_FILE *, _IO_off64_t, int, int)
+ __THROW;
+extern _IO_ssize_t _IO_new_file_write (_IO_FILE *, const void *, _IO_ssize_t)
+ __THROW;
+extern _IO_size_t _IO_new_file_xsputn (_IO_FILE *, const void *, _IO_size_t)
+ __THROW;
+
+extern _IO_FILE* _IO_old_file_setbuf (_IO_FILE *, char *, _IO_ssize_t) __THROW;
+extern _IO_off64_t _IO_old_file_seekoff (_IO_FILE *, _IO_off64_t, int, int)
+ __THROW;
+extern _IO_size_t _IO_old_file_xsputn (_IO_FILE *, const void *, _IO_size_t)
+ __THROW;
+extern int _IO_old_file_underflow (_IO_FILE *) __THROW;
+extern int _IO_old_file_overflow (_IO_FILE *, int) __THROW;
extern void _IO_old_file_init (struct _IO_FILE_plus *) __THROW;
-extern _IO_FILE* _IO_old_file_attach (_IO_FILE *, int);
-extern _IO_FILE* _IO_old_file_fopen (_IO_FILE *, const char *, const char *);
-extern _IO_ssize_t _IO_old_file_write (_IO_FILE *, const void *, _IO_ssize_t);
-extern int _IO_old_file_sync (_IO_FILE *);
-extern int _IO_old_file_close_it (_IO_FILE *);
-extern void _IO_old_file_finish (_IO_FILE *, int);
+extern _IO_FILE* _IO_old_file_attach (_IO_FILE *, int) __THROW;
+extern _IO_FILE* _IO_old_file_fopen (_IO_FILE *, const char *, const char *)
+ __THROW;
+extern _IO_ssize_t _IO_old_file_write (_IO_FILE *, const void *, _IO_ssize_t)
+ __THROW;
+extern int _IO_old_file_sync (_IO_FILE *) __THROW;
+extern int _IO_old_file_close_it (_IO_FILE *) __THROW;
+extern void _IO_old_file_finish (_IO_FILE *, int) __THROW;
extern int _IO_wfile_doallocate (_IO_FILE *) __THROW;
-extern _IO_size_t _IO_wfile_xsputn (_IO_FILE *, const void *, _IO_size_t);
-extern _IO_FILE* _IO_wfile_setbuf (_IO_FILE *, wchar_t *, _IO_ssize_t);
-extern wint_t _IO_wfile_sync (_IO_FILE *);
-extern wint_t _IO_wfile_underflow (_IO_FILE *);
-extern wint_t _IO_wfile_overflow (_IO_FILE *, wint_t);
-extern _IO_off64_t _IO_wfile_seekoff (_IO_FILE *, _IO_off64_t, int, int);
+extern _IO_size_t _IO_wfile_xsputn (_IO_FILE *, const void *, _IO_size_t)
+ __THROW;
+extern _IO_FILE* _IO_wfile_setbuf (_IO_FILE *, wchar_t *, _IO_ssize_t) __THROW;
+extern wint_t _IO_wfile_sync (_IO_FILE *) __THROW;
+extern wint_t _IO_wfile_underflow (_IO_FILE *) __THROW;
+extern wint_t _IO_wfile_overflow (_IO_FILE *, wint_t) __THROW;
+extern _IO_off64_t _IO_wfile_seekoff (_IO_FILE *, _IO_off64_t, int, int)
+ __THROW;
/* Jumptable functions for proc_files. */
extern _IO_FILE* _IO_proc_open (_IO_FILE *, const char *, const char *)
__THROW;
extern _IO_FILE* _IO_new_proc_open (_IO_FILE *, const char *, const char *)
__THROW;
-extern _IO_FILE* _IO_old_proc_open (_IO_FILE *, const char *, const char *);
+extern _IO_FILE* _IO_old_proc_open (_IO_FILE *, const char *, const char *)
+ __THROW;
extern int _IO_proc_close (_IO_FILE *) __THROW;
extern int _IO_new_proc_close (_IO_FILE *) __THROW;
-extern int _IO_old_proc_close (_IO_FILE *);
+extern int _IO_old_proc_close (_IO_FILE *) __THROW;
/* Jumptable functions for strfiles. */
extern int _IO_str_underflow (_IO_FILE *) __THROW;
@@ -636,7 +649,7 @@ extern void _IO_wstr_finish (_IO_FILE *, int) __THROW;
extern int _IO_vasprintf (char **result_ptr, __const char *format,
_IO_va_list args) __THROW;
-extern int _IO_vdprintf (int d, __const char *format, _IO_va_list arg);
+extern int _IO_vdprintf (int d, __const char *format, _IO_va_list arg) __THROW;
extern int _IO_vsnprintf (char *string, _IO_size_t maxlen,
__const char *format, _IO_va_list args) __THROW;
@@ -644,62 +657,73 @@ extern int _IO_vsnprintf (char *string, _IO_size_t maxlen,
extern _IO_size_t _IO_getline (_IO_FILE *,char *, _IO_size_t, int, int);
extern _IO_size_t _IO_getline_info (_IO_FILE *,char *, _IO_size_t,
int, int, int *);
-extern _IO_ssize_t _IO_getdelim (char **, _IO_size_t *, int, _IO_FILE *);
+extern _IO_ssize_t _IO_getdelim (char **, _IO_size_t *, int, _IO_FILE *)
+ __THROW;
extern _IO_size_t _IO_getwline (_IO_FILE *,wchar_t *, _IO_size_t, wint_t, int);
extern _IO_size_t _IO_getwline_info (_IO_FILE *,wchar_t *, _IO_size_t,
wint_t, int, wint_t *);
+extern double _IO_strtod (const char *, char **) __THROW;
+extern char *_IO_dtoa (double __d, int __mode, int __ndigits,
+ int *__decpt, int *__sign, char **__rve) __THROW;
+extern int _IO_outfloat (double __value, _IO_FILE *__sb, int __type,
+ int __width, int __precision, int __flags,
+ int __sign_mode, int __fill) __THROW;
extern struct _IO_FILE_plus *_IO_list_all;
extern void (*_IO_cleanup_registration_needed) (void);
/* Prototype for functions with alternative entry point. */
-extern int _IO_flush_all_internal (void);
-extern unsigned _IO_adjust_column_internal (unsigned, const char *, int);
+extern int _IO_flush_all_internal (void) __THROW;
+extern unsigned _IO_adjust_column_internal (unsigned, const char *, int)
+ __THROW;
-extern int _IO_default_uflow_internal (_IO_FILE *);
+extern int _IO_default_uflow_internal (_IO_FILE *) __THROW;
extern void _IO_default_finish_internal (_IO_FILE *, int) __THROW;
extern int _IO_default_pbackfail_internal (_IO_FILE *, int) __THROW;
extern _IO_size_t _IO_default_xsputn_internal (_IO_FILE *, const void *,
- _IO_size_t);
-extern _IO_size_t _IO_default_xsgetn_internal (_IO_FILE *, void *, _IO_size_t);
+ _IO_size_t) __THROW;
+extern _IO_size_t _IO_default_xsgetn_internal (_IO_FILE *, void *, _IO_size_t)
+ __THROW;
extern int _IO_default_doallocate_internal (_IO_FILE *) __THROW;
extern void _IO_wdefault_finish_internal (_IO_FILE *, int) __THROW;
extern wint_t _IO_wdefault_pbackfail_internal (_IO_FILE *, wint_t) __THROW;
extern _IO_size_t _IO_wdefault_xsputn_internal (_IO_FILE *, const void *,
- _IO_size_t);
+ _IO_size_t) __THROW;
extern _IO_size_t _IO_wdefault_xsgetn_internal (_IO_FILE *, void *,
- _IO_size_t);
+ _IO_size_t) __THROW;
extern int _IO_wdefault_doallocate_internal (_IO_FILE *) __THROW;
-extern wint_t _IO_wdefault_uflow_internal (_IO_FILE *);
+extern wint_t _IO_wdefault_uflow_internal (_IO_FILE *) __THROW;
extern int _IO_file_doallocate_internal (_IO_FILE *) __THROW;
-extern _IO_FILE* _IO_file_setbuf_internal (_IO_FILE *, char *, _IO_ssize_t);
+extern _IO_FILE* _IO_file_setbuf_internal (_IO_FILE *, char *, _IO_ssize_t)
+ __THROW;
extern _IO_off64_t _IO_file_seekoff_internal (_IO_FILE *, _IO_off64_t,
- int, int);
+ int, int) __THROW;
extern _IO_size_t _IO_file_xsputn_internal (_IO_FILE *, const void *,
- _IO_size_t);
-extern _IO_size_t _IO_file_xsgetn_internal (_IO_FILE *, void *, _IO_size_t);
+ _IO_size_t) __THROW;
+extern _IO_size_t _IO_file_xsgetn_internal (_IO_FILE *, void *, _IO_size_t)
+ __THROW;
extern int _IO_file_stat_internal (_IO_FILE *, void *) __THROW;
extern int _IO_file_close_internal (_IO_FILE *) __THROW;
-extern int _IO_file_close_it_internal (_IO_FILE *);
-extern int _IO_file_underflow_internal (_IO_FILE *);
-extern int _IO_file_overflow_internal (_IO_FILE *, int);
+extern int _IO_file_close_it_internal (_IO_FILE *) __THROW;
+extern int _IO_file_underflow_internal (_IO_FILE *) __THROW;
+extern int _IO_file_overflow_internal (_IO_FILE *, int) __THROW;
extern void _IO_file_init_internal (struct _IO_FILE_plus *) __THROW;
-extern _IO_FILE* _IO_file_attach_internal (_IO_FILE *, int);
+extern _IO_FILE* _IO_file_attach_internal (_IO_FILE *, int) __THROW;
extern _IO_FILE* _IO_file_fopen_internal (_IO_FILE *, const char *,
- const char *, int);
+ const char *, int) __THROW;
extern _IO_ssize_t _IO_file_read_internal (_IO_FILE *, void *,
_IO_ssize_t);
-extern int _IO_file_sync_internal (_IO_FILE *);
+extern int _IO_file_sync_internal (_IO_FILE *) __THROW;
extern _IO_off64_t _IO_file_seek_internal (_IO_FILE *, _IO_off64_t, int)
__THROW;
-extern void _IO_file_finish_internal (_IO_FILE *, int);
+extern void _IO_file_finish_internal (_IO_FILE *, int) __THROW;
extern _IO_size_t _IO_wfile_xsputn_internal (_IO_FILE *, const void *,
- _IO_size_t);
+ _IO_size_t) __THROW;
extern _IO_off64_t _IO_wfile_seekoff_internal (_IO_FILE *, _IO_off64_t,
- int, int);
-extern wint_t _IO_wfile_sync_internal (_IO_FILE *);
+ int, int) __THROW;
+extern wint_t _IO_wfile_sync_internal (_IO_FILE *) __THROW;
extern int _IO_str_underflow_internal (_IO_FILE *) __THROW;
extern int _IO_str_overflow_internal (_IO_FILE *, int) __THROW;
@@ -720,12 +744,12 @@ extern void _IO_wdoallocbuf_internal (_IO_FILE *) __THROW;
extern _IO_size_t _IO_sgetn_internal (_IO_FILE *, void *, _IO_size_t);
extern void _IO_flush_all_linebuffered_internal (void) __THROW;
-extern int _IO_switch_to_wget_mode_internal (_IO_FILE *);
+extern int _IO_switch_to_wget_mode_internal (_IO_FILE *) __THROW;
extern void _IO_unsave_markers_internal (_IO_FILE *) __THROW;
extern void _IO_switch_to_main_wget_area_internal (_IO_FILE *) __THROW;
extern int _IO_wdo_write_internal (_IO_FILE *, const wchar_t *, _IO_size_t);
extern int _IO_do_write_internal (_IO_FILE *, const char *, _IO_size_t);
-extern _IO_ssize_t _IO_padn_internal (_IO_FILE *, int, _IO_ssize_t);
+extern _IO_ssize_t _IO_padn_internal (_IO_FILE *, int, _IO_ssize_t) __THROW;
extern _IO_size_t _IO_getline_info_internal (_IO_FILE *,char *, _IO_size_t,
int, int, int *);
extern _IO_size_t _IO_getline_internal (_IO_FILE *, char *, _IO_size_t, int,
@@ -735,7 +759,7 @@ extern void _IO_free_backup_area_internal (_IO_FILE *) __THROW;
extern void _IO_switch_to_wbackup_area_internal (_IO_FILE *) __THROW;
extern void _IO_setb_internal (_IO_FILE *, char *, char *, int) __THROW;
extern wint_t _IO_sputbackwc_internal (_IO_FILE *, wint_t) __THROW;
-extern int _IO_switch_to_get_mode_internal (_IO_FILE *);
+extern int _IO_switch_to_get_mode_internal (_IO_FILE *) __THROW;
extern int _IO_vfscanf_internal (_IO_FILE * __restrict,
const char * __restrict,
_IO_va_list, int *__restrict);
@@ -745,9 +769,9 @@ extern void _IO_doallocbuf_internal (_IO_FILE *) __THROW;
extern void _IO_wsetb_internal (_IO_FILE *, wchar_t *, wchar_t *, int)
__THROW;
extern _IO_off64_t _IO_seekoff_unlocked (_IO_FILE *, _IO_off64_t, int, int)
- attribute_hidden;
+ attribute_hidden __THROW;
extern _IO_off64_t _IO_seekpos_unlocked (_IO_FILE *, _IO_off64_t, int)
- attribute_hidden;
+ attribute_hidden __THROW;
extern int _IO_putc_internal (int __c, _IO_FILE *__fp);
extern void _IO_init_internal (_IO_FILE *, int) __THROW;
extern void _IO_un_link_internal (struct _IO_FILE_plus *) __THROW;
@@ -839,6 +863,12 @@ extern void _IO_un_link_internal (struct _IO_FILE_plus *) __THROW;
#ifndef OS_FSTAT
# define OS_FSTAT fstat
#endif
+struct stat;
+extern _IO_ssize_t _IO_read (int, void *, _IO_size_t);
+extern _IO_ssize_t _IO_write (int, const void *, _IO_size_t);
+extern _IO_off64_t _IO_lseek (int, _IO_off64_t, int) __THROW;
+extern int _IO_close (int);
+extern int _IO_fstat (int, struct stat *) __THROW;
extern int _IO_vscanf (const char *, _IO_va_list) __THROW;
/* _IO_pos_BAD is an _IO_off64_t value indicating error, unknown, or EOF. */
diff --git a/libio/memstream.c b/libio/memstream.c
index 877383f..4cc9ab2 100644
--- a/libio/memstream.c
+++ b/libio/memstream.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995-97,99,2000,2002-2004,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1995-97,99,2000,2002,2003,2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -83,7 +83,7 @@ open_memstream (bufloc, sizeloc)
new_f->fp._sf._sbf._f._lock = &new_f->lock;
#endif
- buf = calloc (1, _IO_BUFSIZ);
+ buf = malloc (_IO_BUFSIZ);
if (buf == NULL)
return NULL;
INTUSE(_IO_init) (&new_f->fp._sf._sbf._f, 0);
@@ -106,6 +106,11 @@ _IO_mem_sync (fp)
_IO_FILE* fp;
{
struct _IO_FILE_memstream *mp = (struct _IO_FILE_memstream *) fp;
+ int res;
+
+ res = _IO_default_sync (fp);
+ if (res < 0)
+ return res;
if (fp->_IO_write_ptr == fp->_IO_write_end)
{
@@ -135,9 +140,9 @@ _IO_mem_finish (fp, dummy)
{
(*mp->bufloc)[fp->_IO_write_ptr - fp->_IO_write_base] = '\0';
*mp->sizeloc = fp->_IO_write_ptr - fp->_IO_write_base;
-
- fp->_IO_buf_base = NULL;
}
- _IO_str_finish (fp, 0);
+ fp->_IO_buf_base = NULL;
+
+ INTUSE(_IO_default_finish) (fp, 0);
}
diff --git a/libio/obprintf.c b/libio/obprintf.c
index 0a50c8e..19300e8 100644
--- a/libio/obprintf.c
+++ b/libio/obprintf.c
@@ -1,6 +1,5 @@
/* Print output of stream to given obstack.
- Copyright (C) 1996,1997,1999,2000,2001,2002,2003,2004,2005,2006
- Free Software Foundation, Inc.
+ Copyright (C) 1996,1997,1999-2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@@ -24,7 +23,6 @@
#include <stdlib.h>
#endif
#include "libioP.h"
-#include "strfile.h"
#include <assert.h>
#include <string.h>
#include <errno.h>
@@ -176,7 +174,9 @@ _IO_obstack_vprintf (struct obstack *obstack, const char *format, va_list args)
return result;
}
-ldbl_weak_alias (_IO_obstack_vprintf, obstack_vprintf)
+#ifdef weak_alias
+weak_alias (_IO_obstack_vprintf, obstack_vprintf)
+#endif
int
@@ -189,4 +189,6 @@ _IO_obstack_printf (struct obstack *obstack, const char *format, ...)
va_end (ap);
return result;
}
-ldbl_weak_alias (_IO_obstack_printf, obstack_printf)
+#ifdef weak_alias
+weak_alias (_IO_obstack_printf, obstack_printf)
+#endif
diff --git a/libio/oldfileops.c b/libio/oldfileops.c
index 3bd0aa1..b9efca7 100644
--- a/libio/oldfileops.c
+++ b/libio/oldfileops.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1993, 1995, 1997-2004, 2005, 2007
- Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1995, 1997-2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Per Bothner <bothner@cygnus.com>.
@@ -272,7 +271,7 @@ _IO_old_file_setbuf (fp, p, len)
return fp;
}
-static int old_do_write (_IO_FILE *, const char *, _IO_size_t);
+static int old_do_write (_IO_FILE *, const char *, _IO_size_t) __THROW;
/* Write TO_DO bytes from DATA to FP.
Then mark FP as having empty buffers. */
@@ -696,7 +695,7 @@ _IO_old_file_xsputn (f, data, n)
register const char *s = (char *) data;
_IO_size_t to_do = n;
int must_flush = 0;
- _IO_size_t count = 0;
+ _IO_size_t count;
if (n <= 0)
return 0;
@@ -705,6 +704,7 @@ _IO_old_file_xsputn (f, data, n)
(or the filebuf is unbuffered), use sys_write directly. */
/* First figure out how much space is available in the buffer. */
+ count = f->_IO_write_end - f->_IO_write_ptr; /* Space available. */
if ((f->_flags & _IO_LINE_BUF) && (f->_flags & _IO_CURRENTLY_PUTTING))
{
count = f->_IO_buf_end - f->_IO_write_ptr;
@@ -722,9 +722,6 @@ _IO_old_file_xsputn (f, data, n)
}
}
}
- else if (f->_IO_write_end > f->_IO_write_ptr)
- count = f->_IO_write_end - f->_IO_write_ptr; /* Space available. */
-
/* Then fill the buffer. */
if (count > 0)
{
@@ -755,7 +752,7 @@ _IO_old_file_xsputn (f, data, n)
_IO_size_t block_size, do_write;
/* Next flush the (full) buffer. */
if (__overflow (f, EOF) == EOF)
- return to_do == 0 ? EOF : n - to_do;
+ return n - to_do;
/* Try to maintain alignment: write a whole number of blocks.
dont_write is what gets left over. */
diff --git a/libio/oldiofclose.c b/libio/oldiofclose.c
index 62c3154..8dd321b 100644
--- a/libio/oldiofclose.c
+++ b/libio/oldiofclose.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993,1995,1997-2002,2004,2005 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1995, 1997-2002, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -58,8 +58,8 @@ _IO_old_fclose (fp)
status = _IO_old_file_close_it (fp);
else
status = fp->_flags & _IO_ERR_SEEN ? -1 : 0;
- _IO_release_lock (fp);
_IO_FINISH (fp);
+ _IO_release_lock (fp);
if (_IO_have_backup (fp))
INTUSE(_IO_free_backup_area) (fp);
if (fp != _IO_stdin && fp != _IO_stdout && fp != _IO_stderr)
diff --git a/libio/stdio.h b/libio/stdio.h
index c8fe52c..e1081c9 100644
--- a/libio/stdio.h
+++ b/libio/stdio.h
@@ -1,5 +1,5 @@
/* Define ISO C stdio on top of C++ iostreams.
- Copyright (C) 1991,1994-2004,2005,2006 Free Software Foundation, Inc.
+ Copyright (C) 1991,1994-2002,2003,2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -142,12 +142,10 @@ typedef _G_fpos64_t fpos64_t;
extern struct _IO_FILE *stdin; /* Standard input stream. */
extern struct _IO_FILE *stdout; /* Standard output stream. */
extern struct _IO_FILE *stderr; /* Standard error output stream. */
-#ifdef __STDC__
/* C89/C99 say they're macros. Make them happy. */
#define stdin stdin
#define stdout stdout
#define stderr stderr
-#endif
__BEGIN_NAMESPACE_STD
/* Remove file FILENAME. */
@@ -156,11 +154,6 @@ extern int remove (__const char *__filename) __THROW;
extern int rename (__const char *__old, __const char *__new) __THROW;
__END_NAMESPACE_STD
-#ifdef __USE_ATFILE
-/* Rename file OLD relative to OLDFD to NEW relative to NEWFD. */
-extern int renameat (int __oldfd, __const char *__old, int __newfd,
- __const char *__new) __THROW;
-#endif
__BEGIN_NAMESPACE_STD
/* Create a temporary file and open it read/write.
@@ -293,7 +286,8 @@ extern FILE *fmemopen (void *__s, size_t __len, __const char *__modes) __THROW;
/* Open a stream that writes into a malloc'd buffer that is expanded as
necessary. *BUFLOC and *SIZELOC are updated with the buffer's location
and the number of characters written on fflush or fclose. */
-extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __THROW;
+extern FILE *open_memstream (char **__restrict __bufloc,
+ size_t *__restrict __sizeloc) __THROW;
#endif
@@ -397,12 +391,12 @@ __BEGIN_NAMESPACE_STD
This function is a possible cancellation point and therefore not
marked with __THROW. */
extern int fscanf (FILE *__restrict __stream,
- __const char *__restrict __format, ...) __wur;
+ __const char *__restrict __format, ...);
/* Read formatted input from stdin.
This function is a possible cancellation point and therefore not
marked with __THROW. */
-extern int scanf (__const char *__restrict __format, ...) __wur;
+extern int scanf (__const char *__restrict __format, ...);
/* Read formatted input from S. */
extern int sscanf (__const char *__restrict __s,
__const char *__restrict __format, ...) __THROW;
@@ -416,14 +410,14 @@ __BEGIN_NAMESPACE_C99
marked with __THROW. */
extern int vfscanf (FILE *__restrict __s, __const char *__restrict __format,
_G_va_list __arg)
- __attribute__ ((__format__ (__scanf__, 2, 0))) __wur;
+ __attribute__ ((__format__ (__scanf__, 2, 0)));
/* Read formatted input from stdin into argument list ARG.
This function is a possible cancellation point and therefore not
marked with __THROW. */
extern int vscanf (__const char *__restrict __format, _G_va_list __arg)
- __attribute__ ((__format__ (__scanf__, 1, 0))) __wur;
+ __attribute__ ((__format__ (__scanf__, 1, 0)));
/* Read formatted input from S into argument list ARG. */
extern int vsscanf (__const char *__restrict __s,
@@ -529,15 +523,14 @@ __BEGIN_NAMESPACE_STD
This function is a possible cancellation point and therefore not
marked with __THROW. */
-extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
- __wur;
+extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream);
/* Get a newline-terminated string from stdin, removing the newline.
DO NOT USE THIS FUNCTION!! There is no limit on how much it will read.
This function is a possible cancellation point and therefore not
marked with __THROW. */
-extern char *gets (char *__s) __wur;
+extern char *gets (char *__s);
__END_NAMESPACE_STD
#ifdef __USE_GNU
@@ -548,7 +541,7 @@ __END_NAMESPACE_STD
or due to the implementation it is a cancellation point and
therefore not marked with __THROW. */
extern char *fgets_unlocked (char *__restrict __s, int __n,
- FILE *__restrict __stream) __wur;
+ FILE *__restrict __stream);
#endif
@@ -565,10 +558,10 @@ extern char *fgets_unlocked (char *__restrict __s, int __n,
therefore not marked with __THROW. */
extern _IO_ssize_t __getdelim (char **__restrict __lineptr,
size_t *__restrict __n, int __delimiter,
- FILE *__restrict __stream) __wur;
+ FILE *__restrict __stream);
extern _IO_ssize_t getdelim (char **__restrict __lineptr,
size_t *__restrict __n, int __delimiter,
- FILE *__restrict __stream) __wur;
+ FILE *__restrict __stream);
/* Like `getdelim', but reads up to a newline.
@@ -578,7 +571,7 @@ extern _IO_ssize_t getdelim (char **__restrict __lineptr,
therefore not marked with __THROW. */
extern _IO_ssize_t getline (char **__restrict __lineptr,
size_t *__restrict __n,
- FILE *__restrict __stream) __wur;
+ FILE *__restrict __stream);
#endif
@@ -608,13 +601,13 @@ extern int ungetc (int __c, FILE *__stream);
This function is a possible cancellation points and therefore not
marked with __THROW. */
extern size_t fread (void *__restrict __ptr, size_t __size,
- size_t __n, FILE *__restrict __stream) __wur;
+ size_t __n, FILE *__restrict __stream);
/* Write chunks of generic data to STREAM.
This function is a possible cancellation points and therefore not
marked with __THROW. */
extern size_t fwrite (__const void *__restrict __ptr, size_t __size,
- size_t __n, FILE *__restrict __s) __wur;
+ size_t __n, FILE *__restrict __s);
__END_NAMESPACE_STD
#ifdef __USE_GNU
@@ -636,9 +629,9 @@ extern int fputs_unlocked (__const char *__restrict __s,
or due to the implementation they are cancellation points and
therefore not marked with __THROW. */
extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
- size_t __n, FILE *__restrict __stream) __wur;
+ size_t __n, FILE *__restrict __stream);
extern size_t fwrite_unlocked (__const void *__restrict __ptr, size_t __size,
- size_t __n, FILE *__restrict __stream) __wur;
+ size_t __n, FILE *__restrict __stream);
#endif
@@ -652,7 +645,7 @@ extern int fseek (FILE *__stream, long int __off, int __whence);
This function is a possible cancellation point and therefore not
marked with __THROW. */
-extern long int ftell (FILE *__stream) __wur;
+extern long int ftell (FILE *__stream);
/* Rewind to the beginning of STREAM.
This function is a possible cancellation point and therefore not
@@ -676,7 +669,7 @@ extern int fseeko (FILE *__stream, __off_t __off, int __whence);
This function is a possible cancellation point and therefore not
marked with __THROW. */
-extern __off_t ftello (FILE *__stream) __wur;
+extern __off_t ftello (FILE *__stream);
# else
# ifdef __REDIRECT
extern int __REDIRECT (fseeko,
@@ -717,7 +710,7 @@ __END_NAMESPACE_STD
#ifdef __USE_LARGEFILE64
extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);
-extern __off64_t ftello64 (FILE *__stream) __wur;
+extern __off64_t ftello64 (FILE *__stream);
extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);
extern int fsetpos64 (FILE *__stream, __const fpos64_t *__pos);
#endif
@@ -726,16 +719,16 @@ __BEGIN_NAMESPACE_STD
/* Clear the error and EOF indicators for STREAM. */
extern void clearerr (FILE *__stream) __THROW;
/* Return the EOF indicator for STREAM. */
-extern int feof (FILE *__stream) __THROW __wur;
+extern int feof (FILE *__stream) __THROW;
/* Return the error indicator for STREAM. */
-extern int ferror (FILE *__stream) __THROW __wur;
+extern int ferror (FILE *__stream) __THROW;
__END_NAMESPACE_STD
#ifdef __USE_MISC
/* Faster versions when locking is not required. */
extern void clearerr_unlocked (FILE *__stream) __THROW;
-extern int feof_unlocked (FILE *__stream) __THROW __wur;
-extern int ferror_unlocked (FILE *__stream) __THROW __wur;
+extern int feof_unlocked (FILE *__stream) __THROW;
+extern int ferror_unlocked (FILE *__stream) __THROW;
#endif
@@ -756,12 +749,12 @@ __END_NAMESPACE_STD
#ifdef __USE_POSIX
/* Return the system file descriptor for STREAM. */
-extern int fileno (FILE *__stream) __THROW __wur;
+extern int fileno (FILE *__stream) __THROW;
#endif /* Use POSIX. */
#ifdef __USE_MISC
/* Faster version when locking is not required. */
-extern int fileno_unlocked (FILE *__stream) __THROW __wur;
+extern int fileno_unlocked (FILE *__stream) __THROW;
#endif
@@ -771,7 +764,7 @@ extern int fileno_unlocked (FILE *__stream) __THROW __wur;
This function is a possible cancellation point and therefore not
marked with __THROW. */
-extern FILE *popen (__const char *__command, __const char *__modes) __wur;
+extern FILE *popen (__const char *__command, __const char *__modes);
/* Close a stream opened by popen and return the status of its child.
@@ -815,7 +808,7 @@ extern void flockfile (FILE *__stream) __THROW;
/* Try to acquire ownership of STREAM but do not block if it is not
possible. */
-extern int ftrylockfile (FILE *__stream) __THROW __wur;
+extern int ftrylockfile (FILE *__stream) __THROW;
/* Relinquish the ownership granted for STREAM. */
extern void funlockfile (FILE *__stream) __THROW;
@@ -837,9 +830,6 @@ extern void funlockfile (FILE *__stream) __THROW;
#if __USE_FORTIFY_LEVEL > 0 && !defined __cplusplus
# include <bits/stdio2.h>
#endif
-#ifdef __LDBL_COMPAT
-# include <bits/stdio-ldbl.h>
-#endif
__END_DECLS
diff --git a/libio/strfile.h b/libio/strfile.h
index 53a36a3..b91111a 100644
--- a/libio/strfile.h
+++ b/libio/strfile.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1997, 1998, 1999, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1997, 1998, 1999 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -73,14 +73,3 @@ typedef struct
} _IO_strnfile;
extern const struct _IO_jump_t _IO_strn_jumps attribute_hidden;
-
-
-typedef struct
-{
- _IO_strfile f;
- /* This is used for the characters which do not fit in the buffer
- provided by the user. */
- wchar_t overflow_buf[64];
-} _IO_wstrnfile;
-
-extern const struct _IO_jump_t _IO_wstrn_jumps attribute_hidden;
diff --git a/libio/strops.c b/libio/strops.c
index 05270ce..2de8340 100644
--- a/libio/strops.c
+++ b/libio/strops.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1997-2003, 2004, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1997-2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -25,12 +25,43 @@
This exception applies to code released by its copyright holders
in files containing the exception. */
-#include <assert.h>
#include "strfile.h"
#include "libioP.h"
#include <string.h>
#include <stdio_ext.h>
+#if 0
+/* The following definitions are for exposition only.
+ They map the terminology used in the ANSI/ISO C++ draft standard
+ to the implementation. */
+
+/* allocated: set when a dynamic array object has been allocated, and
+ hence should be freed by the destructor for the strstreambuf object. */
+#define ALLOCATED(FP) ((FP)->_f._IO_buf_base && DYNAMIC(FP))
+
+/* constant: set when the array object has const elements,
+ so the output sequence cannot be written. */
+#define CONSTANT(FP) ((FP)->_f._IO_file_flags & _IO_NO_WRITES)
+
+/* alsize: the suggested minimum size for a dynamic array object. */
+#define ALSIZE(FP) ??? /* not stored */
+
+/* palloc: points to the function to call to allocate a dynamic array object.*/
+#define PALLOC(FP) \
+ ((FP)->_s._allocate_buffer == default_alloc ? 0 : (FP)->_s._allocate_buffer)
+
+/* pfree: points to the function to call to free a dynamic array object. */
+#define PFREE(FP) \
+ ((FP)->_s._free_buffer == default_free ? 0 : (FP)->_s._free_buffer)
+
+#endif
+
+#ifdef TODO
+/* An "unbounded buffer" is when a buffer is supplied, but with no
+ specified length. An example is the buffer argument to sprintf.
+ */
+#endif
+
void
_IO_str_init_static_internal (sf, ptr, size, pstart)
_IO_strfile *sf;
@@ -103,7 +134,7 @@ _IO_str_overflow (fp, c)
fp->_IO_write_ptr = fp->_IO_read_ptr;
fp->_IO_read_ptr = fp->_IO_read_end;
}
- pos = fp->_IO_write_ptr - fp->_IO_write_base;
+ pos = fp->_IO_write_ptr - fp->_IO_write_base;
if (pos >= (_IO_size_t) (_IO_blen (fp) + flush_only))
{
if (fp->_flags & _IO_USER_BUF) /* not allowed to enlarge */
@@ -112,10 +143,7 @@ _IO_str_overflow (fp, c)
{
char *new_buf;
char *old_buf = fp->_IO_buf_base;
- size_t old_blen = _IO_blen (fp);
- _IO_size_t new_size = 2 * old_blen + 100;
- if (new_size < old_blen)
- return EOF;
+ _IO_size_t new_size = 2 * _IO_blen (fp) + 100;
new_buf
= (char *) (*((_IO_strfile *) fp)->_s._allocate_buffer) (new_size);
if (new_buf == NULL)
@@ -125,13 +153,15 @@ _IO_str_overflow (fp, c)
}
if (old_buf)
{
- memcpy (new_buf, old_buf, old_blen);
+ memcpy (new_buf, old_buf, _IO_blen (fp));
(*((_IO_strfile *) fp)->_s._free_buffer) (old_buf);
/* Make sure _IO_setb won't try to delete _IO_buf_base. */
fp->_IO_buf_base = NULL;
}
- memset (new_buf + old_blen, '\0', new_size - old_blen);
-
+#if 0
+ if (lenp == &LEN(fp)) /* use '\0'-filling */
+ memset (new_buf + pos, 0, blen() - pos);
+#endif
INTUSE(_IO_setb) (fp, new_buf, new_buf + new_size, 1);
fp->_IO_read_base = new_buf + (fp->_IO_read_base - old_buf);
fp->_IO_read_ptr = new_buf + (fp->_IO_read_ptr - old_buf);
@@ -181,71 +211,6 @@ _IO_str_count (fp)
- fp->_IO_read_base);
}
-
-static int
-enlarge_userbuf (_IO_FILE *fp, _IO_off64_t offset, int reading)
-{
- if ((_IO_ssize_t) offset <= _IO_blen (fp))
- return 0;
-
- _IO_ssize_t oldend = fp->_IO_write_end - fp->_IO_write_base;
-
- /* Try to enlarge the buffer. */
- if (fp->_flags & _IO_USER_BUF)
- /* User-provided buffer. */
- return 1;
-
- _IO_size_t newsize = offset + 100;
- char *oldbuf = fp->_IO_buf_base;
- char *newbuf
- = (char *) (*((_IO_strfile *) fp)->_s._allocate_buffer) (newsize);
- if (newbuf == NULL)
- return 1;
-
- if (oldbuf != NULL)
- {
- memcpy (newbuf, oldbuf, _IO_blen (fp));
- (*((_IO_strfile *) fp)->_s._free_buffer) (oldbuf);
- /* Make sure _IO_setb won't try to delete
- _IO_buf_base. */
- fp->_IO_buf_base = NULL;
- }
-
- INTUSE(_IO_setb) (fp, newbuf, newbuf + newsize, 1);
-
- if (reading)
- {
- fp->_IO_write_base = newbuf + (fp->_IO_write_base - oldbuf);
- fp->_IO_write_ptr = newbuf + (fp->_IO_write_ptr - oldbuf);
- fp->_IO_write_end = newbuf + (fp->_IO_write_end - oldbuf);
- fp->_IO_read_ptr = newbuf + (fp->_IO_read_ptr - oldbuf);
-
- fp->_IO_read_base = newbuf;
- fp->_IO_read_end = fp->_IO_buf_end;
- }
- else
- {
- fp->_IO_read_base = newbuf + (fp->_IO_read_base - oldbuf);
- fp->_IO_read_ptr = newbuf + (fp->_IO_read_ptr - oldbuf);
- fp->_IO_read_end = newbuf + (fp->_IO_read_end - oldbuf);
- fp->_IO_write_ptr = newbuf + (fp->_IO_write_ptr - oldbuf);
-
- fp->_IO_write_base = newbuf;
- fp->_IO_write_end = fp->_IO_buf_end;
- }
-
- /* Clear the area between the last write position and th
- new position. */
- assert (offset >= oldend);
- if (reading)
- memset (fp->_IO_read_base + oldend, '\0', offset - oldend);
- else
- memset (fp->_IO_write_base + oldend, '\0', offset - oldend);
-
- return 0;
-}
-
-
_IO_off64_t
_IO_str_seekoff (fp, offset, dir, mode)
_IO_FILE *fp;
@@ -286,10 +251,7 @@ _IO_str_seekoff (fp, offset, dir, mode)
default: /* case _IO_seek_set: */
break;
}
- if (offset < 0)
- return EOF;
- if ((_IO_ssize_t) offset > cur_size
- && enlarge_userbuf (fp, offset, 1) != 0)
+ if (offset < 0 || (_IO_ssize_t) offset > cur_size)
return EOF;
fp->_IO_read_ptr = fp->_IO_read_base + offset;
fp->_IO_read_end = fp->_IO_read_base + cur_size;
@@ -310,10 +272,7 @@ _IO_str_seekoff (fp, offset, dir, mode)
default: /* case _IO_seek_set: */
break;
}
- if (offset < 0)
- return EOF;
- if ((_IO_ssize_t) offset > cur_size
- && enlarge_userbuf (fp, offset, 0) != 0)
+ if (offset < 0 || (_IO_ssize_t) offset > cur_size)
return EOF;
fp->_IO_write_ptr = fp->_IO_write_base + offset;
new_pos = offset;
diff --git a/libio/swprintf.c b/libio/swprintf.c
index ea0bdfd..298c1e7 100644
--- a/libio/swprintf.c
+++ b/libio/swprintf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,1995,1997,1998,1999,2000,2003,2004,2006
+/* Copyright (C) 1991,1995,1997,1998,1999,2000,2003
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -17,14 +17,13 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
-#include <libioP.h>
#include <stdarg.h>
#include <wchar.h>
/* Write formatted output into S, according to the format string FORMAT. */
/* VARARGS3 */
int
-__swprintf (wchar_t *s, size_t n, const wchar_t *format, ...)
+swprintf (wchar_t *s, size_t n, const wchar_t *format, ...)
{
va_list arg;
int done;
@@ -35,4 +34,3 @@ __swprintf (wchar_t *s, size_t n, const wchar_t *format, ...)
return done;
}
-ldbl_strong_alias (__swprintf, swprintf)
diff --git a/libio/swscanf.c b/libio/swscanf.c
index f93d207..c837ad1 100644
--- a/libio/swscanf.c
+++ b/libio/swscanf.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1991, 1995, 1996, 1998, 1999, 2003, 2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1991,1995,1996,1998,1999,2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -17,14 +16,13 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
-#include <libioP.h>
#include <stdarg.h>
#include <wchar.h>
/* Read formatted input from S, according to the format string FORMAT. */
/* VARARGS2 */
int
-__swscanf (const wchar_t *s, const wchar_t *format, ...)
+swscanf (const wchar_t *s, const wchar_t *format, ...)
{
va_list arg;
int done;
@@ -35,4 +33,3 @@ __swscanf (const wchar_t *s, const wchar_t *format, ...)
return done;
}
-ldbl_strong_alias (__swscanf, swscanf)
diff --git a/libio/tst-fopenloc2.c b/libio/tst-fopenloc2.c
deleted file mode 100644
index 5ddd634..0000000
--- a/libio/tst-fopenloc2.c
+++ /dev/null
@@ -1,116 +0,0 @@
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <wchar.h>
-
-
-static const struct
-{
- const char *enc;
- const char *data;
- size_t datalen;
- const wchar_t *expected;
- size_t expectedlen;
-} tests[] =
- {
- { "UCS-4LE", "a\0\0\0b\0\0\0", 8, L"ab", 2 },
- { "UCS-4BE", "\0\0\0a\0\0\0b", 8, L"ab", 2 },
- };
-#define ntests (sizeof (tests) / sizeof (tests[0]))
-
-
-static int do_test (void);
-#define TEST_FUNCTION do_test ()
-
-static void prepare (void);
-#define PREPARE(argc, argv) prepare ();
-
-#include "../test-skeleton.c"
-
-
-static int fd;
-static char *tmpname;
-
-
-static void
-prepare (void)
-{
- fd = create_temp_file ("tst-fopenloc2", &tmpname);
- if (fd == -1)
- {
- puts ("cannot open temp file");
- exit (1);
- }
-}
-
-
-static int
-do_test (void)
-{
- for (int i = 0; i < ntests; ++i)
- {
- if (ftruncate (fd, 0) != 0)
- {
- printf ("ftruncate in round %d failed\n", i + 1);
- return 1;
- }
-
- if (TEMP_FAILURE_RETRY (write (fd, tests[i].data, tests[i].datalen))
- != tests[i].datalen)
- {
- printf ("write in round %d failed\n", i + 1);
- return 1;
- }
-
- if (lseek (fd, 0, SEEK_SET) != 0)
- {
- printf ("lseek in round %d failed\n", i + 1);
- return 1;
- }
-
- char *ccs;
- if (asprintf (&ccs, "r,ccs=%s", tests[i].enc) == -1)
- {
- printf ("asprintf in round %d failed\n", i + 1);
- return 1;
- }
-
- FILE *fp = fopen (tmpname, ccs);
- if (fp == NULL)
- {
- printf ("fopen in round %d failed\n", i + 1);
- return 1;
- }
-
-#define LINELEN 100
- wchar_t line[LINELEN];
- if (fgetws (line, LINELEN, fp) != line)
- {
- printf ("fgetws in round %d failed\n", i + 1);
- return 1;
- }
-
- if (wcslen (line) != tests[i].expectedlen)
- {
- printf ("round %d: expected length %zu, got length %zu\n",
- i + 1, tests[i].expectedlen, wcslen (line));
- return 1;
- }
-
- if (wcscmp (tests[i].expected, line) != 0)
- {
- printf ("round %d: expected L\"%ls\", got L\"%ls\"\n",
- i + 1, tests[i].expected, line);
- return 1;
- }
-
- fclose (fp);
-
- free (ccs);
- }
-
- close (fd);
-
- return 0;
-}
diff --git a/libio/tst-memstream1.c b/libio/tst-memstream1.c
deleted file mode 100644
index d18f5cc..0000000
--- a/libio/tst-memstream1.c
+++ /dev/null
@@ -1,89 +0,0 @@
-#include <mcheck.h>
-#include <stdio.h>
-
-
-#ifndef CHAR_T
-# define CHAR_T char
-# define W(o) o
-# define OPEN_MEMSTREAM open_memstream
-#endif
-
-#define S(s) S1 (s)
-#define S1(s) #s
-
-
-static void
-mcheck_abort (enum mcheck_status ev)
-{
- printf ("mecheck failed with status %d\n", (int) ev);
- exit (1);
-}
-
-
-static int
-do_test (void)
-{
- mcheck_pedantic (mcheck_abort);
-
- CHAR_T *buf = (CHAR_T *) 1l;
- size_t len = 12345;
- FILE *fp = OPEN_MEMSTREAM (&buf, &len);
- if (fp == NULL)
- {
- printf ("%s failed\n", S(OPEN_MEMSTREAM));
- return 1;
- }
-
- if (fflush (fp) != 0)
- {
- puts ("fflush failed");
- return 1;
- }
-
- if (len != 0)
- {
- puts ("string after no write not empty");
- return 1;
- }
- if (buf == (CHAR_T *) 1l)
- {
- puts ("buf not updated");
- return 1;
- }
- if (buf[0] != W('\0'))
- {
- puts ("buf[0] != 0");
- return 1;
- }
-
- buf = (CHAR_T *) 1l;
- len = 12345;
- if (fclose (fp) != 0)
- {
- puts ("fclose failed");
- return 1;
- }
-
- if (len != 0)
- {
- puts ("string after close with no write not empty");
- return 1;
- }
- if (buf == (CHAR_T *) 1l)
- {
- puts ("buf not updated");
- return 1;
- }
- if (buf[0] != W('\0'))
- {
- puts ("buf[0] != 0");
- return 1;
- }
-
- free (buf);
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/libio/tst-memstream2.c b/libio/tst-memstream2.c
deleted file mode 100644
index 9619d77..0000000
--- a/libio/tst-memstream2.c
+++ /dev/null
@@ -1,104 +0,0 @@
-#include <mcheck.h>
-#include <stdio.h>
-
-
-#ifndef CHAR_T
-# define CHAR_T char
-# define W(o) o
-# define OPEN_MEMSTREAM open_memstream
-#endif
-
-#define S(s) S1 (s)
-#define S1(s) #s
-
-
-static void
-mcheck_abort (enum mcheck_status ev)
-{
- printf ("mecheck failed with status %d\n", (int) ev);
- exit (1);
-}
-
-
-static int
-do_test (void)
-{
- mcheck_pedantic (mcheck_abort);
-
- CHAR_T *buf = (CHAR_T *) 1l;
- size_t len = 12345;
- FILE *fp = OPEN_MEMSTREAM (&buf, &len);
- if (fp == NULL)
- {
- printf ("%s failed\n", S(OPEN_MEMSTREAM));
- return 1;
- }
-
- for (int outer = 0; outer < 800; ++outer)
- {
- for (int inner = 0; inner < 100; ++inner)
- if (fputc (W('a') + (outer * 100 + inner) % 26, fp) == EOF)
- {
- printf ("fputc at %d:%d failed\n", outer, inner);
- return 1;
- }
-
- if (fflush (fp) != 0)
- {
- puts ("fflush failed");
- return 1;
- }
-
- if (len != (outer + 1) * 100)
- {
- printf ("string in round %d not %d bytest long\n",
- outer + 1, (outer + 1) * 100);
- return 1;
- }
- if (buf == (CHAR_T *) 1l)
- {
- printf ("round %d: buf not updated\n", outer + 1);
- return 1;
- }
- for (int inner = 0; inner < (outer + 1) * 100; ++inner)
- if (buf[inner] != W('a') + inner % 26)
- {
- printf ("round %d: buf[%d] != '%c'\n", outer + 1, inner,
- (char) (W('a') + inner % 26));
- return 1;
- }
- }
-
- buf = (CHAR_T *) 1l;
- len = 12345;
- if (fclose (fp) != 0)
- {
- puts ("fclose failed");
- return 1;
- }
-
- if (len != 800 * 100)
- {
- puts ("string after close not 80000 bytes long");
- return 1;
- }
- if (buf == (CHAR_T *) 1l)
- {
- puts ("buf not updated");
- return 1;
- }
- for (int inner = 0; inner < 800 * 100; ++inner)
- if (buf[inner] != W('a') + inner % 26)
- {
- printf ("after close: buf[%d] != %c\n", inner,
- (char) (W('a') + inner % 26));
- return 1;
- }
-
- free (buf);
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/libio/tst-setvbuf1.c b/libio/tst-setvbuf1.c
deleted file mode 100644
index 9222d40..0000000
--- a/libio/tst-setvbuf1.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Dereived from the test case in BZ #2337. */
-#include <errno.h>
-#include <error.h>
-#include <fcntl.h>
-#include <locale.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <wchar.h>
-
-
-static char buf[512] __attribute__ ((aligned (4096)));
-
-
-static int
-do_test (void)
-{
- setlocale (LC_ALL, "de_DE.UTF-8");
-
- FILE *fp = fdopen (dup (STDOUT_FILENO), "a");
- if (fp == NULL)
- error (EXIT_FAILURE, errno, "fdopen(,\"a\")");
-
- setvbuf (fp, buf, _IOFBF, sizeof (buf));
-
- /* fwprintf to unbuffered stream. */
- fwprintf (fp, L"hello.\n");
-
- fclose (fp);
-
- /* touch my buffer */
- buf[45] = 'a';
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/libio/tst-wmemstream1.c b/libio/tst-wmemstream1.c
deleted file mode 100644
index f8b308b..0000000
--- a/libio/tst-wmemstream1.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <wchar.h>
-
-#define CHAR_T wchar_t
-#define W(o) L##o
-#define OPEN_MEMSTREAM open_wmemstream
-
-#include "tst-memstream1.c"
diff --git a/libio/tst-wmemstream2.c b/libio/tst-wmemstream2.c
deleted file mode 100644
index e2442eb..0000000
--- a/libio/tst-wmemstream2.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <wchar.h>
-
-#define CHAR_T wchar_t
-#define W(o) L##o
-#define OPEN_MEMSTREAM open_wmemstream
-
-#include "tst-memstream2.c"
diff --git a/libio/vasprintf.c b/libio/vasprintf.c
index 2fdb9f6..e32a488 100644
--- a/libio/vasprintf.c
+++ b/libio/vasprintf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995,1997,1999-2002,2004,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1995,1997,1999-2002,2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -46,8 +46,6 @@ _IO_vasprintf (result_ptr, format, args)
int ret;
_IO_size_t needed;
_IO_size_t allocated;
- /* No need to clear the memory here (unlike for open_memstream) since
- we know we will never seek on the stream. */
string = (char *) malloc (init_string_size);
if (string == NULL)
return -1;
@@ -89,4 +87,7 @@ _IO_vasprintf (result_ptr, format, args)
(*result_ptr)[needed - 1] = '\0';
return ret;
}
-ldbl_weak_alias (_IO_vasprintf, vasprintf)
+
+#ifdef weak_alias
+weak_alias (_IO_vasprintf, vasprintf)
+#endif
diff --git a/libio/vscanf.c b/libio/vscanf.c
index 78c30ee..477cbae 100644
--- a/libio/vscanf.c
+++ b/libio/vscanf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1997, 2002, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1997, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -37,4 +37,7 @@ _IO_vscanf (format, args)
{
return INTUSE(_IO_vfscanf) (_IO_stdin, format, args, NULL);
}
-ldbl_weak_alias (_IO_vscanf, vscanf)
+
+#ifdef weak_alias
+weak_alias (_IO_vscanf, vscanf)
+#endif
diff --git a/libio/vsnprintf.c b/libio/vsnprintf.c
index 289160e..4250c2d 100644
--- a/libio/vsnprintf.c
+++ b/libio/vsnprintf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1994,1997,1999-2003, 2004, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1994,1997,1999-2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -123,5 +123,8 @@ _IO_vsnprintf (string, maxlen, format, args)
*sf.f._sbf._f._IO_write_ptr = '\0';
return ret;
}
-ldbl_weak_alias (_IO_vsnprintf, __vsnprintf)
-ldbl_weak_alias (_IO_vsnprintf, vsnprintf)
+
+#ifdef weak_alias
+weak_alias (_IO_vsnprintf, __vsnprintf)
+weak_alias (_IO_vsnprintf, vsnprintf)
+#endif
diff --git a/libio/vswprintf.c b/libio/vswprintf.c
index 5bbd202..42168aa 100644
--- a/libio/vswprintf.c
+++ b/libio/vswprintf.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1994, 1997, 1999-2002, 2004, 2005, 2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1994,1997,1999-2002,2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -30,6 +29,15 @@
#include "strfile.h"
+typedef struct
+{
+ _IO_strfile f;
+ /* This is used for the characters which do not fit in the buffer
+ provided by the user. */
+ wchar_t overflow_buf[64];
+} _IO_wstrnfile;
+
+
static wint_t _IO_wstrn_overflow (_IO_FILE *fp, wint_t c) __THROW;
static wint_t
@@ -67,7 +75,7 @@ _IO_wstrn_overflow (fp, c)
}
-const struct _IO_jump_t _IO_wstrn_jumps attribute_hidden =
+static const struct _IO_jump_t _IO_wstrn_jumps =
{
JUMP_INIT_DUMMY,
JUMP_INIT(finish, _IO_wstr_finish),
@@ -127,5 +135,8 @@ _IO_vswprintf (string, maxlen, format, args)
return ret;
}
+
+#ifdef weak_alias
weak_alias (_IO_vswprintf, __vswprintf)
-ldbl_weak_alias (_IO_vswprintf, vswprintf)
+weak_alias (_IO_vswprintf, vswprintf)
+#endif
diff --git a/libio/vwprintf.c b/libio/vwprintf.c
index bd9a950..814fdf3 100644
--- a/libio/vwprintf.c
+++ b/libio/vwprintf.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1991, 1993, 1995, 1997, 1999, 2001, 2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1991,1993,1995,1997,1999,2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -17,7 +16,6 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
-#include <libioP.h>
#include <stdarg.h>
#include <stdio.h>
#include <wchar.h>
@@ -25,8 +23,9 @@
/* Write formatted output to stdout according to the
format string FORMAT, using the argument list in ARG. */
int
-__vwprintf (const wchar_t *format, __gnuc_va_list arg)
+vwprintf (format, arg)
+ const wchar_t *format;
+ __gnuc_va_list arg;
{
return __vfwprintf (stdout, format, arg);
}
-ldbl_strong_alias (__vwprintf, vwprintf)
diff --git a/libio/vwscanf.c b/libio/vwscanf.c
index f6d04e8..cd7af9c 100644
--- a/libio/vwscanf.c
+++ b/libio/vwscanf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1997, 1999, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1997, 1999 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -29,8 +29,9 @@
#include <wchar.h>
int
-__vwscanf (const wchar_t *format, _IO_va_list args)
+vwscanf (format, args)
+ const wchar_t *format;
+ _IO_va_list args;
{
return _IO_vfwscanf (_IO_stdin, format, args, NULL);
}
-ldbl_strong_alias (__vwscanf, vwscanf)
diff --git a/libio/wfiledoalloc.c b/libio/wfiledoalloc.c
index 67a0517..2f8140b 100644
--- a/libio/wfiledoalloc.c
+++ b/libio/wfiledoalloc.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1993, 1997, 1999, 2000, 2002, 2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1997, 1999, 2000, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -86,20 +85,35 @@ _IO_wfile_doallocate (fp)
_IO_FILE *fp;
{
_IO_size_t size;
+ int couldbetty;
wchar_t *p;
+ struct _G_stat64 st;
/* Allocate room for the external buffer. */
if (fp->_IO_buf_base == NULL)
INTUSE(_IO_file_doallocate) (fp);
- /* If narrow buffer is user allocated (set by setvbuf etc.),
- use that size as the size of the wide buffer, when it is
- allocated by _IO_file_doallocate, multiply that by size
- of the wide character. */
- size = fp->_IO_buf_end - fp->_IO_buf_base;
- if ((fp->_flags & _IO_USER_BUF))
- size = (size + sizeof (wchar_t) - 1) / sizeof (wchar_t);
+ if (fp->_fileno < 0 || _IO_SYSSTAT (fp, &st) < 0)
+ {
+ couldbetty = 0;
+ size = _IO_BUFSIZ;
+#if 0
+ /* do not try to optimise fseek() */
+ fp->_flags |= __SNPT;
+#endif
+ }
+ else
+ {
+ couldbetty = S_ISCHR (st.st_mode);
+#if _IO_HAVE_ST_BLKSIZE
+ size = st.st_blksize <= 0 ? _IO_BUFSIZ : st.st_blksize;
+#else
+ size = _IO_BUFSIZ;
+#endif
+ }
ALLOC_WBUF (p, size * sizeof (wchar_t), EOF);
INTUSE(_IO_wsetb) (fp, p, p + size, 1);
+ if (couldbetty && isatty (fp->_fileno))
+ fp->_flags |= _IO_LINE_BUF;
return 1;
}
diff --git a/libio/wfileops.c b/libio/wfileops.c
index b930aad..5f9faac 100644
--- a/libio/wfileops.c
+++ b/libio/wfileops.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993,1995,1997-2003,2004, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1993,1995,1997-2003,2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Ulrich Drepper <drepper@cygnus.com>.
Based on the single byte version by Per Bothner <bothner@cygnus.com>.
@@ -69,7 +69,7 @@ _IO_wdo_write (fp, data, to_do)
{
if (_IO_new_do_write (fp, fp->_IO_write_base,
fp->_IO_write_ptr - fp->_IO_write_base) == EOF)
- return WEOF;
+ return EOF;
}
do
diff --git a/libio/wgenops.c b/libio/wgenops.c
index 760a413..a9cc7bf 100644
--- a/libio/wgenops.c
+++ b/libio/wgenops.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993,1995,1997-2002,2004,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1993,1995,1997-2001,2002,2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Ulrich Drepper <drepper@cygnus.com>.
Based on the single byte version by Per Bothner <bothner@cygnus.com>.
@@ -115,14 +115,14 @@ _IO_wsetb (f, b, eb, a)
wchar_t *eb;
int a;
{
- if (f->_wide_data->_IO_buf_base && !(f->_flags2 & _IO_FLAGS2_USER_WBUF))
- FREE_BUF (f->_wide_data->_IO_buf_base, _IO_wblen (f) * sizeof (wchar_t));
+ if (f->_wide_data->_IO_buf_base && !(f->_flags & _IO_USER_BUF))
+ FREE_BUF (f->_wide_data->_IO_buf_base, _IO_wblen (f));
f->_wide_data->_IO_buf_base = b;
f->_wide_data->_IO_buf_end = eb;
if (a)
- f->_flags2 &= ~_IO_FLAGS2_USER_WBUF;
+ f->_flags &= ~_IO_USER_BUF;
else
- f->_flags2 |= _IO_FLAGS2_USER_WBUF;
+ f->_flags |= _IO_USER_BUF;
}
INTDEF(_IO_wsetb)
@@ -198,7 +198,7 @@ _IO_wdefault_finish (fp, dummy)
int dummy;
{
struct _IO_marker *mark;
- if (fp->_wide_data->_IO_buf_base && !(fp->_flags2 & _IO_FLAGS2_USER_WBUF))
+ if (fp->_wide_data->_IO_buf_base && !(fp->_flags & _IO_USER_BUF))
{
FREE_BUF (fp->_wide_data->_IO_buf_base,
_IO_wblen (fp) * sizeof (wchar_t));
diff --git a/libio/wmemstream.c b/libio/wmemstream.c
deleted file mode 100644
index 7bf6a42..0000000
--- a/libio/wmemstream.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/* Copyright (C) 1995-97,99,2000,2002-2004,2006 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-#include "libioP.h"
-#include "strfile.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <wchar.h>
-
-
-struct _IO_FILE_wmemstream
-{
- _IO_strfile _sf;
- wchar_t **bufloc;
- _IO_size_t *sizeloc;
-};
-
-
-static int _IO_wmem_sync (_IO_FILE* fp) __THROW;
-static void _IO_wmem_finish (_IO_FILE* fp, int) __THROW;
-
-
-static const struct _IO_jump_t _IO_wmem_jumps =
-{
- JUMP_INIT_DUMMY,
- JUMP_INIT (finish, _IO_wmem_finish),
- JUMP_INIT (overflow, (_IO_overflow_t) _IO_wstr_overflow),
- JUMP_INIT (underflow, (_IO_underflow_t) _IO_wstr_underflow),
- JUMP_INIT (uflow, (_IO_underflow_t) INTUSE(_IO_wdefault_uflow)),
- JUMP_INIT (pbackfail, (_IO_pbackfail_t) _IO_wstr_pbackfail),
- JUMP_INIT (xsputn, INTUSE(_IO_wdefault_xsputn)),
- JUMP_INIT (xsgetn, INTUSE(_IO_wdefault_xsgetn)),
- JUMP_INIT (seekoff, _IO_wstr_seekoff),
- JUMP_INIT (seekpos, _IO_default_seekpos),
- JUMP_INIT (setbuf, _IO_default_setbuf),
- JUMP_INIT (sync, _IO_wmem_sync),
- JUMP_INIT (doallocate, INTUSE(_IO_wdefault_doallocate)),
- JUMP_INIT (read, _IO_default_read),
- JUMP_INIT (write, _IO_default_write),
- JUMP_INIT (seek, _IO_default_seek),
- JUMP_INIT (close, _IO_default_close),
- JUMP_INIT (stat, _IO_default_stat),
- JUMP_INIT (showmanyc, _IO_default_showmanyc),
- JUMP_INIT (imbue, _IO_default_imbue)
-};
-
-/* Open a stream that writes into a malloc'd buffer that is expanded as
- necessary. *BUFLOC and *SIZELOC are updated with the buffer's location
- and the number of characters written on fflush or fclose. */
-_IO_FILE *
-open_wmemstream (bufloc, sizeloc)
- wchar_t **bufloc;
- _IO_size_t *sizeloc;
-{
- struct locked_FILE
- {
- struct _IO_FILE_wmemstream fp;
-#ifdef _IO_MTSAFE_IO
- _IO_lock_t lock;
-#endif
- struct _IO_wide_data wd;
- } *new_f;
- wchar_t *buf;
-
- new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE));
- if (new_f == NULL)
- return NULL;
-#ifdef _IO_MTSAFE_IO
- new_f->fp._sf._sbf._f._lock = &new_f->lock;
-#endif
-
- buf = calloc (1, _IO_BUFSIZ);
- if (buf == NULL)
- return NULL;
-
- _IO_no_init (&new_f->fp._sf._sbf._f, 0, 0, &new_f->wd, &_IO_wmem_jumps);
- _IO_fwide (&new_f->fp._sf._sbf._f, 1);
- _IO_wstr_init_static (&new_f->fp._sf._sbf._f, buf,
- _IO_BUFSIZ / sizeof (wchar_t), buf);
- new_f->fp._sf._sbf._f._flags2 &= ~_IO_FLAGS2_USER_WBUF;
- new_f->fp._sf._s._allocate_buffer = (_IO_alloc_type) malloc;
- new_f->fp._sf._s._free_buffer = (_IO_free_type) free;
-
- new_f->fp.bufloc = bufloc;
- new_f->fp.sizeloc = sizeloc;
-
- return (_IO_FILE *) &new_f->fp._sf._sbf;
-}
-
-
-static int
-_IO_wmem_sync (fp)
- _IO_FILE* fp;
-{
- struct _IO_FILE_wmemstream *mp = (struct _IO_FILE_wmemstream *) fp;
-
- if (fp->_wide_data->_IO_write_ptr == fp->_wide_data->_IO_write_end)
- {
- _IO_wstr_overflow (fp, '\0');
- --fp->_wide_data->_IO_write_ptr;
- }
- else
- *fp->_wide_data->_IO_write_ptr = '\0';
-
- *mp->bufloc = fp->_wide_data->_IO_write_base;
- *mp->sizeloc = (fp->_wide_data->_IO_write_ptr
- - fp->_wide_data->_IO_write_base);
-
- return 0;
-}
-
-
-static void
-_IO_wmem_finish (fp, dummy)
- _IO_FILE* fp;
- int dummy;
-{
- struct _IO_FILE_wmemstream *mp = (struct _IO_FILE_wmemstream *) fp;
-
- *mp->bufloc = (wchar_t *) realloc (fp->_wide_data->_IO_write_base,
- (fp->_wide_data->_IO_write_ptr
- - fp->_wide_data->_IO_write_base + 1)
- * sizeof (wchar_t));
- if (*mp->bufloc != NULL)
- {
- size_t len = (fp->_wide_data->_IO_write_ptr
- - fp->_wide_data->_IO_write_base);
- (*mp->bufloc)[len] = '\0';
- *mp->sizeloc = len;
-
- fp->_wide_data->_IO_buf_base = NULL;
- }
-
- _IO_wstr_finish (fp, 0);
-}
diff --git a/libio/wprintf.c b/libio/wprintf.c
index d06451c..f418cf5 100644
--- a/libio/wprintf.c
+++ b/libio/wprintf.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1991, 1995, 1996, 1997, 1999, 2001, 2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1991,1995,1996,1997,1999,2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -17,7 +16,6 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
-#include <libioP.h>
#include <stdarg.h>
#include <stdio.h>
#include <wchar.h>
@@ -25,7 +23,7 @@
/* Write formatted output to stdout from the format string FORMAT. */
/* VARARGS1 */
int
-__wprintf (const wchar_t *format, ...)
+wprintf (const wchar_t *format, ...)
{
va_list arg;
int done;
@@ -36,4 +34,3 @@ __wprintf (const wchar_t *format, ...)
return done;
}
-ldbl_strong_alias (__wprintf, wprintf)
diff --git a/libio/wscanf.c b/libio/wscanf.c
index 3eba620..f4b8cd1 100644
--- a/libio/wscanf.c
+++ b/libio/wscanf.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1991, 1995, 1996, 1997, 1999, 2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1995, 1996, 1997, 1999 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -17,7 +16,6 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
-#include <libioP.h>
#include <stdarg.h>
#include <stdio.h>
#include <wchar.h>
@@ -26,7 +24,7 @@
/* Read formatted input from stdin according to the format string FORMAT. */
/* VARARGS1 */
int
-__wscanf (const wchar_t *format, ...)
+wscanf (const wchar_t *format, ...)
{
va_list arg;
int done;
@@ -37,4 +35,3 @@ __wscanf (const wchar_t *format, ...)
return done;
}
-ldbl_strong_alias (__wscanf, wscanf)
diff --git a/libio/wstrops.c b/libio/wstrops.c
index c5aae7b..32f7ef3 100644
--- a/libio/wstrops.c
+++ b/libio/wstrops.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993,1997-1999,2001-2004, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1993,1997-1999,2001-2003,2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -25,13 +25,44 @@
This exception applies to code released by its copyright holders
in files containing the exception. */
-#include <assert.h>
#include "strfile.h"
#include "libioP.h"
#include <string.h>
#include <wchar.h>
#include <stdio_ext.h>
+#if 0
+/* The following definitions are for exposition only.
+ They map the terminology used in the ANSI/ISO C++ draft standard
+ to the implementation. */
+
+/* allocated: set when a dynamic array object has been allocated, and
+ hence should be freed by the destructor for the strstreambuf object. */
+#define ALLOCATED(FP) ((FP)->_f._IO_buf_base && DYNAMIC(FP))
+
+/* constant: set when the array object has const elements,
+ so the output sequence cannot be written. */
+#define CONSTANT(FP) ((FP)->_f._IO_file_flags & _IO_NO_WRITES)
+
+/* alsize: the suggested minimum size for a dynamic array object. */
+#define ALSIZE(FP) ??? /* not stored */
+
+/* palloc: points to the function to call to allocate a dynamic array object.*/
+#define PALLOC(FP) \
+ ((FP)->_s._allocate_buffer == default_alloc ? 0 : (FP)->_s._allocate_buffer)
+
+/* pfree: points to the function to call to free a dynamic array object. */
+#define PFREE(FP) \
+ ((FP)->_s._free_buffer == default_free ? 0 : (FP)->_s._free_buffer)
+
+#endif
+
+#ifdef TODO
+/* An "unbounded buffer" is when a buffer is supplied, but with no
+ specified length. An example is the buffer argument to sprintf.
+ */
+#endif
+
void
_IO_wstr_init_static (fp, ptr, size, pstart)
_IO_FILE *fp;
@@ -67,7 +98,7 @@ _IO_wstr_init_static (fp, ptr, size, pstart)
fp->_wide_data->_IO_read_end = end;
}
/* A null _allocate_buffer function flags the strfile as being static. */
- (((_IO_strfile *) fp)->_s._allocate_buffer) = (_IO_alloc_type)0;
+ (((_IO_strfile *) fp)->_s._allocate_buffer) = (_IO_alloc_type)0;
}
_IO_wint_t
@@ -85,19 +116,16 @@ _IO_wstr_overflow (fp, c)
fp->_wide_data->_IO_write_ptr = fp->_wide_data->_IO_read_ptr;
fp->_wide_data->_IO_read_ptr = fp->_wide_data->_IO_read_end;
}
- pos = fp->_wide_data->_IO_write_ptr - fp->_wide_data->_IO_write_base;
+ pos = fp->_wide_data->_IO_write_ptr - fp->_wide_data->_IO_write_base;
if (pos >= (_IO_size_t) (_IO_wblen (fp) + flush_only))
{
- if (fp->_flags2 & _IO_FLAGS2_USER_WBUF) /* not allowed to enlarge */
+ if (fp->_flags & _IO_USER_BUF) /* not allowed to enlarge */
return WEOF;
else
{
wchar_t *new_buf;
wchar_t *old_buf = fp->_wide_data->_IO_buf_base;
- size_t old_wblen = _IO_wblen (fp);
- _IO_size_t new_size = 2 * old_wblen + 100;
- if (new_size < old_wblen)
- return EOF;
+ _IO_size_t new_size = 2 * _IO_wblen (fp) + 100;
new_buf
= (wchar_t *) (*((_IO_strfile *) fp)->_s._allocate_buffer) (new_size
* sizeof (wchar_t));
@@ -108,14 +136,11 @@ _IO_wstr_overflow (fp, c)
}
if (old_buf)
{
- __wmemcpy (new_buf, old_buf, old_wblen);
+ __wmemcpy (new_buf, old_buf, _IO_wblen (fp));
(*((_IO_strfile *) fp)->_s._free_buffer) (old_buf);
/* Make sure _IO_setb won't try to delete _IO_buf_base. */
fp->_wide_data->_IO_buf_base = NULL;
}
-
- wmemset (new_buf + old_wblen, L'\0', new_size - old_wblen);
-
INTUSE(_IO_wsetb) (fp, new_buf, new_buf + new_size, 1);
fp->_wide_data->_IO_read_base =
new_buf + (fp->_wide_data->_IO_read_base - old_buf);
@@ -138,7 +163,6 @@ _IO_wstr_overflow (fp, c)
return c;
}
-
_IO_wint_t
_IO_wstr_underflow (fp)
_IO_FILE *fp;
@@ -157,87 +181,17 @@ _IO_wstr_underflow (fp)
return WEOF;
}
-
/* The size of the valid part of the buffer. */
+
_IO_ssize_t
_IO_wstr_count (fp)
_IO_FILE *fp;
{
- struct _IO_wide_data *wd = fp->_wide_data;
-
- return ((wd->_IO_write_ptr > wd->_IO_read_end
- ? wd->_IO_write_ptr : wd->_IO_read_end)
- - wd->_IO_read_base);
+ return ((fp->_wide_data->_IO_write_ptr > fp->_wide_data->_IO_read_end
+ ? fp->_wide_data->_IO_write_ptr : fp->_wide_data->_IO_read_end)
+ - fp->_wide_data->_IO_read_base);
}
-
-static int
-enlarge_userbuf (_IO_FILE *fp, _IO_off64_t offset, int reading)
-{
- if ((_IO_ssize_t) offset <= _IO_blen (fp))
- return 0;
-
- struct _IO_wide_data *wd = fp->_wide_data;
-
- _IO_ssize_t oldend = wd->_IO_write_end - wd->_IO_write_base;
-
- /* Try to enlarge the buffer. */
- if (fp->_flags2 & _IO_FLAGS2_USER_WBUF)
- /* User-provided buffer. */
- return 1;
-
- _IO_size_t newsize = offset + 100;
- wchar_t *oldbuf = wd->_IO_buf_base;
- wchar_t *newbuf
- = (wchar_t *) (*((_IO_strfile *) fp)->_s._allocate_buffer) (newsize
- * sizeof (wchar_t));
- if (newbuf == NULL)
- return 1;
-
- if (oldbuf != NULL)
- {
- __wmemcpy (newbuf, oldbuf, _IO_wblen (fp));
- (*((_IO_strfile *) fp)->_s._free_buffer) (oldbuf);
- /* Make sure _IO_setb won't try to delete
- _IO_buf_base. */
- wd->_IO_buf_base = NULL;
- }
-
- INTUSE(_IO_wsetb) (fp, newbuf, newbuf + newsize, 1);
-
- if (reading)
- {
- wd->_IO_write_base = newbuf + (wd->_IO_write_base - oldbuf);
- wd->_IO_write_ptr = newbuf + (wd->_IO_write_ptr - oldbuf);
- wd->_IO_write_end = newbuf + (wd->_IO_write_end - oldbuf);
- wd->_IO_read_ptr = newbuf + (wd->_IO_read_ptr - oldbuf);
-
- wd->_IO_read_base = newbuf;
- wd->_IO_read_end = wd->_IO_buf_end;
- }
- else
- {
- wd->_IO_read_base = newbuf + (wd->_IO_read_base - oldbuf);
- wd->_IO_read_ptr = newbuf + (wd->_IO_read_ptr - oldbuf);
- wd->_IO_read_end = newbuf + (wd->_IO_read_end - oldbuf);
- wd->_IO_write_ptr = newbuf + (wd->_IO_write_ptr - oldbuf);
-
- wd->_IO_write_base = newbuf;
- wd->_IO_write_end = wd->_IO_buf_end;
- }
-
- /* Clear the area between the last write position and th
- new position. */
- assert (offset >= oldend);
- if (reading)
- wmemset (wd->_IO_read_base + oldend, L'\0', offset - oldend);
- else
- wmemset (wd->_IO_write_base + oldend, L'\0', offset - oldend);
-
- return 0;
-}
-
-
_IO_off64_t
_IO_wstr_seekoff (fp, offset, dir, mode)
_IO_FILE *fp;
@@ -280,10 +234,7 @@ _IO_wstr_seekoff (fp, offset, dir, mode)
default: /* case _IO_seek_set: */
break;
}
- if (offset < 0)
- return EOF;
- if ((_IO_ssize_t) offset > cur_size
- && enlarge_userbuf (fp, offset, 1) != 0)
+ if (offset < 0 || (_IO_ssize_t) offset > cur_size)
return EOF;
fp->_wide_data->_IO_read_ptr = (fp->_wide_data->_IO_read_base
+ offset);
@@ -307,10 +258,7 @@ _IO_wstr_seekoff (fp, offset, dir, mode)
default: /* case _IO_seek_set: */
break;
}
- if (offset < 0)
- return EOF;
- if ((_IO_ssize_t) offset > cur_size
- && enlarge_userbuf (fp, offset, 0) != 0)
+ if (offset < 0 || (_IO_ssize_t) offset > cur_size)
return EOF;
fp->_wide_data->_IO_write_ptr = (fp->_wide_data->_IO_write_base
+ offset);
@@ -335,7 +283,7 @@ _IO_wstr_finish (fp, dummy)
_IO_FILE *fp;
int dummy;
{
- if (fp->_wide_data->_IO_buf_base && !(fp->_flags2 & _IO_FLAGS2_USER_WBUF))
+ if (fp->_wide_data->_IO_buf_base && !(fp->_flags & _IO_USER_BUF))
(((_IO_strfile *) fp)->_s._free_buffer) (fp->_wide_data->_IO_buf_base);
fp->_wide_data->_IO_buf_base = NULL;