tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: constify dirname/basename [was: CVS commit: src]



On Wed, Apr 23, 2008 at 03:17:37PM +0100, Iain Hibbert wrote:

> Simon Burge writes:
> > Iain Hibbert wrote:
> > > constify dirname(3) and basename(3)
> >
> > Does this change have an SUSv3/Posix issues?  SUSv3 says that both
> > functions "may modify the string pointed to by path" (the argument to
> those functions). While our 
> > implementations don't do that, are we OK by the standards to now declare 
> > those functions as having a const argument?
> 
> Its a good question. I think it does not contradict the standard, in
> that you can still pass a modifiable string but it allows you also to
> pass a const string which was problematic before. (how prevalent was
> const when SUS/Posix was published?)

There's more function pages that don't mention "const" than do, but it's
certainly common: 

   thoreau 10932> grep -lw const susv3/functions/* | wc -l
        470
   thoreau 10933> grep -Lw const susv3/functions/* | wc -l
        672

As for correctness, I'll let other language lawyers jump in.  :-)

> It could perhaps 'encourage' bad behaviour by software being written
> for the const version and this is actually why I noticed it - FreeBSD
> and OpenBSD have had this for many years and I found comms/obexapp
> needs an _UNCONST patch to build..

My first take is that if a standard says dirname(3)/basename(3) may
modify the arg, then portable code shouldn't past in a const pointer.
It sounds like comms/obexapp is making assumptions about implementations
it shouldn't be.

Cheers,
Simon.


Home | Main Index | Thread Index | Old Index