errno saving in display_string
authorAndy Wingo <wingo@pobox.com>
Thu, 24 Feb 2011 12:10:16 +0000 (13:10 +0100)
committerAndy Wingo <wingo@pobox.com>
Thu, 24 Feb 2011 12:10:16 +0000 (13:10 +0100)
* libguile/print.c (display_string): Fix a case in which perhaps `errno'
  could have been stompled.

libguile/print.c

index 59b1093..3855146 100644 (file)
@@ -862,6 +862,8 @@ display_string (const void *str, int narrow_p,
 
       if (SCM_UNLIKELY (done == (size_t) -1))
        {
+          int errno_save = errno;
+
          /* Reset the `iconv' state.  */
          iconv (pt->output_cd, NULL, NULL, NULL, NULL);
 
@@ -873,7 +875,7 @@ display_string (const void *str, int narrow_p,
          codepoints_read = offsets[input - utf8_buf] - printed;
          printed += codepoints_read;
 
-         if (errno == EILSEQ &&
+         if (errno_save == EILSEQ &&
              strategy != SCM_FAILED_CONVERSION_ERROR)
            {
              /* Conversion failed somewhere in INPUT and we want to