This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: [rfa] Change lbasename() to return ``const char *''


> On 07-Aug-2001, Andrew Cagney <ac131313@cygnus.com> 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]