comparison libcommon/alpha_fromfile.c @ 20:90e7020df08a

GSM7 string parsers accept new bypass-encoding escapes
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 12 Feb 2021 03:44:59 +0000
parents 2ef261371347
children
comparison
equal deleted inserted replaced
19:72a24b8538eb 20:90e7020df08a
31 c = *cp++; 31 c = *cp++;
32 if (c == '\\') { 32 if (c == '\\') {
33 if (*cp == '\0') 33 if (*cp == '\0')
34 goto unterm_qstring; 34 goto unterm_qstring;
35 c = *cp++; 35 c = *cp++;
36 if (c >= '0' && c <= '7' && isxdigit(*cp)) {
37 c = ((c - '0') << 4) | decode_hex_digit(*cp++);
38 goto bypass_encoding;
39 }
36 switch (c) { 40 switch (c) {
37 case 'n': 41 case 'n':
38 c = '\n'; 42 c = '\n';
39 break; 43 goto bypass_encoding;
40 case 'r': 44 case 'r':
41 c = '\r'; 45 c = '\r';
42 break; 46 goto bypass_encoding;
47 case 'e':
48 c = 0x1B;
49 goto bypass_encoding;
43 case '"': 50 case '"':
44 case '\\': 51 case '\\':
45 break; 52 break;
46 default: 53 default:
47 fprintf(stderr, 54 fprintf(stderr,
55 fprintf(stderr, 62 fprintf(stderr,
56 "%s line %d: character in quoted string cannot be encoded in GSM7\n", 63 "%s line %d: character in quoted string cannot be encoded in GSM7\n",
57 filename_for_errs, lineno_for_errs); 64 filename_for_errs, lineno_for_errs);
58 return(0); 65 return(0);
59 } 66 }
67 bypass_encoding:
60 if (c & 0x80) 68 if (c & 0x80)
61 nadd = 2; 69 nadd = 2;
62 else 70 else
63 nadd = 1; 71 nadd = 1;
64 if (acclen + nadd > maxlen) { 72 if (acclen + nadd > maxlen) {