about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog17
-rw-r--r--iconvdata/iso-2022-cn-ext.c18
-rw-r--r--libio/genops.c2
-rw-r--r--stdio-common/tst-printf.sh4
-rw-r--r--stdio-common/vfprintf.c10
5 files changed, 40 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 0955752fae..e3c06c38b3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2000-09-24  Ulrich Drepper  <drepper@redhat.com>
+
+	* libio/genops.c (_IO_doallocbuf): Don't use single byte buffer if
+	stream is in wide mode.
+
+	* stdio-common/vfprintf.c (buffered_vfprintf): Orient stream.
+
+2000-09-21  Bruno Haible  <haible@clisp.cons.org>
+
+	* iconvdata/iso-2022-cn-ext.c (EMIT_SHIFT_TO_INIT): Shift __count
+	by 3, not 2.
+	(INIT_PARAMS, UPDATE_PARAMS): Likewise.
+
 2000-09-21  Bruno Haible  <haible@clisp.cons.org>
 
 	* stdio-common/vfscanf.c (__vfscanf, _IO_vfscanf): Fix bugs in
@@ -8,7 +21,9 @@
 	* stdio-common/vfprintf.c (process_arg): Handle %hhn.
 	Add missing case in va_arg handling for numbers.
 	* stdio-common/tst-printf.c (main): Add tests for %hhu and %hhn
-	handling.  Reported by Joseph S. Myers <jsm28@cam.ac.uk>.
+	handling.
+	* stdio/tst-printf.sh: Adjust expected results.
+	Reported by Joseph S. Myers <jsm28@cam.ac.uk>.
 
 2000-09-20  Bruno Haible  <haible@clisp.cons.org>
 
diff --git a/iconvdata/iso-2022-cn-ext.c b/iconvdata/iso-2022-cn-ext.c
index 32a639a0c5..20f889ee9d 100644
--- a/iconvdata/iso-2022-cn-ext.c
+++ b/iconvdata/iso-2022-cn-ext.c
@@ -123,12 +123,12 @@ enum
    the output state to the initial state.  This has to be done during the
    flushing.  */
 #define EMIT_SHIFT_TO_INIT \
-  if (data->__statep->__count >> 2 != ASCII_set)			      \
+  if (data->__statep->__count >> 3 != ASCII_set)			      \
     {									      \
       if (FROM_DIRECTION)						      \
 	/* It's easy, we don't have to emit anything, we just reset the	      \
 	   state for the input.  */					      \
-	data->__statep->__count = ASCII_set << 2;			      \
+	data->__statep->__count = ASCII_set << 3;			      \
       else								      \
 	{								      \
 	  unsigned char *outbuf = data->__outbuf;			      \
@@ -145,7 +145,7 @@ enum
 	      if (data->__flags & __GCONV_IS_LAST)			      \
 		*irreversible += 1;					      \
 	      data->__outbuf = outbuf;					      \
-	      data->__statep->__count = ASCII_set << 2;			      \
+	      data->__statep->__count = ASCII_set << 3;			      \
 	    }								      \
 	}								      \
     }
@@ -394,9 +394,9 @@ enum
     *((uint32_t *) outptr)++ = ch;					      \
   }
 #define EXTRA_LOOP_DECLS	, int *setp
-#define INIT_PARAMS		int set = (*setp >> 2) & CURRENT_MASK; \
-				int ann = (*setp >> 2) & ~CURRENT_MASK
-#define UPDATE_PARAMS		*setp = (set | ann) << 2
+#define INIT_PARAMS		int set = (*setp >> 3) & CURRENT_MASK; \
+				int ann = (*setp >> 3) & ~CURRENT_MASK
+#define UPDATE_PARAMS		*setp = (set | ann) << 3
 #define LOOP_NEED_FLAGS
 #include <iconv/loop.c>
 
@@ -644,9 +644,9 @@ enum
     inptr += 4;								      \
   }
 #define EXTRA_LOOP_DECLS	, int *setp
-#define INIT_PARAMS		int set = (*setp >> 2) & CURRENT_MASK; \
-				int ann = (*setp >> 2) & ~CURRENT_MASK
-#define UPDATE_PARAMS		*setp = (set | ann) << 2
+#define INIT_PARAMS		int set = (*setp >> 3) & CURRENT_MASK; \
+				int ann = (*setp >> 3) & ~CURRENT_MASK
+#define UPDATE_PARAMS		*setp = (set | ann) << 3
 #define LOOP_NEED_FLAGS
 #include <iconv/loop.c>
 
diff --git a/libio/genops.c b/libio/genops.c
index 42419bf508..c86adee4c0 100644
--- a/libio/genops.c
+++ b/libio/genops.c
@@ -368,7 +368,7 @@ _IO_doallocbuf (fp)
 {
   if (fp->_IO_buf_base)
     return;
-  if (!(fp->_flags & _IO_UNBUFFERED))
+  if (!(fp->_flags & _IO_UNBUFFERED) || fp->_mode > 0)
     if (_IO_DOALLOCATE (fp) != EOF)
       return;
   _IO_setb (fp, fp->_shortbuf, fp->_shortbuf+1, 0);
diff --git a/stdio-common/tst-printf.sh b/stdio-common/tst-printf.sh
index e6e3327a17..0c5d784d68 100644
--- a/stdio-common/tst-printf.sh
+++ b/stdio-common/tst-printf.sh
@@ -134,6 +134,8 @@ prefix  6d      6o      6x      6X      6u
 0.10000000000000009
 Test ok.
 sprintf (buf, "%07Lo", 040000000000ll) = 40000000000
+printf ("%hhu", 257) = 1
+printf ("%hu", 65537) = 1
 --- Should be no further output. ---
 EOF
 cmp - ${common_objpfx}stdio-common/tst-printf.out >& /dev/null ||
@@ -243,6 +245,8 @@ prefix  6d      6o      6x      6X      6u
 0.10000000000000009
 Test ok.
 sprintf (buf, "%07Lo", 040000000000ll) = 40000000000
+printf ("%hhu", 257) = 1
+printf ("%hu", 65537) = 1
 --- Should be no further output. ---
 EOF
 cmp - ${common_objpfx}stdio-common/tst-printf.out >& /dev/null ||
diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c
index adfb65100c..822728e7e7 100644
--- a/stdio-common/vfprintf.c
+++ b/stdio-common/vfprintf.c
@@ -2062,6 +2062,11 @@ buffered_vfprintf (register _IO_FILE *s, const CHAR_T *format,
   register _IO_FILE *hp = (_IO_FILE *) &helper._f;
   int result, to_flush;
 
+  /* Orient the stream.  */
+#ifdef ORIENT
+  ORIENT;
+#endif
+
   /* Initialize helper.  */
   helper._put_stream = s;
 #ifdef COMPILE_WPRINTF
@@ -2122,6 +2127,11 @@ buffered_vfprintf (register FILE *s, const CHAR_T *format, va_list args)
   char buf[BUFSIZ];
   int result;
 
+  /* Orient the stream.  */
+#ifdef ORIENT
+  ORIENT;
+#endif
+
   s->__bufp = s->__buffer = buf;
   s->__bufsize = sizeof buf;
   s->__put_limit = s->__buffer + s->__bufsize;