MINOR: global: export a way to list build options
authorWilly Tarreau <w@1wt.eu>
Tue, 2 Jan 2024 09:56:05 +0000 (10:56 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 5 Jan 2024 18:07:51 +0000 (19:07 +0100)
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.

(cherry picked from commit afba58f21e7c938b793858180b3bd8d8fd6aef5d)
Signed-off-by: Willy Tarreau <w@1wt.eu>

include/haproxy/global.h
src/haproxy.c

index fd32109..2e7fa6b 100644 (file)
@@ -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) \
index 0807e87..63058b2 100644 (file)
@@ -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 <curr> is NULL, or the next one when
+ * <curr> 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');