diff --git a/sysmisc.c b/sysmisc.c index 1bc27d2..3eed84a 100644 --- a/sysmisc.c +++ b/sysmisc.c @@ -390,12 +390,11 @@ enum { Confwflag_add_newline = 1 << 0, }; -void ezconf_write_start(Ezconf_write *ezcw, Confopt_w *opts, size_t optscount) { - for (size_t i = 0; i < optscount; i++) - opts[i].written = 0; +void ezconf_write_start(Ezconf_write *ezcw, Confopt_w *optsbuffer, + size_t buffercap) { *ezcw = (Ezconf_write){0}; - ezcw->opts = opts; - ezcw->optscount = optscount; + ezcw->opts = optsbuffer; + ezcw->optscap = buffercap; Ezconf_write_error error = Ezconf_write_unknown_error; switch (conf_save_start(&ezcw->save)) { case Conf_save_start_ok: @@ -426,7 +425,13 @@ void ezconf_write_start(Ezconf_write *ezcw, Confopt_w *opts, size_t optscount) { } ezcw->error = error; } - +void ezconf_write_addopt(Ezconf_write *ezcw, char const *key, intptr_t id) { + size_t count = ezcw->optscount, cap = ezcw->optscap; + if (count == cap) + return; + ezcw->opts[count] = (Confopt_w){.name = key, .id = id, .written = 0}; + ezcw->optscount = count + 1; +} bool ezconf_write_step(Ezconf_write *ezcw) { U32 stateflags = ezcw->stateflags; FILE *origfile = ezcw->save.origfile, *tempfile = ezcw->save.tempfile; diff --git a/sysmisc.h b/sysmisc.h index 0e8dd1b..d1eec99 100644 --- a/sysmisc.h +++ b/sysmisc.h @@ -117,12 +117,14 @@ typedef struct { typedef struct { Conf_save save; Confopt_w *opts; - size_t optscount; + size_t optscount, optscap; intptr_t optid; FILE *file; Ezconf_write_error error; U32 stateflags; } Ezconf_write; -void ezconf_write_start(Ezconf_write *ezcw, Confopt_w *opts, size_t optscount); +void ezconf_write_start(Ezconf_write *ezcw, Confopt_w *optsbuffer, + size_t buffercap); +void ezconf_write_addopt(Ezconf_write *ezcw, char const *key, intptr_t id); bool ezconf_write_step(Ezconf_write *ezcw); diff --git a/tui_main.c b/tui_main.c index 5981e1c..23cff84 100644 --- a/tui_main.c +++ b/tui_main.c @@ -2398,8 +2398,9 @@ Prefs_load_error prefs_load_from_conf_file(Prefs *p) { void save_prefs_with_error_message(Midi_mode const *midi_mode, int softmargin_y, int softmargin_x, bool softmargins_touched_by_user) { - Confopt_w wopts[Confoptslen]; - Usz i = 0; + Confopt_w optsbuff[Confoptslen]; + Ezconf_write ez; + ezconf_write_start(&ez, optsbuff, ORCA_ARRAY_COUNTOF(optsbuff)); oso *midi_output_device_name = NULL; switch (midi_mode->any.type) { case Midi_mode_type_null: @@ -2416,19 +2417,14 @@ void save_prefs_with_error_message(Midi_mode const *midi_mode, int softmargin_y, osowipe(&midi_output_device_name); break; } - wopts[i].name = confopts[Confopt_portmidi_output_device]; - wopts[i].id = Confopt_portmidi_output_device; - i++; + ezconf_write_addopt(&ez, confopts[Confopt_portmidi_output_device], + Confopt_portmidi_output_device); } break; #endif } if (softmargins_touched_by_user) { - wopts[i].name = confopts[Confopt_margins]; - wopts[i].id = Confopt_margins; - i++; + ezconf_write_addopt(&ez, confopts[Confopt_margins], Confopt_margins); } - Ezconf_write ez; - ezconf_write_start(&ez, wopts, i); while (ezconf_write_step(&ez)) { switch (ez.optid) { #ifdef FEAT_PORTMIDI