FreeCalypso > hg > fc-pcsc-tools
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) { |