From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Eli Zaretskii" To: kettenis@wins.uva.nl Cc: gdb@sources.redhat.com Subject: Re: basename() troubles Date: Sun, 13 May 2001 08:41:00 -0000 Message-id: <7263-Sun13May2001184151+0300-eliz@is.elta.co.il> References: <200105131359.f4DDxh301103@delius.kettenis.local> X-SW-Source: 2001-05/msg00248.html > Date: Sun, 13 May 2001 15:59:43 +0200 > From: Mark Kettenis > > 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. Sorry, I failed to consider this possibility. > There are basically two ways to solve this > problem: > > * Use strcmp() to compare the strings. You mean FILENAME_CMP ;-) > * 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? I do agree that using libiberty's version is a better solution. > Another question is, wheter we should replace the other basename() calls with > lbasename() as well. I think this is only justified if basename's return value is used as in symtab.c; I think such cases are rare. I have a slightly outdated source tree, and I can only see one other case like that: source.c:open_source_file (does this mean it didn't work on FreeBSD as well? that code is quite old, I think).