Parse single-line configuration variables

Include a fallback branch that accepts multi-line comments as well
(backward compatibility).

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
This commit is contained in:
Lukas Fleischer 2011-07-15 18:21:37 +02:00
parent 1f658881de
commit 3b4a21e79c

View File

@ -239,6 +239,7 @@ custom_load_conf (struct conf *conf, int background)
char *mesg_line1 = _("Failed to open config file"); char *mesg_line1 = _("Failed to open config file");
char *mesg_line2 = _("Press [ENTER] to continue"); char *mesg_line2 = _("Press [ENTER] to continue");
char buf[BUFSIZ], e_conf[BUFSIZ]; char buf[BUFSIZ], e_conf[BUFSIZ];
char *val;
enum conf_var var; enum conf_var var;
data_file = fopen (path_conf, "r"); data_file = fopen (path_conf, "r");
@ -304,80 +305,87 @@ custom_load_conf (struct conf *conf, int background)
/* NOTREACHED */ /* NOTREACHED */
} }
val = strchr (e_conf, '=') + 1;
/* Backward compatibility mode. */
if (*val == '\0' || *val == '\n')
{
if (fgets (buf, sizeof buf, data_file) == NULL) if (fgets (buf, sizeof buf, data_file) == NULL)
break; break;
io_extract_data (e_conf, buf, sizeof buf); io_extract_data (e_conf, buf, sizeof buf);
val = e_conf;
}
switch (var) switch (var)
{ {
case CUSTOM_CONF_AUTOSAVE: case CUSTOM_CONF_AUTOSAVE:
conf->auto_save = fill_config_var (e_conf); conf->auto_save = fill_config_var (val);
break; break;
case CUSTOM_CONF_PERIODICSAVE: case CUSTOM_CONF_PERIODICSAVE:
if (atoi (e_conf) < 0) if (atoi (val) < 0)
conf->periodic_save = 0; conf->periodic_save = 0;
else else
conf->periodic_save = atoi (e_conf); conf->periodic_save = atoi (val);
break; break;
case CUSTOM_CONF_CONFIRMQUIT: case CUSTOM_CONF_CONFIRMQUIT:
conf->confirm_quit = fill_config_var (e_conf); conf->confirm_quit = fill_config_var (val);
break; break;
case CUSTOM_CONF_CONFIRMDELETE: case CUSTOM_CONF_CONFIRMDELETE:
conf->confirm_delete = fill_config_var (e_conf); conf->confirm_delete = fill_config_var (val);
break; break;
case CUSTOM_CONF_SKIPSYSTEMDIALOGS: case CUSTOM_CONF_SKIPSYSTEMDIALOGS:
conf->skip_system_dialogs = fill_config_var (e_conf); conf->skip_system_dialogs = fill_config_var (val);
break; break;
case CUSTOM_CONF_SKIPPROGRESSBAR: case CUSTOM_CONF_SKIPPROGRESSBAR:
conf->skip_progress_bar = fill_config_var (e_conf); conf->skip_progress_bar = fill_config_var (val);
break; break;
case CUSTOM_CONF_CALENDAR_DEFAULTVIEW: case CUSTOM_CONF_CALENDAR_DEFAULTVIEW:
calendar_set_view (atoi (e_conf)); calendar_set_view (atoi (val));
break; break;
case CUSTOM_CONF_WEEKBEGINSONMONDAY: case CUSTOM_CONF_WEEKBEGINSONMONDAY:
if (fill_config_var (e_conf)) if (fill_config_var (val))
calendar_set_first_day_of_week (MONDAY); calendar_set_first_day_of_week (MONDAY);
else else
calendar_set_first_day_of_week (SUNDAY); calendar_set_first_day_of_week (SUNDAY);
break; break;
case CUSTOM_CONF_COLORTHEME: case CUSTOM_CONF_COLORTHEME:
custom_load_color (e_conf, background); custom_load_color (val, background);
break; break;
case CUSTOM_CONF_LAYOUT: case CUSTOM_CONF_LAYOUT:
wins_set_layout (atoi (e_conf)); wins_set_layout (atoi (val));
break; break;
case CUSTOM_CONF_SBAR_WIDTH: case CUSTOM_CONF_SBAR_WIDTH:
wins_set_sbar_width (atoi (e_conf)); wins_set_sbar_width (atoi (val));
break; break;
case CUSTOM_CONF_NOTIFYBARSHOW: case CUSTOM_CONF_NOTIFYBARSHOW:
nbar.show = fill_config_var (e_conf); nbar.show = fill_config_var (val);
break; break;
case CUSTOM_CONF_NOTIFYBARDATE: case CUSTOM_CONF_NOTIFYBARDATE:
(void)strncpy (nbar.datefmt, e_conf, strlen (e_conf) + 1); (void)strncpy (nbar.datefmt, val, strlen (val) + 1);
break; break;
case CUSTOM_CONF_NOTIFYBARCLOCK: case CUSTOM_CONF_NOTIFYBARCLOCK:
(void)strncpy (nbar.timefmt, e_conf, strlen (e_conf) + 1); (void)strncpy (nbar.timefmt, val, strlen (val) + 1);
break; break;
case CUSTOM_CONF_NOTIFYBARWARNING: case CUSTOM_CONF_NOTIFYBARWARNING:
nbar.cntdwn = atoi (e_conf); nbar.cntdwn = atoi (val);
break; break;
case CUSTOM_CONF_NOTIFYBARCOMMAND: case CUSTOM_CONF_NOTIFYBARCOMMAND:
(void)strncpy (nbar.cmd, e_conf, strlen (e_conf) + 1); (void)strncpy (nbar.cmd, val, strlen (val) + 1);
break; break;
case CUSTOM_CONF_OUTPUTDATEFMT: case CUSTOM_CONF_OUTPUTDATEFMT:
if (e_conf[0] != '\0') if (val[0] != '\0')
(void)strncpy (conf->output_datefmt, e_conf, strlen (e_conf) + 1); (void)strncpy (conf->output_datefmt, val, strlen (val) + 1);
break; break;
case CUSTOM_CONF_INPUTDATEFMT: case CUSTOM_CONF_INPUTDATEFMT:
conf->input_datefmt = atoi (e_conf); conf->input_datefmt = atoi (val);
if (conf->input_datefmt <= 0 || conf->input_datefmt >= DATE_FORMATS) if (conf->input_datefmt <= 0 || conf->input_datefmt >= DATE_FORMATS)
conf->input_datefmt = 1; conf->input_datefmt = 1;
break; break;
case CUSTOM_CONF_DMON_ENABLE: case CUSTOM_CONF_DMON_ENABLE:
dmon.enable = fill_config_var (e_conf); dmon.enable = fill_config_var (val);
break; break;
case CUSTOM_CONF_DMON_LOG: case CUSTOM_CONF_DMON_LOG:
dmon.log = fill_config_var (e_conf); dmon.log = fill_config_var (val);
break; break;
} }
} }