sdbr_escape.c (642B)
1 #include "std.h" 2 3 char* 4 sdbr_escape(String *s, String val) 5 { 6 ulong i; 7 uchar c, e; 8 9 Strzero(s); 10 e = 0; 11 if (val.s[0] == '"') 12 e = 1; 13 else for (i = 0; i < val.n; ++i) { 14 c = val.s[i]; 15 if (c == '\0' || ISWHITE(c)) { 16 e = 1; 17 break; 18 } 19 } 20 for (i = 0; i < val.n; ++i) { 21 c = val.s[i]; 22 switch (c) { 23 case '\0': c = '0'; break; 24 case '\t': c = 't'; break; 25 case '\n': c = 'n'; break; 26 case '\r': c = 'r'; break; 27 case '"': 28 case '\\': 29 if (e) 30 break; 31 default: 32 Straddc(s, c); 33 continue; 34 } 35 Straddc(s, '\\'); 36 Straddc(s, c); 37 } 38 if (e) { 39 Strinsert(s, Strn("\"", 1), 0); 40 Straddc(s, '"'); 41 } 42 return s->s; 43 } 44