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) { |
