=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cfg.c,v retrieving revision 1.32 retrieving revision 1.33 diff -u -r1.32 -r1.33 --- src/usr.bin/tmux/cfg.c 2014/06/25 19:17:27 1.32 +++ src/usr.bin/tmux/cfg.c 2014/10/27 22:23:47 1.33 @@ -1,4 +1,4 @@ -/* $OpenBSD: cfg.c,v 1.32 2014/06/25 19:17:27 tobias Exp $ */ +/* $OpenBSD: cfg.c,v 1.33 2014/10/27 22:23:47 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott @@ -30,7 +30,7 @@ struct cmd_q *cfg_cmd_q; int cfg_finished; int cfg_references; -struct causelist cfg_causes; +ARRAY_DECL (, char *) cfg_causes = ARRAY_INITIALIZER; struct client *cfg_client; int @@ -40,7 +40,7 @@ char delim[3] = { '\\', '\\', '\0' }; u_int found; size_t line = 0; - char *buf, *cause1, *msg, *p; + char *buf, *cause1, *p; struct cmd_list *cmdlist; log_debug("loading %s", path); @@ -67,8 +67,7 @@ free(buf); if (cause1 == NULL) continue; - xasprintf(&msg, "%s:%zu: %s", path, line, cause1); - ARRAY_ADD(&cfg_causes, msg); + cfg_add_cause("%s:%zu: %s", path, line, cause1); free(cause1); continue; } @@ -111,6 +110,33 @@ cfg_client->references--; cfg_client = NULL; } +} + +void +cfg_add_cause(const char* fmt, ...) +{ + va_list ap; + char* msg; + + va_start(ap, fmt); + xvasprintf(&msg, fmt, ap); + va_end (ap); + + ARRAY_ADD(&cfg_causes, msg); +} + +void +cfg_print_causes(struct cmd_q *cmdq) +{ + char *cause; + u_int i; + + for (i = 0; i < ARRAY_LENGTH(&cfg_causes); i++) { + cause = ARRAY_ITEM(&cfg_causes, i); + cmdq_print(cmdq, "%s", cause); + free(cause); + } + ARRAY_FREE(&cfg_causes); } void