[patch] basename vs. __gnu_basename fix

Corinna Vinschen vinschen@redhat.com
Wed Apr 22 17:07:00 GMT 2015

On Apr 22 09:51, Craig Howland wrote:
> On 04/22/2015 04:00 AM, Corinna Vinschen wrote:
> >On Apr 21 17:07, Craig Howland wrote:
> >>On 04/21/2015 11:50 AM, Corinna Vinschen wrote:
> >>>[...]
> >>>+/* There are two common basename variants.  If you #include <libgen.h> you get
> >>>+   the POSIX version; otherwise, if you define _GNU_SOURCE, you get the GNU
> >>>+   version via <string.h>.  POSIX requires that #undef basename will still let
> >>>+   you invoke the underlying function.  However, this also implies that the
> >>>+   POSIX version is used in this case.  That's made sure here. */
> >>>+#if __GNU_VISIBLE && !defined(basename)
> >>>  char	*_EXFUN(__gnu_basename,(const char *));
> >>>  # define basename __gnu_basename
> >>>-# endif
> >>>  #endif
> >>The prototype should not be skipped if basename is defined (which I'm
> >>guessing is an unintended change).
> >Hang on, the prototype *must* be skipped if basename is defined.  If you
> >don't do that you end up with the exact problem my patch is trying to
> >fix:  You'll get two contradicting prototypes for basename, one from
> >libgen.h, one from string.h.  If basename is defined, it's from
> >libgen.h, so basename is already prototyped.  Have a look into the glibc
> >headers.
> >
> No, the prototype is for __gnu_basename--it does not have to be skipped.
> The only way in which it is linked to basename is when the #define is
> made--which maps basename to __gnu_basename (not vice versa).  The define
> must be skipped.

Right, it does not necessarily have to be skipped.  But what's the
objective?  Nobody should use the function __gnu_basename under that
name, and if basename is already defined, the "other" basename function
is supposed to be used.


Corinna Vinschen
Cygwin Maintainer
Red Hat
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/newlib/attachments/20150422/e4ec3ed3/attachment.sig>

More information about the Newlib mailing list