forked from solene/obsdfreqd
Fix some minor issues:
1) in get_temp, check temperature_sensor_found to avoid a bogus sysctl if a temperature sensor was not found 2) fix checks for min_freq and max_freq (were not being checked, resulting in a failed sysctl if passing e.g. -m 1600) 3) preserve contents of argv[] because kvm_getargv grabs whatever is in the program's argv[], making ps report a different command line compared to how the program was started
This commit is contained in:
parent
89a2fe9a91
commit
89c822d677
43
main.c
43
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':
|
||||
|
|
Loading…
Reference in New Issue