From 081e9e2304f084f58ec91ae6ea278d75bc7a7d57 Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Fri, 13 Sep 2013 10:24:10 -0400 Subject: Tweak Sergey's patch to work with Postgres --- src/c/urweb.c | 70 ++++++++++++++++++++--------------------------------------- 1 file changed, 23 insertions(+), 47 deletions(-) (limited to 'src/c') diff --git a/src/c/urweb.c b/src/c/urweb.c index 30e4d7a6..88361a87 100644 --- a/src/c/urweb.c +++ b/src/c/urweb.c @@ -2509,46 +2509,45 @@ uw_Basis_string uw_Basis_sqlifyChar(uw_context ctx, uw_Basis_char c) { char *uw_sqlsuffixBlob = "::bytea"; -uw_Basis_string uw_Basis_sqlifyBlob_old(uw_context ctx, uw_Basis_blob b) { +uw_Basis_string uw_Basis_sqlifyBlob(uw_context ctx, uw_Basis_blob b) { char *r, *s2; size_t i; - uw_check_heap(ctx, b.size * 5 + 3 + uw_Estrings + strlen(uw_sqlsuffixBlob)); + uw_check_heap(ctx, b.size * 5 + 4 + strlen(uw_sqlsuffixBlob)); r = s2 = ctx->heap.front; if (uw_Estrings) *s2++ = 'E'; + else + *s2++ = 'X'; *s2++ = '\''; for (i = 0; i < b.size; ++i) { - char c = b.data[i]; + unsigned char c = b.data[i]; - switch (c) { - case '\'': - if (uw_Estrings) + if (uw_Estrings) { + switch (c) { + case '\'': strcpy(s2, "\\'"); - else - strcpy(s2, "''"); - s2 += 2; - break; - case '\\': - if (uw_Estrings) { + s2 += 2; + break; + case '\\': strcpy(s2, "\\\\\\\\"); s2 += 4; - } else - *s2++ = '\\'; - break; - default: - if (isprint((int)c)) - *s2++ = c; - else if (uw_Estrings) { - sprintf(s2, "\\\\%03o", c); - s2 += 5; + break; + default: + if (isprint((int)c)) + *s2++ = c; + else { + sprintf(s2, "\\\\%03o", c); + s2 += 5; + } } - else - uw_error(ctx, FATAL, "Non-printable character %u in blob to SQLify", c); + } else { + sprintf(s2, "%02X", c); + s2 += 2; } - } + } *s2++ = '\''; strcpy(s2, uw_sqlsuffixBlob); @@ -2556,29 +2555,6 @@ uw_Basis_string uw_Basis_sqlifyBlob_old(uw_context ctx, uw_Basis_blob b) { return r; } -int uw_Xstrings = 1; - -uw_Basis_string uw_Basis_sqlifyBlob(uw_context ctx, uw_Basis_blob b) { - char *r, *s2; - size_t i; - - uw_check_heap(ctx, b.size * 2 + 3 + uw_Xstrings); - - r = s2 = ctx->heap.front; - *s2++ = 'X'; - *s2++ = '\''; - - for (i = 0; i < b.size; ++i) { - char c = b.data[i]; - sprintf(s2, "%02X", c); - s2 += 2; - } - - *s2++ = '\''; - ctx->heap.front = s2 + 1; - return r; -} - char *uw_Basis_sqlifyChannel(uw_context ctx, uw_Basis_channel chn) { int len; char *r; -- cgit v1.2.3