]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Update.
authorUlrich Drepper <drepper@redhat.com>
Tue, 25 Jul 2000 07:08:50 +0000 (07:08 +0000)
committerUlrich Drepper <drepper@redhat.com>
Tue, 25 Jul 2000 07:08:50 +0000 (07:08 +0000)
2000-07-25  Ulrich Drepper  <drepper@redhat.com>

* libio/wfileops.c (_IO_wdo_write): Allow partial conversions in the
loop.

* libio/fileops.c: Pretty print.

ChangeLog
libio/wfileops.c

index f27896b8d1ef80939c1c8ccb523c0af665436a5b..c1781e4d64eff3b730394b06a1a69648c30ee43b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2000-07-25  Ulrich Drepper  <drepper@redhat.com>
+
+       * libio/wfileops.c (_IO_wdo_write): Allow partial conversions in the
+       loop.
+
+       * libio/fileops.c: Pretty print.
+
 2000-07-23  Bruno Haible  <haible@clisp.cons.org>
 
        * wctype/wchar-lookup.h: New file.
index 94c14c9151d50503f03cd4f4bd1ead10b9ea7ee1..fc75e16f1097b249d519942b409d0d4ff35f835e 100644 (file)
@@ -62,39 +62,46 @@ _IO_wdo_write (fp, data, to_do)
   struct _IO_codecvt *cc = &fp->_wide_data->_codecvt;
   _IO_size_t count = 0;
 
-  while (to_do > 0)
+  if (to_do > 0)
     {
-      enum __codecvt_result result;
-      const wchar_t *new_data;
-
       if (fp->_IO_write_end == fp->_IO_write_ptr
          && fp->_IO_write_end != fp->_IO_write_base)
        {
-         _IO_new_file_overflow (fp, EOF);
-         assert (fp->_IO_write_end > fp->_IO_write_ptr);
+         if (_IO_new_do_write (fp, fp->_IO_write_base,
+                               fp->_IO_write_ptr - fp->_IO_write_base) == EOF)
+           return EOF;
        }
 
-      /* Now convert from the internal format into the external buffer.  */
-      result = (*cc->__codecvt_do_out) (cc, &fp->_wide_data->_IO_state,
-                                       data, data + to_do, &new_data,
-                                       fp->_IO_write_ptr,
-                                       fp->_IO_buf_end,
-                                       &fp->_IO_write_ptr);
-
-      /* Write out what we produced so far.  */
-      if (_IO_new_do_write (fp, fp->_IO_write_base,
-                           fp->_IO_write_ptr - fp->_IO_write_base) == EOF)
-       /* Something went wrong.  */
-       return EOF;
-
-      count += new_data - data;
-      to_do -= new_data - data;
-      data = new_data;
-
-      /* Next see whether we had problems during the conversion.  If yes,
-        we cannot go on.  */
-      if (result != __codecvt_ok)
-       break;
+      do
+       {
+         enum __codecvt_result result;
+         const wchar_t *new_data;
+
+         /* Now convert from the internal format into the external buffer.  */
+         result = (*cc->__codecvt_do_out) (cc, &fp->_wide_data->_IO_state,
+                                           data, data + to_do, &new_data,
+                                           fp->_IO_write_ptr,
+                                           fp->_IO_buf_end,
+                                           &fp->_IO_write_ptr);
+
+         /* Write out what we produced so far.  */
+         if (_IO_new_do_write (fp, fp->_IO_write_base,
+                               fp->_IO_write_ptr - fp->_IO_write_base) == EOF)
+           /* Something went wrong.  */
+           return EOF;
+
+         count += new_data - data;
+         to_do -= new_data - data;
+
+         /* Next see whether we had problems during the conversion.  If yes,
+            we cannot go on.  */
+         if (result != __codecvt_ok
+             && (result != __codecvt_partial || new_data - data == 0))
+           break;
+
+         data = new_data;
+       }
+      while (to_do > 0);
     }
 
   _IO_wsetg (fp, fp->_wide_data->_IO_buf_base, fp->_wide_data->_IO_buf_base,