Improve monitor selection code

- Default to monitor 0 instead of failing if a crazy number is given
- Allow monitor to be specified by osdmonitor in the config file
This commit is contained in:
Johannes Holmberg 2015-09-16 21:19:45 -04:00 committed by Carlos R. Mafra
parent 3934bbe02f
commit f28188a36b

View file

@ -111,6 +111,25 @@ void config_release(void)
}
}
void parse_monitor_value(char *value)
{
char *end;
long mon = strtol(value, &end, 10);
if (end == value + strlen(value)) {
if ((mon > INT_MAX) || (mon < -1)) {
fprintf(stderr, "wmix:warning: unreasonable monitor number provided, falling back to default\n");
config.osd_monitor_number = 0;
} else {
if (mon == -1)
config.osd = 0;
else
config.osd_monitor_number = (int)mon;
}
} else {
config.osd_monitor_name = strdup(value);
}
}
/*
* Parse Command-Line options
*
@ -183,22 +202,8 @@ void parse_cli_options(int argc, char **argv)
config.mixer_device = strdup(optarg);
break;
case 'o': ;
char *end;
long mon = strtol(optarg, &end, 10);
if (end == optarg + strlen(optarg)) {
if ((mon > INT_MAX) || (mon < -1)) {
fprintf(stderr, "wmix:error: unreasonable monitor number provided\n");
error_found = true;
} else {
if (mon == -1)
config.osd = 0;
else
config.osd_monitor_number = (int)mon;
}
} else {
config.osd_monitor_name = strdup(optarg);
}
case 'o':
parse_monitor_value(optarg);
break;
case 'v':
@ -355,6 +360,9 @@ void config_read(void)
free(config.osd_color);
config.osd_color = strdup(value);
} else if (strcmp(keyword, "osdmonitor") == 0) {
parse_monitor_value(value);
} else if (strcmp(keyword, "scrolltext") == 0) {
config.scrolltext = atoi(value);