sdbr_escape.c (700B)
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' || isspace(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 '\f': c = 'f'; break; 25 case '\n': c = 'n'; break; 26 case '\r': c = 'r'; break; 27 case '\t': c = 't'; break; 28 case '\v': c = 'v'; break; 29 case '"': 30 case '\\': 31 if (e) 32 break; 33 default: 34 Straddc(s, c); 35 continue; 36 } 37 Straddc(s, '\\'); 38 Straddc(s, c); 39 } 40 if (e) { 41 Strinsert(s, Strn("\"", 1), 0); 42 Straddc(s, '"'); 43 } 44 return s->s; 45 } 46