From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cagney To: Fergus Henderson Cc: gcc-patches@gcc.gnu.org, gdb-patches@sources.redhat.com, binutils@sources.redhat.com Subject: Re: [rfa] Change lbasename() to return ``const char *'' Date: Wed, 08 Aug 2001 06:35:00 -0000 Message-id: <3B71401D.2010409@cygnus.com> References: <3B709080.7040508@cygnus.com> <20010808220910.A8080@murlibobo.cs.mu.OZ.AU> X-SW-Source: 2001-08/msg00080.html > On 07-Aug-2001, Andrew Cagney wrote: > >> The attached patch changes the liberty function lbasename() so that it >> returns ``const char *''. > > > Why? That will lead to the need for casts in the callers. Why not just > put the cast in lbasename(), like is done for strchr() in the C standard? (This was discussed once before as an RFC :-). Why not? At present lbasename() throws away information. The thing to remember is that lbasename() is ment to be kind of like basename() and other (botched?) ISO/POSIX library funtions, only useful :-) If someone really wants to blat the returned buffer let that be made _explicit_ at the callers end. Better still, use: xstrdup (lbasename (...)) which gives well defined semantics. > lbasename() is const-polymorphic, i.e. the return value should be > a const pointer iff the argument is a const pointer. > C doesn't have any good way to express the type of const-polymorphic routines. > Unless you duplicate the code in two functions, one for const pointers and one > for non-const pointers, some casting will be required. I've been through all the callers and I didn't find a single places where a cast was needed. enjoy, Andrew