From afba58f21e7c938b793858180b3bd8d8fd6aef5d Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 2 Jan 2024 10:56:05 +0100 Subject: [PATCH] MINOR: global: export a way to list build options The new function hap_get_next_build_opt() will iterate over the list of build options. This will be used for debugging, so that the build options can be retrieved from the CLI. --- include/haproxy/global.h | 1 + src/haproxy.c | 31 +++++++++++++++++++++++++++---- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/include/haproxy/global.h b/include/haproxy/global.h index fd32109c9..2e7fa6bff 100644 --- a/include/haproxy/global.h +++ b/include/haproxy/global.h @@ -82,6 +82,7 @@ extern unsigned int experimental_directives_allowed; struct cfg_keyword; int check_kw_experimental(struct cfg_keyword *kw, const char *file, int linenum, char **errmsg); +const char **hap_get_next_build_opt(const char **curr); /* simplified way to declare static build options in a file */ #define REGISTER_BUILD_OPTS(str) \ diff --git a/src/haproxy.c b/src/haproxy.c index e18632554..48ab2b7bd 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -318,6 +318,30 @@ void hap_register_build_opts(const char *str, int must_free) LIST_APPEND(&build_opts_list, &b->list); } +/* returns the first build option when is NULL, or the next one when + * is passed the last returned value. NULL when there is no more entries + * in the list. Otherwise the returned pointer is &opt->str so the caller can + * print it as *ret. + */ +const char **hap_get_next_build_opt(const char **curr) +{ + struct build_opts_str *head, *start; + + head = container_of(&build_opts_list, struct build_opts_str, list); + + if (curr) + start = container_of(curr, struct build_opts_str, str); + else + start = head; + + start = container_of(start->list.n, struct build_opts_str, list); + + if (start == head) + return NULL; + + return &start->str; +} + /* used to make a new feature appear in the build_features list at boot time. * The feature must be in the format "XXX" without the leading "+" which will * be automatically appended. @@ -533,7 +557,7 @@ void display_version() static void display_build_opts() { - struct build_opts_str *item; + const char **opt; printf("Build options :" #ifdef BUILD_TARGET @@ -560,9 +584,8 @@ static void display_build_opts() "\n\n", build_features, BUFSIZE, MAXREWRITE, MAX_POLL_EVENTS); - list_for_each_entry(item, &build_opts_list, list) { - puts(item->str); - } + for (opt = NULL; (opt = hap_get_next_build_opt(opt)); puts(*opt)) + ; putchar('\n'); -- 2.47.3