From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark Kettenis To: gdb@sources.redhat.com Subject: basename() troubles Date: Sun, 13 May 2001 06:59:00 -0000 Message-id: <200105131359.f4DDxh301103@delius.kettenis.local> X-SW-Source: 2001-05/msg00247.html Eli's latest patch to symtab.c: 2001-05-06 Eli Zaretskii * 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