From 47db4fc7411165a57a101d8becee4f8cf5f06a47 Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Thu, 12 Jan 2023 09:42:18 +0100 Subject: [PATCH] code cleaning --- hexdump.c | 64 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 23 deletions(-) diff --git a/hexdump.c b/hexdump.c index c146b63..d118c06 100644 --- a/hexdump.c +++ b/hexdump.c @@ -204,6 +204,41 @@ int hexdump (int len) { return 0; } +/* parse octal string */ + +long int octal (char *s, int n) { + int i; + long int l = 0; + for (i = 0; i < n; i++) { + if ((s[i] >= '0') && (s[i] <= '9')) { + l = l * 8 + s[i] - '0'; + } else { + return -1; + } + } + return l; +} + +/* parse hexa string */ + +long int hexa (char *s, int n) { + int i; + long int l = 0; + for (i = 0; i < n; i++) { + l *= 16; + if ((s[i] >= '0') && (s[i] <= '9')) { + l += s[i] - '0'; + } else if ((s[i] >= 'A') && (s[i] <= 'F')) { + l += s[i] + 10 - 'A'; + } else if ((s[i] >= 'a') && (s[i] <= 'f')) { + l += s[i] + 10 - 'a'; + } else { + return -1; + } + } + return l; +} + /* special character function */ char *specialchar (char *s) { @@ -214,7 +249,7 @@ char *specialchar (char *s) { continue; } - int l = 0; + int l = -1; switch (s[i + 1]) { case 'a': l = 0x07; i += 2; break; case 'b': l = 0x08; i += 2; break; @@ -231,38 +266,21 @@ char *specialchar (char *s) { case '1': case '2': case '3': - if ((s[i + 2] >= '0') && (s[i + 2] <= '9') && - (s[i + 3] >= '0') && (s[i + 3] <= '9')) { - l = (s[i + 1] - '0') * 8 * 8 + (s[i + 2] - '0') * 8 + s[i + 3] - '0'; + l = octal (s + 1, 3); + if (l != -1) { i += 4; } break; case 'x': - if ((((s[i + 2] >= '0') && (s[i + 2] <= '9')) || - ((s[i + 2] >= 'A') && (s[i + 2] <= 'F')) || - ((s[i + 2] >= 'a') && (s[i + 2] <= 'f'))) && - (((s[i + 3] >= '0') && (s[i + 3] <= '9')) || - ((s[i + 3] >= 'A') && (s[i + 3] <= 'F')) || - ((s[i + 3] >= 'a') && (s[i + 3] <= 'f')))) { - l = s[i + 2] - '0'; - if (s[i + 2] >= 'a') { - l += '0' + 10 - 'a'; - } else if (s[i + 2] >= 'A') { - l += '0' + 10 - 'A'; - } - l = l * 16 + s[i + 3] - '0'; - if (s[i + 3] >= 'a') { - l += '0' + 10 - 'a'; - } else if (s[i + 3] >= 'A') { - l += '0' + 10 - 'A'; - } + l = hexa (s + 2, 2); + if (l != -1) { i += 4; } break; default: } VERBOSE (DEBUG, printf("l: 0x%02x '%c'\n", l, l)); - s[j++] = (l != 0) ? l : s[i++]; + s[j++] = (l != -1) ? l : s[i++]; } s[j] = '\0'; -- 2.30.2