Changeset 4675
- Timestamp:
- 08/16/07 11:58:44 (6 years ago)
- Files:
-
- 1 modified
-
lm-sensors/branches/lm-sensors-3.0.0/lib/data.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lm-sensors/branches/lm-sensors-3.0.0/lib/data.c
r4674 r4675 77 77 char *part2, *part3, *part4; 78 78 char *name = strdup(orig_name); 79 int i;79 char *endptr; 80 80 81 81 if (! name) … … 104 104 res->addr = SENSORS_CHIP_NAME_ADDR_ANY; 105 105 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; 128 109 } 129 110 … … 148 129 res->bus = SENSORS_CHIP_NAME_BUS_ANY_I2C; 149 130 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; 166 134 } else if (res->addr == SENSORS_CHIP_NAME_ADDR_ANY) { 167 135 res->bus = SENSORS_CHIP_NAME_BUS_ANY; … … 189 157 int sensors_parse_i2cbus_name(const char *name, int *res) 190 158 { 191 int i;159 char *endptr; 192 160 193 161 if (strncmp(name,"i2c-",4)) { … … 195 163 } 196 164 name += 4; 197 if ((strlen(name) > 3) || (strlen(name) == 0)) 165 *res = strtoul(name, &endptr, 10); 166 if (*name == '\0' || *endptr != '\0' || *res < 0) 198 167 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; 212 169 } 213 170
