Skip to content

Commit

Permalink
Make load_include_configs void. Fix some cases where WD would not be …
Browse files Browse the repository at this point in the history
…restored.
  • Loading branch information
cedws authored and RedSoxFan committed Feb 24, 2019
1 parent 713883f commit d4b1e71
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 29 deletions.
2 changes: 1 addition & 1 deletion include/sway/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);

/**
Expand Down
7 changes: 2 additions & 5 deletions sway/commands/include.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
37 changes: 14 additions & 23 deletions sway/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
wordfree(&p);
}

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
// Attempt to restore working directory before returning.
if (chdir(wd) < 0) {
free(wd);
sway_log(SWAY_ERROR, "failed to restore working directory");
return false;
sway_log(SWAY_ERROR, "failed to change working directory");
}

cleanup:
free(parent_path);
free(wd);
return true;
}

void run_deferred_commands(void) {
Expand Down

0 comments on commit d4b1e71

Please sign in to comment.