diff src/c/urweb.c @ 1467:8fce85939259

Fix bug with string literals in unAs
author Adam Chlipala <adam@chlipala.net>
date Mon, 30 May 2011 09:31:50 -0400
parents 2f5fd248588d
children 67ebd30a2283
line wrap: on
line diff
--- a/src/c/urweb.c	Mon May 30 07:48:08 2011 -0400
+++ b/src/c/urweb.c	Mon May 30 09:31:50 2011 -0400
@@ -3562,7 +3562,7 @@
 }
 
 uw_Basis_string uw_Basis_unAs(uw_context ctx, uw_Basis_string s) {
-  uw_Basis_string r = uw_malloc(ctx, strlen(s) + 1);
+  uw_Basis_string ret = uw_malloc(ctx, strlen(s) + 1), r = ret;
 
   for (; *s; ++s) {
     if (s[0] == '\'') {
@@ -3572,27 +3572,21 @@
           *r++ = '\'';
           break;
         } else if (s[0] == '\\') {
-          if (s[1] == '\\') {
-            *r++ = '\\';
-            *r++ = '\\';
-            ++s;
-          } else if (s[1] == '\'') {
-            *r++ = '\\';
-            *r++ = '\'';
-            ++s;
-          } else
-            *r++ = '\'';
+          *r++ = '\\';
+          *r++ = s[1];
+          ++s;
         } else
           *r++ = s[0];
       }
       if (*s == 0) break;
-    } else if (s[0] == 'T' && s[1] == '.')
-      ++s;
+    } else if (s[0] == 'T' && s[1] == '_' && s[2] == 'T' && s[3] == '.')
+      s += 3;
     else
       *r++ = s[0];
   }
 
-  return r;
+  *r = 0;
+  return ret;
 }
 
 uw_Basis_string uw_Basis_mstrcat(uw_context ctx, ...) {