Make load_include_configs void. Fix some cases where WD would not be restored.

This commit is contained in:
Connor E 2019-02-24 04:39:08 +00:00 committed by Brian Ashworth
parent 713883f04c
commit d4b1e71b91
3 changed files with 17 additions and 29 deletions

View file

@ -513,7 +513,7 @@ bool load_main_config(const char *path, bool is_active, bool validating);
/**
* Loads an included config. Can only be used after load_main_config.
*/
bool load_include_configs(const char *path, struct sway_config *config,
void load_include_configs(const char *path, struct sway_config *config,
struct swaynag_instance *swaynag);
/**

View file

@ -7,11 +7,8 @@ struct cmd_results *cmd_include(int argc, char **argv) {
return error;
}
if (!load_include_configs(argv[0], config,
&config->swaynag_config_errors)) {
return cmd_results_new(CMD_INVALID,
"Failed to include sub configuration file: %s", argv[0]);
}
// We don't care if the included config(s) fails to load.
load_include_configs(argv[0], config, &config->swaynag_config_errors);
return cmd_results_new(CMD_SUCCESS, NULL);
}

View file

@ -549,43 +549,34 @@ static bool load_include_config(const char *path, const char *parent_dir,
return true;
}
bool load_include_configs(const char *path, struct sway_config *config,
void load_include_configs(const char *path, struct sway_config *config,
struct swaynag_instance *swaynag) {
char *wd = getcwd(NULL, 0);
char *parent_path = strdup(config->current_config_path);
const char *parent_dir = dirname(parent_path);
if (chdir(parent_dir) < 0) {
free(parent_path);
free(wd);
return false;
sway_log(SWAY_ERROR, "failed to change working directory");
goto cleanup;
}
wordexp_t p;
if (wordexp(path, &p, 0) != 0) {
free(parent_path);
free(wd);
return false;
}
if (wordexp(path, &p, 0) == 0) {
char **w = p.we_wordv;
size_t i;
for (i = 0; i < p.we_wordc; ++i) {
load_include_config(w[i], parent_dir, config, swaynag);
}
free(parent_path);
wordfree(&p);
// restore wd
if (chdir(wd) < 0) {
free(wd);
sway_log(SWAY_ERROR, "failed to restore working directory");
return false;
}
// Attempt to restore working directory before returning.
if (chdir(wd) < 0) {
sway_log(SWAY_ERROR, "failed to change working directory");
}
cleanup:
free(parent_path);
free(wd);
return true;
}
void run_deferred_commands(void) {