FreeCalypso > hg > fc-pcsc-tools
comparison libcommon/gsm7_encode.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 | b8d27c72747a |
children |
comparison
equal
deleted
inserted
replaced
19:72a24b8538eb | 20:90e7020df08a |
---|---|
27 fprintf(stderr, | 27 fprintf(stderr, |
28 "error: dangling backslash escape\n"); | 28 "error: dangling backslash escape\n"); |
29 return(-1); | 29 return(-1); |
30 } | 30 } |
31 c = *cp++; | 31 c = *cp++; |
32 if (c >= '0' && c <= '7' && isxdigit(*cp)) { | |
33 c = ((c - '0') << 4) | decode_hex_digit(*cp++); | |
34 goto bypass_encoding; | |
35 } | |
32 switch (c) { | 36 switch (c) { |
33 case 'n': | 37 case 'n': |
34 c = '\n'; | 38 c = '\n'; |
35 break; | 39 goto bypass_encoding; |
36 case 'r': | 40 case 'r': |
37 c = '\r'; | 41 c = '\r'; |
38 break; | 42 goto bypass_encoding; |
43 case 'e': | |
44 c = 0x1B; | |
45 goto bypass_encoding; | |
39 case '"': | 46 case '"': |
40 case '\\': | 47 case '\\': |
41 break; | 48 break; |
42 default: | 49 default: |
43 fprintf(stderr, | 50 fprintf(stderr, |
49 if (c == 0xFF) { | 56 if (c == 0xFF) { |
50 fprintf(stderr, | 57 fprintf(stderr, |
51 "error: character in alpha tag string cannot be encoded in GSM7\n"); | 58 "error: character in alpha tag string cannot be encoded in GSM7\n"); |
52 return(-1); | 59 return(-1); |
53 } | 60 } |
61 bypass_encoding: | |
54 if (c & 0x80) | 62 if (c & 0x80) |
55 nadd = 2; | 63 nadd = 2; |
56 else | 64 else |
57 nadd = 1; | 65 nadd = 1; |
58 if (acclen + nadd > maxlen) { | 66 if (acclen + nadd > maxlen) { |