+2014-01-29 Eli Zaretskii <eliz@gnu.org>
+
+ * print.c (print_object): Use FETCH_STRING_CHAR_ADVANCE, not
+ STRING_CHAR_AND_LENGTH, so that if the string is relocated by GC,
+ we still use correct addresses. (Bug#16576)
+
2014-01-27 K. Handa <handa@gnu.org>
Fix bug#16286 by the different way than revno:116158 to preserve
print_string (obj, printcharfun);
else
{
- register ptrdiff_t i_byte;
+ register ptrdiff_t i, i_byte;
struct gcpro gcpro1;
- unsigned char *str;
ptrdiff_t size_byte;
/* 1 means we must ensure that the next character we output
cannot be taken as part of a hex character escape. */
}
PRINTCHAR ('\"');
- str = SDATA (obj);
size_byte = SBYTES (obj);
- for (i_byte = 0; i_byte < size_byte;)
+ for (i = 0, i_byte = 0; i_byte < size_byte;)
{
/* Here, we must convert each multi-byte form to the
corresponding character code before handing it to PRINTCHAR. */
- int len;
int c;
- if (multibyte)
- {
- c = STRING_CHAR_AND_LENGTH (str + i_byte, len);
- i_byte += len;
- }
- else
- c = str[i_byte++];
+ FETCH_STRING_CHAR_ADVANCE (c, obj, i, i_byte);
QUIT;