Browse Source

Cleanup

master
cancel 5 years ago
parent
commit
852d20768b
  1. 73
      sysmisc.c
  2. 45
      sysmisc.h
  3. 12
      tui_main.c

73
sysmisc.c

@ -1,6 +1,6 @@
#include "sysmisc.h"
#include "gbuffer.h" #include "gbuffer.h"
#include "oso.h" #include "oso.h"
#include "sysmisc.h"
#include <ctype.h> #include <ctype.h>
#include <errno.h> #include <errno.h>
#include <sys/stat.h> #include <sys/stat.h>
@ -349,36 +349,36 @@ cleanup:
return err; return err;
} }
char const *ezconf_write_error_string(Ezconf_write_error error) { char const *ezconf_w_error_string(Ezconf_w_error error) {
switch (error) { switch (error) {
case Ezconf_write_ok: case Ezconf_w_ok:
return "No error"; return "No error";
case Ezconf_write_oom: case Ezconf_w_oom:
return "Out of memory"; return "Out of memory";
case Ezconf_write_no_home: case Ezconf_w_no_home:
return "Unable to resolve $XDG_CONFIG_HOME or $HOME"; return "Unable to resolve $XDG_CONFIG_HOME or $HOME";
case Ezconf_write_mkdir_failed: case Ezconf_w_mkdir_failed:
return "Unable to create $XDG_CONFIG_HOME or $HOME/.config directory"; return "Unable to create $XDG_CONFIG_HOME or $HOME/.config directory";
case Ezconf_write_conf_dir_not_dir: case Ezconf_w_conf_dir_not_dir:
return "Config directory path is not a directory"; return "Config directory path is not a directory";
case Ezconf_write_old_temp_file_stuck: case Ezconf_w_old_temp_file_stuck:
return "Unable to remove old orca.conf.tmp file"; return "Unable to remove old orca.conf.tmp file";
case Ezconf_write_temp_file_perm_denied: case Ezconf_w_temp_file_perm_denied:
return "Permission denied for config directory"; return "Permission denied for config directory";
case Ezconf_write_temp_open_failed: case Ezconf_w_temp_open_failed:
return "Unable to open orca.conf.tmp for writing"; return "Unable to open orca.conf.tmp for writing";
case Ezconf_write_temp_fsync_failed: case Ezconf_w_temp_fsync_failed:
return "fsync() reported an when writing temp file.\n" return "fsync() reported an when writing temp file.\n"
"Refusing to continue."; "Refusing to continue.";
case Ezconf_write_temp_close_failed: case Ezconf_w_temp_close_failed:
return "Unable to close temp file"; return "Unable to close temp file";
case Ezconf_write_rename_failed: case Ezconf_w_rename_failed:
return "Unable to rename orca.conf.tmp to orca.conf"; return "Unable to rename orca.conf.tmp to orca.conf";
case Ezconf_write_line_too_long: case Ezconf_w_line_too_long:
return "Line in file is too long"; return "Line in file is too long";
case Ezconf_write_existing_read_error: case Ezconf_w_existing_read_error:
return "Error when reading existing configuration file"; return "Error when reading existing configuration file";
case Ezconf_write_unknown_error: case Ezconf_w_unknown_error:
break; break;
} }
return "Unknown"; return "Unknown";
@ -400,49 +400,48 @@ enum {
Confwflag_add_newline = 1 << 0, Confwflag_add_newline = 1 << 0,
}; };
void ezconf_write_start(Ezconf_write *ezcw, Confopt_w *optsbuffer, void ezconf_w_start(Ezconf_w *ezcw, Confopt_w *optsbuffer, size_t buffercap) {
size_t buffercap) { *ezcw = (Ezconf_w){.save = {0}}; // Weird to silence clang warning
*ezcw = (Ezconf_write){.save = {0}}; // Weird to silence clang warning
ezcw->opts = optsbuffer; ezcw->opts = optsbuffer;
ezcw->optscap = buffercap; ezcw->optscap = buffercap;
Ezconf_write_error error = Ezconf_write_unknown_error; Ezconf_w_error error = Ezconf_w_unknown_error;
switch (conf_save_start(&ezcw->save)) { switch (conf_save_start(&ezcw->save)) {
case Conf_save_start_ok: case Conf_save_start_ok:
error = Ezconf_write_ok; error = Ezconf_w_ok;
ezcw->file = ezcw->save.tempfile; ezcw->file = ezcw->save.tempfile;
break; break;
case Conf_save_start_alloc_failed: case Conf_save_start_alloc_failed:
error = Ezconf_write_oom; error = Ezconf_w_oom;
break; break;
case Conf_save_start_no_home: case Conf_save_start_no_home:
error = Ezconf_write_no_home; error = Ezconf_w_no_home;
break; break;
case Conf_save_start_mkdir_failed: case Conf_save_start_mkdir_failed:
error = Ezconf_write_mkdir_failed; error = Ezconf_w_mkdir_failed;
break; break;
case Conf_save_start_conf_dir_not_dir: case Conf_save_start_conf_dir_not_dir:
error = Ezconf_write_conf_dir_not_dir; error = Ezconf_w_conf_dir_not_dir;
break; break;
case Conf_save_start_old_temp_file_stuck: case Conf_save_start_old_temp_file_stuck:
error = Ezconf_write_old_temp_file_stuck; error = Ezconf_w_old_temp_file_stuck;
break; break;
case Conf_save_start_temp_file_perm_denied: case Conf_save_start_temp_file_perm_denied:
error = Ezconf_write_temp_file_perm_denied; error = Ezconf_w_temp_file_perm_denied;
break; break;
case Conf_save_start_temp_file_open_failed: case Conf_save_start_temp_file_open_failed:
error = Ezconf_write_temp_open_failed; error = Ezconf_w_temp_open_failed;
break; break;
} }
ezcw->error = error; ezcw->error = error;
} }
void ezconf_write_addopt(Ezconf_write *ezcw, char const *key, intptr_t id) { void ezconf_w_addopt(Ezconf_w *ezcw, char const *key, intptr_t id) {
size_t count = ezcw->optscount, cap = ezcw->optscap; size_t count = ezcw->optscount, cap = ezcw->optscap;
if (count == cap) if (count == cap)
return; return;
ezcw->opts[count] = (Confopt_w){.name = key, .id = id, .written = 0}; ezcw->opts[count] = (Confopt_w){.name = key, .id = id, .written = 0};
ezcw->optscount = count + 1; ezcw->optscount = count + 1;
} }
bool ezconf_write_step(Ezconf_write *ezcw) { bool ezconf_w_step(Ezconf_w *ezcw) {
U32 stateflags = ezcw->stateflags; U32 stateflags = ezcw->stateflags;
FILE *origfile = ezcw->save.origfile, *tempfile = ezcw->save.tempfile; FILE *origfile = ezcw->save.origfile, *tempfile = ezcw->save.tempfile;
Confopt_w *opts = ezcw->opts, *chosen = NULL; Confopt_w *opts = ezcw->opts, *chosen = NULL;
@ -496,10 +495,10 @@ bool ezconf_write_step(Ezconf_write *ezcw) {
case Conf_read_eof: case Conf_read_eof:
goto end_original; goto end_original;
case Conf_read_buffer_too_small: case Conf_read_buffer_too_small:
ezcw->error = Ezconf_write_line_too_long; ezcw->error = Ezconf_w_line_too_long;
goto cancel; goto cancel;
case Conf_read_io_error: case Conf_read_io_error:
ezcw->error = Ezconf_write_existing_read_error; ezcw->error = Ezconf_w_existing_read_error;
goto cancel; goto cancel;
} }
} }
@ -543,19 +542,19 @@ cancel:
ezcw->stateflags = 0; ezcw->stateflags = 0;
return false; return false;
commit:; commit:;
Ezconf_write_error error = Ezconf_write_unknown_error; Ezconf_w_error error = Ezconf_w_unknown_error;
switch (conf_save_commit(&ezcw->save)) { switch (conf_save_commit(&ezcw->save)) {
case Conf_save_commit_ok: case Conf_save_commit_ok:
error = Ezconf_write_ok; error = Ezconf_w_ok;
break; break;
case Conf_save_commit_temp_fsync_failed: case Conf_save_commit_temp_fsync_failed:
error = Ezconf_write_temp_fsync_failed; error = Ezconf_w_temp_fsync_failed;
break; break;
case Conf_save_commit_temp_close_failed: case Conf_save_commit_temp_close_failed:
error = Ezconf_write_temp_close_failed; error = Ezconf_w_temp_close_failed;
break; break;
case Conf_save_commit_rename_failed: case Conf_save_commit_rename_failed:
error = Ezconf_write_rename_failed; error = Ezconf_w_rename_failed;
break; break;
} }
ezcw->file = NULL; ezcw->file = NULL;

