]> git.proxmox.com Git - mirror_iproute2.git/commitdiff
iproute2: utils: change hexstring_n2a and hexstring_a2n to do not work with ":"
authorJiri Pirko <jiri@resnulli.us>
Thu, 15 May 2014 13:10:21 +0000 (15:10 +0200)
committerStephen Hemminger <stephen@networkplumber.org>
Mon, 9 Jun 2014 19:45:55 +0000 (12:45 -0700)
Signed-off-by: Jiri Pirko <jiri@resnulli.us>
lib/utils.c

index 4e9c719aead2be0d0e8c3cc7005b36d005ad57fa..e9e104029fe1b049917afc7130f171aef34a9089 100644 (file)
@@ -743,10 +743,6 @@ char *hexstring_n2a(const __u8 *str, int len, char *buf, int blen)
                sprintf(ptr, "%02x", str[i]);
                ptr += 2;
                blen -= 2;
-               if (i != len-1 && blen > 1) {
-                       *ptr++ = ':';
-                       blen--;
-               }
        }
        return buf;
 }
@@ -754,38 +750,22 @@ char *hexstring_n2a(const __u8 *str, int len, char *buf, int blen)
 __u8* hexstring_a2n(const char *str, __u8 *buf, int blen)
 {
        int cnt = 0;
+       char *endptr;
 
-       for (;;) {
-               unsigned acc;
-               char ch;
-
-               acc = 0;
-
-               while ((ch = *str) != ':' && ch != 0) {
-                       if (ch >= '0' && ch <= '9')
-                               ch -= '0';
-                       else if (ch >= 'a' && ch <= 'f')
-                               ch -= 'a'-10;
-                       else if (ch >= 'A' && ch <= 'F')
-                               ch -= 'A'-10;
-                       else
-                               return NULL;
-                       acc = (acc<<4) + ch;
-                       str++;
-               }
-
-               if (acc > 255)
+       if (strlen(str) % 2)
+               return NULL;
+       while (cnt < blen && strlen(str) > 1) {
+               unsigned int tmp;
+               char tmpstr[3];
+
+               strncpy(tmpstr, str, 2);
+               tmpstr[2] = '\0';
+               tmp = strtoul(tmpstr, &endptr, 16);
+               if (errno != 0 || tmp > 0xFF || *endptr != '\0')
                        return NULL;
-               if (cnt < blen) {
-                       buf[cnt] = acc;
-                       cnt++;
-               }
-               if (ch == 0)
-                       break;
-               ++str;
+               buf[cnt++] = tmp;
+               str += 2;
        }
-       if (cnt < blen)
-               memset(buf+cnt, 0, blen-cnt);
        return buf;
 }