register unsigned char c;
struct gcpro gcpro1;
int size_byte;
+ /* 1 means we must ensure that the next character we output
+ cannot be taken as part of a hex character escape. */
+ int need_nonhex = 0;
GCPRO1 (obj);
unsigned char outbuf[50];
sprintf (outbuf, "\\x%x", c);
strout (outbuf, -1, -1, printcharfun, 0);
+ need_nonhex = 1;
}
else if (SINGLE_BYTE_CHAR_P (c)
&& ! ASCII_BYTE_P (c)
}
else
{
+ /* If we just had a hex escape, and this character
+ could be taken as part of it,
+ output `\ ' to prevent that. */
+ if (need_nonhex
+ && ((c >= 'a' && c <= 'f')
+ || (c >= 'A' && c <= 'F')
+ || (c >= '0' && c <= '9')))
+ strout ("\\ ", -1, -1, printcharfun, 0);
+
if (c == '\"' || c == '\\')
PRINTCHAR ('\\');
PRINTCHAR (c);