45
sysmisc.h

@ -90,23 +90,23 @@ bool ezconf_read_step(Ezconf_read *ezcr, char const *const *names,
Usz nameslen); Usz nameslen);
typedef enum { typedef enum {
Ezconf_write_ok = 0, Ezconf_w_ok = 0,
Ezconf_write_oom, Ezconf_w_oom,
Ezconf_write_no_home, Ezconf_w_no_home,
Ezconf_write_mkdir_failed, Ezconf_w_mkdir_failed,
Ezconf_write_conf_dir_not_dir, Ezconf_w_conf_dir_not_dir,
Ezconf_write_old_temp_file_stuck, Ezconf_w_old_temp_file_stuck,
Ezconf_write_temp_file_perm_denied, Ezconf_w_temp_file_perm_denied,
Ezconf_write_temp_open_failed, Ezconf_w_temp_open_failed,
Ezconf_write_temp_fsync_failed, Ezconf_w_temp_fsync_failed,
Ezconf_write_temp_close_failed, Ezconf_w_temp_close_failed,
Ezconf_write_rename_failed, Ezconf_w_rename_failed,
Ezconf_write_line_too_long, Ezconf_w_line_too_long,
Ezconf_write_existing_read_error, Ezconf_w_existing_read_error,
Ezconf_write_unknown_error, Ezconf_w_unknown_error,
} Ezconf_write_error; } Ezconf_w_error;
char const *ezconf_write_error_string(Ezconf_write_error error); char const *ezconf_w_error_string(Ezconf_w_error error);
typedef struct { typedef struct {
char const *name; char const *name;
@ -120,11 +120,10 @@ typedef struct {
size_t optscount, optscap; size_t optscount, optscap;
intptr_t optid; intptr_t optid;
FILE *file; FILE *file;
Ezconf_write_error error; Ezconf_w_error error;
U32 stateflags; U32 stateflags;
} Ezconf_write; } Ezconf_w;
void ezconf_write_start(Ezconf_write *ezcw, Confopt_w *optsbuffer, void ezconf_w_start(Ezconf_w *ezcw, Confopt_w *optsbuffer, size_t buffercap);
size_t buffercap); void ezconf_w_addopt(Ezconf_w *ezcw, char const *key, intptr_t id);
void ezconf_write_addopt(Ezconf_write *ezcw, char const *key, intptr_t id); bool ezconf_w_step(Ezconf_w *ezcw);
bool ezconf_write_step(Ezconf_write *ezcw);

12
tui_main.c

@ -2399,8 +2399,8 @@ void save_prefs_with_error_message(Midi_mode const *midi_mode, int softmargin_y,
int softmargin_x, int softmargin_x,
bool softmargins_touched_by_user) { bool softmargins_touched_by_user) {
Confopt_w optsbuff[Confoptslen]; Confopt_w optsbuff[Confoptslen];
Ezconf_write ez; Ezconf_w ez;
ezconf_write_start(&ez, optsbuff, ORCA_ARRAY_COUNTOF(optsbuff)); ezconf_w_start(&ez, optsbuff, ORCA_ARRAY_COUNTOF(optsbuff));
oso *midi_output_device_name = NULL; oso *midi_output_device_name = NULL;
switch (midi_mode->any.type) { switch (midi_mode->any.type) {
case Midi_mode_type_null: case Midi_mode_type_null:
@ -2417,15 +2417,15 @@ void save_prefs_with_error_message(Midi_mode const *midi_mode, int softmargin_y,
osowipe(&midi_output_device_name); osowipe(&midi_output_device_name);
break; break;
} }
ezconf_write_addopt(&ez, confopts[Confopt_portmidi_output_device], ezconf_w_addopt(&ez, confopts[Confopt_portmidi_output_device],
Confopt_portmidi_output_device); Confopt_portmidi_output_device);
} break; } break;
#endif #endif
} }
if (softmargins_touched_by_user) { if (softmargins_touched_by_user) {
ezconf_write_addopt(&ez, confopts[Confopt_margins], Confopt_margins); ezconf_w_addopt(&ez, confopts[Confopt_margins], Confopt_margins);
} }
while (ezconf_write_step(&ez)) { while (ezconf_w_step(&ez)) {
switch (ez.optid) { switch (ez.optid) {
#ifdef FEAT_PORTMIDI #ifdef FEAT_PORTMIDI
case Confopt_portmidi_output_device: case Confopt_portmidi_output_device:
@ -2439,7 +2439,7 @@ void save_prefs_with_error_message(Midi_mode const *midi_mode, int softmargin_y,
} }
osofree(midi_output_device_name); osofree(midi_output_device_name);
if (ez.error) { if (ez.error) {
char const *msg = ezconf_write_error_string(ez.error); char const *msg = ezconf_w_error_string(ez.error);
qmsg_printf_push("Config Error", qmsg_printf_push("Config Error",
"Error when writing configuration file:\n%s", msg); "Error when writing configuration file:\n%s", msg);
} }

Loading…
Cancel
Save