diff --git a/main.c b/main.c index 8eb557c..6157d49 100644 --- a/main.c +++ b/main.c @@ -144,6 +144,11 @@ int get_temp() { int value = 0; size_t len = sizeof(sensor); + if (!temperature_sensor_found) { + errno = ENOENT; + err(1, "no temperature sensor"); + } + if (sysctl(temperature_mib, 5, &sensor, &len, NULL, 0) == -1) err(1, "failed to read temperature"); @@ -202,9 +207,15 @@ void switch_batt() { /* assign values to variable if comma separated * if not, assign value to two variables */ -void assign_values_from_param(char* parameter, int* charging, int* battery) { +void assign_values_from_param(char* parameterk, int* charging, int* battery) { + char *parameter = strdup(parameterk); int count = 0; - char *token = strtok(parameter, ","); + char *token = NULL; + + if(parameter == NULL) + err(1, "malloc failed"); + + token = strtok(parameter, ","); while (token != NULL) { if(count == 0) @@ -224,6 +235,8 @@ void assign_values_from_param(char* parameter, int* charging, int* battery) { if(count == 1) *battery = *charging; + + free(parameter); } /* parse optarg for a sensor path, sysctl style; @@ -232,7 +245,7 @@ void assign_values_from_param(char* parameter, int* charging, int* battery) { * IFF it's a valid path, else sets errno to something * relevant. */ -void parse_sensor_path(char* path) { +void parse_sensor_path(char* pathk) { const struct ctlnameconst ctlnames[] = CTL_NAMES; const struct ctlnameconst ctlhwnames[] = CTL_HW_NAMES; const size_t prefix_len = @@ -240,7 +253,8 @@ void parse_sensor_path(char* path) { /*.*/1 + /*sensors*/strlen(ctlhwnames[HW_SENSORS].ctl_name) + /*.*/1; - char* prefix = malloc(prefix_len + 1); + char* path = NULL; + char* prefix = NULL; /* these are pointers into optarg */ char* sensordevname = NULL, *sensortype = NULL, *sensornumts = NULL; int sensornumt = -1; @@ -248,10 +262,14 @@ void parse_sensor_path(char* path) { const char* errstr = NULL; int dev = 0; - if(prefix == NULL) { - errno = ENOMEM; - return; - } + path = strdup(pathk); + if(path == NULL) + err(1, "malloc failed"); + + prefix = malloc(prefix_len + 1); + if(prefix == NULL) + err(1, "malloc failed"); + memset(prefix, 0, prefix_len + 1); strcpy(prefix, ctlnames[CTL_HW].ctl_name); strcat(prefix, "."); @@ -300,7 +318,7 @@ void parse_sensor_path(char* path) { if(verbose) fprintf(stderr, "%s does not look like a temperature sensor\n", - path); + pathk); errno = EINVAL; goto badprefix; } @@ -364,6 +382,7 @@ void parse_sensor_path(char* path) { badprefix: free(prefix); + free(path); } @@ -421,12 +440,14 @@ int main(int argc, char *argv[]) { break; case 'l': assign_values_from_param(optarg, &wall_min, &batt_min); - if(hard_min_freq > 100 || hard_min_freq < 0) + if(wall_min > 100 || wall_min < 0 || + batt_min > 100 || batt_min < 0) err(1, "minimum frequency must be between 0 and 100"); break; case 'm': assign_values_from_param(optarg, &wall_max, &batt_max); - if(hard_max_freq > 100 || hard_max_freq < 0) + if(wall_max > 100 || wall_max < 0 || + batt_max > 100 || batt_max < 0) err(1, "maximum frequency must be between 0 and 100"); break; case 'v':