diff options
-rw-r--r-- | ChangeLog | 17 | ||||
-rw-r--r-- | iconvdata/iso-2022-cn-ext.c | 18 | ||||
-rw-r--r-- | libio/genops.c | 2 | ||||
-rw-r--r-- | stdio-common/tst-printf.sh | 4 | ||||
-rw-r--r-- | stdio-common/vfprintf.c | 10 |
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; |