2 * UCW Library -- String Routines
4 * (c) 2006 Pavel Charvat <pchar@ucw.cz>
6 * This software may be freely distributed and used according to the terms
7 * of the GNU Lesser General Public License.
11 #include "lib/chartype.h"
13 /* Expands C99-like escape sequences.
14 * It is safe to use the same buffer for both input and output. */
16 str_unesc(byte *d, byte *s)
23 case 'a': *d++ = '\a'; s += 2; break;
24 case 'b': *d++ = '\b'; s += 2; break;
25 case 'f': *d++ = '\f'; s += 2; break;
26 case 'n': *d++ = '\n'; s += 2; break;
27 case 'r': *d++ = '\r'; s += 2; break;
28 case 't': *d++ = '\t'; s += 2; break;
29 case 'v': *d++ = '\v'; s += 2; break;
30 case '\?': *d++ = '\?'; s += 2; break;
31 case '\'': *d++ = '\''; s += 2; break;
32 case '\"': *d++ = '\"'; s += 2; break;
33 case '\\': *d++ = '\\'; s += 2; break;
35 if (s[2] < '0' || s[2] > '7')
40 for (s += 2; *s >= '0' && *s <= '7' && v < 32; s++)
41 v = (v << 3) + *s - '0';
51 for (s += 2; Cxdigit(*s) && v < 16; s++)
52 v = (v << 4) + (Cdigit(*s) ? (*s - '0') : ((*s | 32) - 'A' + 10));