FreeCalypso > hg > freecalypso-hwlab
comparison simtool/hexstr.c @ 151:d515cfbb3f39
fc-simtool: hex string parsing: add minimum length parameter
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Sun, 07 Feb 2021 00:18:30 +0000 |
| parents | 54e33e9238b6 |
| children |
comparison
equal
deleted
inserted
replaced
| 150:54e33e9238b6 | 151:d515cfbb3f39 |
|---|---|
| 18 if (c >= 'a' && c <= 'f') | 18 if (c >= 'a' && c <= 'f') |
| 19 return(c - 'a' + 10); | 19 return(c - 'a' + 10); |
| 20 return(-1); | 20 return(-1); |
| 21 } | 21 } |
| 22 | 22 |
| 23 decode_hex_data_from_string(arg, databuf, maxlen) | 23 decode_hex_data_from_string(arg, databuf, minlen, maxlen) |
| 24 char *arg; | 24 char *arg; |
| 25 u_char *databuf; | 25 u_char *databuf; |
| 26 unsigned maxlen; | 26 unsigned minlen, maxlen; |
| 27 { | 27 { |
| 28 unsigned count; | 28 unsigned count; |
| 29 | 29 |
| 30 for (count = 0; ; count++) { | 30 for (count = 0; ; count++) { |
| 31 while (isspace(*arg)) | 31 while (isspace(*arg)) |
| 35 if (!isxdigit(arg[0]) || !isxdigit(arg[1])) { | 35 if (!isxdigit(arg[0]) || !isxdigit(arg[1])) { |
| 36 fprintf(stderr, "error: invalid hex string input\n"); | 36 fprintf(stderr, "error: invalid hex string input\n"); |
| 37 return(-1); | 37 return(-1); |
| 38 } | 38 } |
| 39 if (count >= maxlen) { | 39 if (count >= maxlen) { |
| 40 fprintf(stderr, "error: hex input data is too long\n"); | 40 fprintf(stderr, "error: hex string is too long\n"); |
| 41 return(-1); | 41 return(-1); |
| 42 } | 42 } |
| 43 databuf[count] = (decode_hex_digit(arg[0]) << 4) | | 43 databuf[count] = (decode_hex_digit(arg[0]) << 4) | |
| 44 decode_hex_digit(arg[1]); | 44 decode_hex_digit(arg[1]); |
| 45 arg += 2; | 45 arg += 2; |
| 46 } | 46 } |
| 47 if (!count) { | 47 if (count < minlen) { |
| 48 fprintf(stderr, "error: empty hex string argument\n"); | 48 fprintf(stderr, "error: hex string is too short\n"); |
| 49 return(-1); | 49 return(-1); |
| 50 } | 50 } |
| 51 return(count); | 51 return(count); |
| 52 } | 52 } |
