Use return for errors only in oid_parse_number()

Signed-off-by: David Horstmann <david.horstmann@arm.com>
diff --git a/library/oid.c b/library/oid.c
index 6c62b94..91f6da6 100644
--- a/library/oid.c
+++ b/library/oid.c
@@ -895,24 +895,20 @@
     return (int) (size - n);
 }
 
-static int oid_parse_number(const char **p, const char *bound)
+static int oid_parse_number(unsigned int *num, const char **p, const char *bound)
 {
     int ret = MBEDTLS_ERR_ASN1_INVALID_DATA;
-    int num = 0;
+    *num = 0;
     while (*p < bound && **p >= '0' && **p <= '9') {
         ret = 0;
-        if (num > (INT_MAX / 10)) {
+        if (*num > (INT_MAX / 10)) {
             return MBEDTLS_ERR_ASN1_INVALID_DATA;
         }
-        num *= 10;
-        num += **p - '0';
+        *num *= 10;
+        *num += **p - '0';
         (*p)++;
     }
-    if (ret != 0) {
-        return ret;
-    } else {
-        return num;
-    }
+    return ret;
 }
 
 static size_t oid_subidentifier_num_bytes(unsigned int value)
@@ -956,10 +952,11 @@
     const char *str_bound = oid_str + size;
     int val = 0;
     size_t encoded_len;
+    unsigned int component1, component2;
 
-    int component1 = oid_parse_number(&str_ptr, str_bound);
-    if (component1 < 0) {
-        return component1;
+    ret = oid_parse_number(&component1, &str_ptr, str_bound);
+    if (ret != 0) {
+        return ret;
     }
     if (component1 > 2) {
         /* First component can't be > 2 */
@@ -970,9 +967,9 @@
     }
     str_ptr++;
 
-    int component2 = oid_parse_number(&str_ptr, str_bound);
-    if (component2 < 0) {
-        return component2;
+    ret = oid_parse_number(&component2, &str_ptr, str_bound);
+    if (ret != 0) {
+        return ret;
     }
     if ((component1 < 2) && (component2 > 39)) {
         /* Root nodes 0 and 1 may have up to 40 children, numbered 0-39 */
@@ -986,17 +983,15 @@
         }
     }
 
-    if ((UINT_MAX - (unsigned int) component2) <=
-        ((unsigned int) component1 * 40)) {
+    if ((UINT_MAX - component2) <= (component1 * 40)) {
         return MBEDTLS_ERR_ASN1_INVALID_DATA;
     }
-    encoded_len = oid_subidentifier_num_bytes(((unsigned int) component1 * 40)
-                                              + (unsigned int) component2);
+    encoded_len = oid_subidentifier_num_bytes((component1 * 40) + component2);
 
     while (str_ptr < str_bound && *str_ptr != '\0') {
-        val = oid_parse_number(&str_ptr, str_bound);
-        if (val < 0) {
-            return val;
+        oid_parse_number(&val, &str_ptr, str_bound);
+        if (ret != 0) {
+            return ret;
         }
         if (str_ptr < str_bound && *str_ptr != '\0') {
             if (*str_ptr == '.') {
@@ -1025,10 +1020,10 @@
     unsigned char *out_bound = oid->p + oid->len;
 
     /* No need to do validation this time, as we did it on the first pass */
-    component1 = oid_parse_number(&str_ptr, str_bound);
+    oid_parse_number(&component1, &str_ptr, str_bound);
     /* Skip past the '.' */
     str_ptr++;
-    component2 = oid_parse_number(&str_ptr, str_bound);
+    oid_parse_number(&component2, &str_ptr, str_bound);
     /* Skip past the '.' */
     str_ptr++;
     ret = oid_subidentifier_encode_into(&out_ptr, out_bound,
@@ -1040,7 +1035,7 @@
         return ret;
     }
     while (str_ptr < str_bound && *str_ptr != '\0') {
-        val = oid_parse_number(&str_ptr, str_bound);
+        oid_parse_number(&val, &str_ptr, str_bound);
         if (str_ptr < str_bound && *str_ptr == '.') {
             /* Skip past the '.' */
             str_ptr++;