mirror of
https://github.com/tmate-io/tmate.git
synced 2025-02-02 19:39:32 +01:00
load_cfg can actually use the same context now they are reference counted.
This commit is contained in:
parent
d1e6ce2672
commit
0ff9275ad7
30
cfg.c
30
cfg.c
@ -73,14 +73,13 @@ cfg_add_cause(struct causelist *causes, const char *fmt, ...)
|
|||||||
* causes. Note that causes must be initialised by the caller!
|
* causes. Note that causes must be initialised by the caller!
|
||||||
*/
|
*/
|
||||||
enum cmd_retval
|
enum cmd_retval
|
||||||
load_cfg(const char *path, struct cmd_ctx *ctxin, struct causelist *causes)
|
load_cfg(const char *path, struct cmd_ctx *ctx, struct causelist *causes)
|
||||||
{
|
{
|
||||||
FILE *f;
|
FILE *f;
|
||||||
u_int n;
|
u_int n;
|
||||||
char *buf, *copy, *line, *cause;
|
char *buf, *copy, *line, *cause;
|
||||||
size_t len, oldlen;
|
size_t len, oldlen;
|
||||||
struct cmd_list *cmdlist;
|
struct cmd_list *cmdlist;
|
||||||
struct cmd_ctx ctx;
|
|
||||||
enum cmd_retval retval;
|
enum cmd_retval retval;
|
||||||
|
|
||||||
if ((f = fopen(path, "rb")) == NULL) {
|
if ((f = fopen(path, "rb")) == NULL) {
|
||||||
@ -90,6 +89,15 @@ load_cfg(const char *path, struct cmd_ctx *ctxin, struct causelist *causes)
|
|||||||
|
|
||||||
cfg_references++;
|
cfg_references++;
|
||||||
|
|
||||||
|
if (ctx != NULL)
|
||||||
|
cmd_ref_ctx(ctx);
|
||||||
|
else {
|
||||||
|
ctx = cmd_get_ctx();
|
||||||
|
ctx->error = cfg_error;
|
||||||
|
ctx->print = cfg_print;
|
||||||
|
ctx->info = cfg_print;
|
||||||
|
}
|
||||||
|
|
||||||
n = 0;
|
n = 0;
|
||||||
line = NULL;
|
line = NULL;
|
||||||
retval = CMD_RETURN_NORMAL;
|
retval = CMD_RETURN_NORMAL;
|
||||||
@ -146,22 +154,8 @@ load_cfg(const char *path, struct cmd_ctx *ctxin, struct causelist *causes)
|
|||||||
if (cmdlist == NULL)
|
if (cmdlist == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (ctxin == NULL) {
|
|
||||||
ctx.msgdata = NULL;
|
|
||||||
ctx.curclient = NULL;
|
|
||||||
ctx.cmdclient = NULL;
|
|
||||||
} else {
|
|
||||||
ctx.msgdata = ctxin->msgdata;
|
|
||||||
ctx.curclient = ctxin->curclient;
|
|
||||||
ctx.cmdclient = ctxin->cmdclient;
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx.error = cfg_error;
|
|
||||||
ctx.print = cfg_print;
|
|
||||||
ctx.info = cfg_print;
|
|
||||||
|
|
||||||
cfg_cause = NULL;
|
cfg_cause = NULL;
|
||||||
switch (cmd_list_exec(cmdlist, &ctx)) {
|
switch (cmd_list_exec(cmdlist, ctx)) {
|
||||||
case CMD_RETURN_YIELD:
|
case CMD_RETURN_YIELD:
|
||||||
if (retval != CMD_RETURN_ATTACH)
|
if (retval != CMD_RETURN_ATTACH)
|
||||||
retval = CMD_RETURN_YIELD;
|
retval = CMD_RETURN_YIELD;
|
||||||
@ -186,6 +180,8 @@ load_cfg(const char *path, struct cmd_ctx *ctxin, struct causelist *causes)
|
|||||||
}
|
}
|
||||||
fclose(f);
|
fclose(f);
|
||||||
|
|
||||||
|
cmd_free_ctx(ctx);
|
||||||
|
|
||||||
cfg_references--;
|
cfg_references--;
|
||||||
|
|
||||||
return (retval);
|
return (retval);
|
||||||
|
Loading…
Reference in New Issue
Block a user