*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/commands/copy.c,v 1.289 2007/11/30 21:22:53 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/commands/copy.c,v 1.290 2007/12/03 00:03:05 tgl Exp $
*
*-------------------------------------------------------------------------
*/
}
else if ((unsigned char) c < (unsigned char) 0x20)
{
+ /*
+ * \r and \n must be escaped, the others are traditional.
+ * We prefer to dump these using the C-like notation, rather
+ * than a backslash and the literal character, because it
+ * makes the dump file a bit more proof against Microsoftish
+ * data mangling.
+ */
switch (c)
{
- /*
- * \r and \n must be escaped, the others are
- * traditional
- */
case '\b':
+ c = 'b';
+ break;
case '\f':
+ c = 'f';
+ break;
case '\n':
+ c = 'n';
+ break;
case '\r':
+ c = 'r';
+ break;
case '\t':
+ c = 't';
+ break;
case '\v':
- DUMPSOFAR();
- CopySendChar(cstate, '\\');
- start = ptr++; /* we include char in next run */
+ c = 'v';
break;
default:
/* All ASCII control chars are length 1 */
ptr++;
- break;
+ continue; /* fall to end of loop */
}
+ /* if we get here, we need to convert the control char */
+ DUMPSOFAR();
+ CopySendChar(cstate, '\\');
+ CopySendChar(cstate, c);
+ start = ++ptr; /* do not include char in next run */
}
else if (IS_HIGHBIT_SET(c))
ptr += pg_encoding_mblen(cstate->client_encoding, ptr);
}
else if ((unsigned char) c < (unsigned char) 0x20)
{
+ /*
+ * \r and \n must be escaped, the others are traditional.
+ * We prefer to dump these using the C-like notation, rather
+ * than a backslash and the literal character, because it
+ * makes the dump file a bit more proof against Microsoftish
+ * data mangling.
+ */
switch (c)
{
- /*
- * \r and \n must be escaped, the others are
- * traditional
- */
case '\b':
+ c = 'b';
+ break;
case '\f':
+ c = 'f';
+ break;
case '\n':
+ c = 'n';
+ break;
case '\r':
+ c = 'r';
+ break;
case '\t':
+ c = 't';
+ break;
case '\v':
- DUMPSOFAR();
- CopySendChar(cstate, '\\');
- start = ptr++; /* we include char in next run */
+ c = 'v';
break;
default:
/* All ASCII control chars are length 1 */
ptr++;
- break;
+ continue; /* fall to end of loop */
}
+ /* if we get here, we need to convert the control char */
+ DUMPSOFAR();
+ CopySendChar(cstate, '\\');
+ CopySendChar(cstate, c);
+ start = ++ptr; /* do not include char in next run */
}
else
ptr++;