]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: trace: parse level in a function
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Wed, 22 Nov 2023 16:25:52 +0000 (17:25 +0100)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Mon, 27 Nov 2023 16:11:14 +0000 (17:11 +0100)
Extract conversion of level string argument to integer value in a
dedicated internal function trace_parse_level(). This function is used
to for CLI trace parsing and will also be useful for "-dt" process
argument.

src/trace.c

index da27a8bf9e8dd97fb9c0b0ec813f140445a69c32..2225030240279bc65fce3105bfb08316aef08680 100644 (file)
@@ -347,6 +347,28 @@ const struct trace_event *trace_find_event(const struct trace_event *ev, const c
        return NULL;
 }
 
+/* Returns the level value or a negative error code. */
+static int trace_parse_level(const char *level)
+{
+       if (!level)
+               return -1;
+
+       if (strcmp(level, "error") == 0)
+               return TRACE_LEVEL_ERROR;
+       else if (strcmp(level, "user") == 0)
+               return TRACE_LEVEL_USER;
+       else if (strcmp(level, "proto") == 0)
+               return TRACE_LEVEL_PROTO;
+       else if (strcmp(level, "state") == 0)
+               return TRACE_LEVEL_STATE;
+       else if (strcmp(level, "data") == 0)
+               return TRACE_LEVEL_DATA;
+       else if (strcmp(level, "developer") == 0)
+               return TRACE_LEVEL_DEVELOPER;
+       else
+               return -1;
+}
+
 /* Parse a "trace" statement. Returns a severity as a LOG_* level and a status
  * message that may be delivered to the user, in <msg>. The message will be
  * nulled first and msg must be an allocated pointer. A null status message output
@@ -506,6 +528,7 @@ static int trace_parse_statement(char **args, char **msg)
        }
        else if (strcmp(args[2], "level") == 0) {
                const char *name = args[3];
+               int level;
 
                if (!*name) {
                        chunk_printf(&trash, "Supported trace levels for source %s:\n", src->name.ptr);
@@ -526,22 +549,13 @@ static int trace_parse_statement(char **args, char **msg)
                        return LOG_WARNING;
                }
 
-               if (strcmp(name, "error") == 0)
-                       HA_ATOMIC_STORE(&src->level, TRACE_LEVEL_ERROR);
-               else if (strcmp(name, "user") == 0)
-                       HA_ATOMIC_STORE(&src->level, TRACE_LEVEL_USER);
-               else if (strcmp(name, "proto") == 0)
-                       HA_ATOMIC_STORE(&src->level, TRACE_LEVEL_PROTO);
-               else if (strcmp(name, "state") == 0)
-                       HA_ATOMIC_STORE(&src->level, TRACE_LEVEL_STATE);
-               else if (strcmp(name, "data") == 0)
-                       HA_ATOMIC_STORE(&src->level, TRACE_LEVEL_DATA);
-               else if (strcmp(name, "developer") == 0)
-                       HA_ATOMIC_STORE(&src->level, TRACE_LEVEL_DEVELOPER);
-               else {
+               level = trace_parse_level(name);
+               if (level < 0) {
                        memprintf(msg, "No such trace level '%s'", name);
                        return LOG_ERR;
                }
+
+               HA_ATOMIC_STORE(&src->level, level);
        }
        else if (strcmp(args[2], "lock") == 0) {
                const char *name = args[3];