Changeset 4675

Show
Ignore:
Timestamp:
08/16/07 11:58:44 (6 years ago)
Author:
khali
Message:

Use strtoul() instead of parsing integers on our own.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lm-sensors/branches/lm-sensors-3.0.0/lib/data.c

    r4674 r4675  
    7777  char *part2, *part3, *part4; 
    7878  char *name = strdup(orig_name); 
    79   int i; 
     79  char *endptr; 
    8080 
    8181  if (! name) 
     
    104104    res->addr = SENSORS_CHIP_NAME_ADDR_ANY; 
    105105  else { 
    106     if ((strlen(part4) > 4) || (strlen(part4) == 0)) 
    107       goto ERROR; 
    108     res->addr = 0; 
    109     for (i = 0; ; i++) {  
    110       switch (part4[i]) { 
    111       case '0': case '1': case '2': case '3': case '4': 
    112       case '5': case '6': case '7': case '8': case '9': 
    113         res->addr = res->addr * 16 + part4[i] - '0'; 
    114         break; 
    115       case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': 
    116         res->addr = res->addr * 16 + part4[i] - 'a' + 10; 
    117         break; 
    118       case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': 
    119         res->addr = res->addr * 16 + part4[i] - 'A' + 10; 
    120         break; 
    121       case 0: 
    122         goto DONE; 
    123       default: 
    124         goto ERROR; 
    125       } 
    126     } 
    127 DONE:; 
     106    res->addr = strtoul(part4, &endptr, 16); 
     107    if (*part4 == '\0' || *endptr != '\0' || res->addr < 0) 
     108      goto ERROR; 
    128109  } 
    129110 
     
    148129    res->bus = SENSORS_CHIP_NAME_BUS_ANY_I2C; 
    149130  else if (part2 && !strcmp(part2,"i2c")) { 
    150     if ((strlen(part3) > 3) || (strlen(part3) == 0)) 
    151       goto ERROR; 
    152     res->bus = 0; 
    153     for (i = 0; ; i++) {  
    154       switch (part3[i]) { 
    155       case '0': case '1': case '2': case '3': case '4': 
    156       case '5': case '6': case '7': case '8': case '9': 
    157         res->bus = res->bus * 10 + part3[i] - '0'; 
    158         break; 
    159       case 0: 
    160         goto DONE2; 
    161       default: 
    162         goto ERROR; 
    163       } 
    164     } 
    165 DONE2:; 
     131    res->bus = strtoul(part3, &endptr, 10); 
     132    if (*part3 == '\0' || *endptr != '\0' || res->bus < 0) 
     133      goto ERROR; 
    166134  } else if (res->addr == SENSORS_CHIP_NAME_ADDR_ANY) { 
    167135    res->bus = SENSORS_CHIP_NAME_BUS_ANY; 
     
    189157int sensors_parse_i2cbus_name(const char *name, int *res) 
    190158{ 
    191   int i; 
     159  char *endptr; 
    192160 
    193161  if (strncmp(name,"i2c-",4)) { 
     
    195163  } 
    196164  name += 4; 
    197   if ((strlen(name) > 3) || (strlen(name) == 0)) 
     165  *res = strtoul(name, &endptr, 10); 
     166  if (*name == '\0' || *endptr != '\0' || *res < 0) 
    198167    return -SENSORS_ERR_BUS_NAME; 
    199   *res = 0; 
    200   for (i = 0; ; i++) {  
    201     switch (name[i]) { 
    202     case '0': case '1': case '2': case '3': case '4': 
    203     case '5': case '6': case '7': case '8': case '9': 
    204       *res = *res * 10 + name[i] - '0'; 
    205       break; 
    206     case 0: 
    207       return 0; 
    208     default: 
    209       return -SENSORS_ERR_BUS_NAME; 
    210     } 
    211   } 
     168  return 0; 
    212169} 
    213170