version 1.38, 2019/05/23 11:13:30 |
version 1.39, 2019/05/28 11:46:30 |
|
|
.name = "source-file", |
.name = "source-file", |
.alias = "source", |
.alias = "source", |
|
|
.args = { "nq", 1, 1 }, |
.args = { "nq", 1, -1 }, |
.usage = "[-nq] path", |
.usage = "[-nq] path ...", |
|
|
.flags = 0, |
.flags = 0, |
.exec = cmd_source_file_exec |
.exec = cmd_source_file_exec |
|
|
struct client *c = item->client; |
struct client *c = item->client; |
struct cmdq_item *new_item, *after; |
struct cmdq_item *new_item, *after; |
enum cmd_retval retval; |
enum cmd_retval retval; |
char *pattern, *tmp; |
char *pattern, *cwd; |
const char *path = args->argv[0]; |
const char *path, *error; |
glob_t g; |
glob_t g; |
u_int i; |
int i; |
|
u_int j; |
|
|
if (args_has(args, 'q')) |
if (args_has(args, 'q')) |
flags |= CMD_PARSE_QUIET; |
flags |= CMD_PARSE_QUIET; |
if (args_has(args, 'n')) |
if (args_has(args, 'n')) |
flags |= CMD_PARSE_PARSEONLY; |
flags |= CMD_PARSE_PARSEONLY; |
|
utf8_stravis(&cwd, server_client_get_cwd(c, NULL), VIS_GLOB); |
|
|
if (*path == '/') |
|
pattern = xstrdup(path); |
|
else { |
|
utf8_stravis(&tmp, server_client_get_cwd(c, NULL), VIS_GLOB); |
|
xasprintf(&pattern, "%s/%s", tmp, path); |
|
free(tmp); |
|
} |
|
log_debug("%s: %s", __func__, pattern); |
|
|
|
retval = CMD_RETURN_NORMAL; |
retval = CMD_RETURN_NORMAL; |
if (glob(pattern, 0, NULL, &g) != 0) { |
for (i = 0; i < args->argc; i++) { |
if (errno != ENOENT || (~flags & CMD_PARSE_QUIET)) { |
path = args->argv[i]; |
cmdq_error(item, "%s: %s", path, strerror(errno)); |
if (*path == '/') |
retval = CMD_RETURN_ERROR; |
pattern = xstrdup(path); |
|
else |
|
xasprintf(&pattern, "%s/%s", cwd, path); |
|
log_debug("%s: %s", __func__, pattern); |
|
|
|
if (glob(pattern, 0, NULL, &g) != 0) { |
|
error = strerror(errno); |
|
if (errno != ENOENT || (~flags & CMD_PARSE_QUIET)) { |
|
cmdq_error(item, "%s: %s", path, error); |
|
retval = CMD_RETURN_ERROR; |
|
} |
|
free(pattern); |
|
continue; |
} |
} |
free(pattern); |
free(pattern); |
return (retval); |
|
} |
|
free(pattern); |
|
|
|
after = item; |
after = item; |
for (i = 0; i < (u_int)g.gl_pathc; i++) { |
for (j = 0; j < g.gl_pathc; j++) { |
if (load_cfg(g.gl_pathv[i], c, after, flags, &new_item) < 0) |
path = g.gl_pathv[j]; |
retval = CMD_RETURN_ERROR; |
if (load_cfg(path, c, after, flags, &new_item) < 0) |
else if (new_item != NULL) |
retval = CMD_RETURN_ERROR; |
after = new_item; |
else if (new_item != NULL) |
|
after = new_item; |
|
} |
|
globfree(&g); |
} |
} |
if (cfg_finished) { |
if (cfg_finished) { |
new_item = cmdq_get_callback(cmd_source_file_done, NULL); |
new_item = cmdq_get_callback(cmd_source_file_done, NULL); |
cmdq_insert_after(item, new_item); |
cmdq_insert_after(item, new_item); |
} |
} |
|
|
globfree(&g); |
free(cwd); |
return (retval); |
return (retval); |
} |
} |
|
|