]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
selftests/bpf: Use portable POSIX basename()
authorTony Ambardar <tony.ambardar@gmail.com>
Mon, 29 Jul 2024 09:24:17 +0000 (02:24 -0700)
committerAndrii Nakryiko <andrii@kernel.org>
Tue, 30 Jul 2024 20:45:44 +0000 (13:45 -0700)
Use the POSIX version of basename() to allow compilation against non-gnu
libc (e.g. musl). Include <libgen.h> ahead of <string.h> to enable using
functions from the latter while preferring POSIX over GNU basename().

In veristat.c, rely on strdupa() to avoid basename() altering the passed
"const char" argument. This is not needed in xskxceiver.c since the arg
is mutable and the program exits immediately after usage.

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/0fd3c9f3c605e6cba33504213c9df287817ade04.1722244708.git.tony.ambardar@gmail.com
tools/testing/selftests/bpf/veristat.c
tools/testing/selftests/bpf/xskxceiver.c

index b2854238d4a0eba35606b0b60a8298f03384f767..11ec1190d5827183c10aa48e0f05c0296084e407 100644 (file)
@@ -2,6 +2,7 @@
 /* Copyright (c) 2022 Meta Platforms, Inc. and affiliates. */
 #define _GNU_SOURCE
 #include <argp.h>
+#include <libgen.h>
 #include <string.h>
 #include <stdlib.h>
 #include <sched.h>
@@ -988,8 +989,8 @@ skip_freplace_fixup:
 
 static int process_prog(const char *filename, struct bpf_object *obj, struct bpf_program *prog)
 {
+       const char *base_filename = basename(strdupa(filename));
        const char *prog_name = bpf_program__name(prog);
-       const char *base_filename = basename(filename);
        char *buf;
        int buf_sz, log_level;
        struct verif_stats *stats;
@@ -1056,13 +1057,14 @@ static int process_prog(const char *filename, struct bpf_object *obj, struct bpf
 
 static int process_obj(const char *filename)
 {
+       const char *base_filename = basename(strdupa(filename));
        struct bpf_object *obj = NULL, *tobj;
        struct bpf_program *prog, *tprog, *lprog;
        libbpf_print_fn_t old_libbpf_print_fn;
        LIBBPF_OPTS(bpf_object_open_opts, opts);
        int err = 0, prog_cnt = 0;
 
-       if (!should_process_file_prog(basename(filename), NULL)) {
+       if (!should_process_file_prog(base_filename, NULL)) {
                if (env.verbose)
                        printf("Skipping '%s' due to filters...\n", filename);
                env.files_skipped++;
@@ -1076,7 +1078,7 @@ static int process_obj(const char *filename)
        }
 
        if (!env.quiet && env.out_fmt == RESFMT_TABLE)
-               printf("Processing '%s'...\n", basename(filename));
+               printf("Processing '%s'...\n", base_filename);
 
        old_libbpf_print_fn = libbpf_set_print(libbpf_print_fn);
        obj = bpf_object__open_file(filename, &opts);
index 8144fd1452375211f7f1862233dd067efc265eee..92af633faea8fbebb667a53c1ff7d617315b56c4 100644 (file)
@@ -90,6 +90,7 @@
 #include <signal.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <libgen.h>
 #include <string.h>
 #include <stddef.h>
 #include <sys/mman.h>