diff options
| author | Khem Raj <[email protected]> | 2023-12-10 12:20:33 -0800 |
|---|---|---|
| committer | Mark Wielaard <[email protected]> | 2023-12-21 01:45:05 +0100 |
| commit | a2194f6b305bf0d0b9dd49dccd0a5c21994c8eea (patch) | |
| tree | b53d3887a8036334f0ee8f355448b82a415fa42e /lib | |
| parent | 744e3ea84d756006c95a8c07382cfdbef5a3bf58 (diff) | |
Add helper function for basename
musl does not provide GNU version of basename and lately have removed
the definiton from string.h [1] which exposes this problem. It can be
made to work by providing a local implementation of basename which
implements the GNU basename behavior, this makes it work across C
libraries which have POSIX implementation only.
[1] https://git.musl-libc.org/cgit/musl/commit/?id=725e17ed6dff4d0cd22487bb64470881e86a92e7
* lib/system.h (xbasename): New static inline functions.
Poison basename.
* libdw/dwarf_getsrc_file.c (dwarf_getsrc_file): Use xbasename.
* libdwfl/core-file.c (dwfl_core_file_report): Likewise.
* libdwfl/dwfl_module_getsrc_file.c (dwfl_module_getsrc_file):
Likewise.
* libdwfl/dwfl_segment_report_module.c (dwfl_segment_report_module):
Likewise.
* libdwfl/find-debuginfo.c (find_debuginfo_in_path): Likewise.
* libdwfl/link_map.c (report_r_debug): Likewise.
* libdwfl/linux-kernel-modules.c (try_kernel_name): Likewise.
* src/addr2line.c (print_dwarf_function): Likewise.
(print_src): Likewise.
* src/ar.c (do_oper_insert): Likewise.
And cast away const in entry.key assignment.
* src/nm.c (show_symbols): Use xbasename.
* src/stack.c (module_callback): Likewise.
* src/strip.c (handle_elf): Likewise.
* tests/show-die-info.c: Include system.h.
(dwarf_tag_string): Use xbasename.
* tests/varlocs.c: Likewise.
* debuginfod/debuginfod.cxx: Move include system.h to the end.
(register_file_name): Rename basename to filename.
Signed-off-by: Khem Raj <[email protected]>
Signed-off-by: Mark Wielaard <[email protected]>
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/system.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/system.h b/lib/system.h index 1c914efc..0db12d99 100644 --- a/lib/system.h +++ b/lib/system.h @@ -1,6 +1,7 @@ /* Declarations for common convenience functions. Copyright (C) 2006-2011 Red Hat, Inc. Copyright (C) 2022 Mark J. Wielaard <[email protected]> + Copyright (C) 2023 Khem Raj. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -211,4 +212,17 @@ extern char *__cxa_demangle (const char *mangled_name, char *output_buffer, extern int never_defined_just_used_for_checking[(expr) ? 1 : -1] \ __attribute__ ((unused)) +/* We really want a basename implementation that doesn't modify the + input argument. Normally you get that from string.h with _GNU_SOURCE + define. But some libc implementations don't define it and other + define it, but provide an implementation that still modifies the + argument. So define our own and poison a bare basename symbol. */ +static inline const char * +xbasename(const char *s) +{ + const char *p = strrchr(s, '/'); + return p ? p+1 : s; +} +#pragma GCC poison basename + #endif /* system.h */ |
