Browse Source

parse_hex4: deduplicate into a for loop

Max Bruckner 8 years ago
parent
commit
d7b5545748
1 changed files with 25 additions and 75 deletions
  1. 25 75
      cJSON.c

+ 25 - 75
cJSON.c

@@ -362,84 +362,34 @@ static unsigned char *print_number(const cJSON *item, printbuffer *p)
 static unsigned parse_hex4(const unsigned char *str)
 static unsigned parse_hex4(const unsigned char *str)
 {
 {
     unsigned int h = 0;
     unsigned int h = 0;
+    size_t i = 0;
 
 
-    /* first digit */
-    if ((*str >= '0') && (*str <= '9'))
-    {
-        h += (unsigned int) (*str) - '0';
-    }
-    else if ((*str >= 'A') && (*str <= 'F'))
-    {
-        h += (unsigned int) 10 + (*str) - 'A';
-    }
-    else if ((*str >= 'a') && (*str <= 'f'))
-    {
-        h += (unsigned int) 10 + (*str) - 'a';
-    }
-    else /* invalid */
-    {
-        return 0;
-    }
-
-
-    /* second digit */
-    h = h << 4;
-    str++;
-    if ((*str >= '0') && (*str <= '9'))
-    {
-        h += (unsigned int) (*str) - '0';
-    }
-    else if ((*str >= 'A') && (*str <= 'F'))
-    {
-        h += (unsigned int) 10 + (*str) - 'A';
-    }
-    else if ((*str >= 'a') && (*str <= 'f'))
-    {
-        h += (unsigned int) 10 + (*str) - 'a';
-    }
-    else /* invalid */
-    {
-        return 0;
-    }
-
-    /* third digit */
-    h = h << 4;
-    str++;
-    if ((*str >= '0') && (*str <= '9'))
+    for (i = 0; i < 4; i++)
     {
     {
-        h += (unsigned int) (*str) - '0';
-    }
-    else if ((*str >= 'A') && (*str <= 'F'))
-    {
-        h += (unsigned int) 10 + (*str) - 'A';
-    }
-    else if ((*str >= 'a') && (*str <= 'f'))
-    {
-        h += (unsigned int) 10 + (*str) - 'a';
-    }
-    else /* invalid */
-    {
-        return 0;
-    }
+        /* parse digit */
+        if ((*str >= '0') && (*str <= '9'))
+        {
+            h += (unsigned int) (*str) - '0';
+        }
+        else if ((*str >= 'A') && (*str <= 'F'))
+        {
+            h += (unsigned int) 10 + (*str) - 'A';
+        }
+        else if ((*str >= 'a') && (*str <= 'f'))
+        {
+            h += (unsigned int) 10 + (*str) - 'a';
+        }
+        else /* invalid */
+        {
+            return 0;
+        }
 
 
-    /* fourth digit */
-    h = h << 4;
-    str++;
-    if ((*str >= '0') && (*str <= '9'))
-    {
-        h += (unsigned int) (*str) - '0';
-    }
-    else if ((*str >= 'A') && (*str <= 'F'))
-    {
-        h += (unsigned int) 10 + (*str) - 'A';
-    }
-    else if ((*str >= 'a') && (*str <= 'f'))
-    {
-        h += (unsigned int) 10 + (*str) - 'a';
-    }
-    else /* invalid */
-    {
-        return 0;
+        if (i < 3)
+        {
+            /* shift left to make place for the next nibble */
+            h = h << 4;
+            str++;
+        }
     }
     }
 
 
     return h;
     return h;