aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--libio/iofwide.c14
-rw-r--r--libio/libio.h4
3 files changed, 15 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 784e1cd..a7ed602 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2003-08-25 Ulrich Drepper <drepper@redhat.com>
+
+ * libio/libio.h (_IO_fwide): In the mode==0 optimization, don't
+ use _mode if _IO_fwide_maybe_incompatible.
+ * libio/iofwide.c (_IO_fwide): Move the test for mode == 0 after
+ the compatibility test.
+
2003-08-25 Jakub Jelinek <jakub@redhat.com>
* elf/cache.c (save_cache): Don't write beyond end of file_entries
diff --git a/libio/iofwide.c b/libio/iofwide.c
index 225237e..0312421 100644
--- a/libio/iofwide.c
+++ b/libio/iofwide.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999, 2000, 2001, 2002 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
@@ -100,20 +100,18 @@ _IO_fwide (fp, mode)
/* Normalize the value. */
mode = mode < 0 ? -1 : (mode == 0 ? 0 : 1);
- if (mode == 0)
- /* The caller simply wants to know about the current orientation. */
- return fp->_mode;
-
#if defined SHARED && defined _LIBC \
&& SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
if (__builtin_expect (&_IO_stdin_used == NULL, 0)
- && (fp == _IO_stdin || fp == _IO_stdout || fp == _IO_stderr))
+ && (fp == _IO_stdin || fp == _IO_stdout || fp == _IO_stderr))
/* This is for a stream in the glibc 2.0 format. */
return -1;
#endif
- if (fp->_mode != 0)
- /* The orientation already has been determined. */
+ /* The orientation already has been determined. */
+ if (fp->_mode != 0
+ /* Or the caller simply wants to know about the current orientation. */
+ || mode == 0)
return fp->_mode;
/* Set the orientation appropriately. */
diff --git a/libio/libio.h b/libio/libio.h
index 3c6bef9..11274ae 100644
--- a/libio/libio.h
+++ b/libio/libio.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-1995, 1997-2001, 2002 Free Software Foundation, Inc.
+/* Copyright (C) 1991-1995, 1997-2002, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Per Bothner <bothner@cygnus.com>.
@@ -502,7 +502,7 @@ weak_extern (_IO_stdin_used);
__result = (__fp)->_mode; \
} \
else if (__builtin_constant_p (__mode) && (__mode) == 0) \
- __result = (__fp)->_mode; \
+ __result = _IO_fwide_maybe_incompatible ? -1 : (__fp)->_mode; \
else \
__result = _IO_fwide (__fp, __result); \
__result; })