basename() troubles

Mark Kettenis
2001-05-13T06:59:00Z

Eli's latest patch to symtab.c:

2001-05-06 Eli Zaretskii <eliz@is.elta.co.il>

* symtab.c (lookup_symtab_1, lookup_partial_symtab): Use basename
instead of non-portable search for `/'. Use FILENAME_CMP instead
of STREQ, to account for case-insensitive filesystems.
(top-level): #include "filenames.h".

uses the following bit of code:

if (basename (name) == name)
...

in a couple of places. Unfortunately the FreeBSD basename() always
returns a pointer to internal static storage space. Therefore the
check will always fail. There are basically two ways to solve this
problem:

* Use strcmp() to compare the strings.

* Use lbasename() from libiberty which has well defined semantics.

The latter is probably a bit more efficient, and has the additional
advantage of removing our dependence on whatever broken basename()
implementation the host supplies. Do people agree?

Another question is, wheter we should replace the other basename() calls with
lbasename() as well.

Mark