From 13b8b780fea146c9f5cd200af564cdca72bc649c Mon Sep 17 00:00:00 2001 From: Andrzej Kurek Date: Wed, 12 Apr 2023 09:43:47 -0400 Subject: [PATCH] Improve x509_inet_pton_ipv4 readability Introduce descriptive variable names. Drop the table of tens. Signed-off-by: Andrzej Kurek --- library/x509_crt.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/library/x509_crt.c b/library/x509_crt.c index 64016a552a..791fad141f 100644 --- a/library/x509_crt.c +++ b/library/x509_crt.c @@ -2623,24 +2623,23 @@ static int x509_inet_pton_ipv6(const char *src, void *dst) static int x509_inet_pton_ipv4(const char *src, void *dst) { /* note: allows leading 0's, e.g. 000.000.000.000 */ - const unsigned char *v = (const unsigned char *) src; + const unsigned char *character = (const unsigned char *) src; uint8_t *res = (uint8_t *) dst; - uint8_t d1, d2, d3, i = 0; - int ii; - const uint8_t tens[] = { 0, 10, 20, 30, 40, 50, 60, 70, 80, 90 }; + uint8_t digit1, digit2, digit3, num_octets = 0; + uint16_t octet; + do { - if ((d1 = *(uint8_t *) v - '0') > 9) { + if ((digit1 = *(uint8_t *) character - '0') > 9) { break; - } else if ((d2 = *(uint8_t *) ++v - '0') > 9) { - *res++ = d1; - } else if ((d3 = *(uint8_t *) ++v - '0') > 9) { - *res++ = tens[d1] + d2; - } else if ((ii = (d1 < 2 ? d1 == 1 ? 100 : 0 : d1 == 2 ? 200 : 999) - + tens[d2] + d3) < 256) { - *res++ = (uint8_t) ii, ++v; + } else if ((digit2 = *(uint8_t *) ++character - '0') > 9) { + *res++ = digit1; + } else if ((digit3 = *(uint8_t *) ++character - '0') > 9) { + *res++ = digit1 * 10 + digit2; + } else if ((octet = digit1 * 100 + digit2 * 10 + digit3) < 256) { + *res++ = (uint8_t) octet, ++character; } - } while (++i < 4 && *v++ == '.'); - return i == 4 && *v == '\0' ? 0 : -1; + } while (++num_octets < 4 && *character++ == '.'); + return num_octets == 4 && *character == '\0' ? 0 : -1; } #else