Message ID | 0fd3c9f3c605e6cba33504213c9df287817ade04.1722244708.git.tony.ambardar@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | c0247800ee7da5bc067b2916cf2722f755072307 |
Headers | show |
Series | selftests/bpf: Improve libc portability / musl support (part 2) | expand |
Hello: This series was applied to bpf/bpf-next.git (master) by Andrii Nakryiko <andrii@kernel.org>: On Mon, 29 Jul 2024 02:24:17 -0700 you wrote: > 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. > > [...] Here is the summary with links: - [bpf-next,v2,1/8] selftests/bpf: Use portable POSIX basename() https://git.kernel.org/bpf/bpf-next/c/c0247800ee7d - [bpf-next,v2,2/8] selftests/bpf: Fix arg parsing in veristat, test_progs https://git.kernel.org/bpf/bpf-next/c/03bfcda1fbc3 - [bpf-next,v2,3/8] selftests/bpf: Fix error compiling test_lru_map.c https://git.kernel.org/bpf/bpf-next/c/cacf2a5a78cd - [bpf-next,v2,4/8] selftests/bpf: Fix C++ compile error from missing _Bool type https://git.kernel.org/bpf/bpf-next/c/aa95073fd290 - [bpf-next,v2,5/8] selftests/bpf: Fix redefinition errors compiling lwt_reroute.c https://git.kernel.org/bpf/bpf-next/c/16b795cc5952 - [bpf-next,v2,6/8] selftests/bpf: Fix compile if backtrace support missing in libc https://git.kernel.org/bpf/bpf-next/c/c9a83e76b5a9 - [bpf-next,v2,7/8] selftests/bpf: Fix using stdout, stderr as struct field names https://git.kernel.org/bpf/bpf-next/c/06eeca1217a8 - [bpf-next,v2,8/8] selftests/bpf: Fix error compiling tc_redirect.c with musl libc https://git.kernel.org/bpf/bpf-next/c/21c5f4f55da7 You are awesome, thank you!
diff --git a/tools/testing/selftests/bpf/veristat.c b/tools/testing/selftests/bpf/veristat.c index b2854238d4a0..11ec1190d582 100644 --- a/tools/testing/selftests/bpf/veristat.c +++ b/tools/testing/selftests/bpf/veristat.c @@ -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 @@ static void fixup_obj(struct bpf_object *obj, struct bpf_program *prog, const ch 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); diff --git a/tools/testing/selftests/bpf/xskxceiver.c b/tools/testing/selftests/bpf/xskxceiver.c index 8144fd145237..92af633faea8 100644 --- a/tools/testing/selftests/bpf/xskxceiver.c +++ b/tools/testing/selftests/bpf/xskxceiver.c @@ -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>
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> --- tools/testing/selftests/bpf/veristat.c | 8 +++++--- tools/testing/selftests/bpf/xskxceiver.c | 1 + 2 files changed, 6 insertions(+), 3 deletions(-)