This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH 1/2] Mark internal argz functions with attribute_hidden [BZ #18822]
- From: Joseph Myers <joseph at codesourcery dot com>
- To: "H.J. Lu" <hjl dot tools at gmail dot com>
- Cc: GNU C Library <libc-alpha at sourceware dot org>
- Date: Fri, 18 Aug 2017 14:01:20 +0000
- Subject: Re: [PATCH 1/2] Mark internal argz functions with attribute_hidden [BZ #18822]
- Authentication-results: sourceware.org; auth=none
- References: <20170818130141.GA4463@gmail.com>
On Fri, 18 Aug 2017, H.J. Lu wrote:
> diff --git a/include/argz.h b/include/argz.h
> index 0388c23277..bddebfa221 100644
> --- a/include/argz.h
> +++ b/include/argz.h
> @@ -4,6 +4,11 @@
>
> # ifndef _ISOMAC
>
> +extern __typeof (__argz_add) __argz_add attribute_hidden;
> +extern __typeof (__argz_add_sep) __argz_add_sep attribute_hidden;
> +extern __typeof (__argz_append) __argz_append attribute_hidden;
> +extern __typeof (__argz_create_sep) __argz_create_sep attribute_hidden;
This sort of use of typeof is suspect for an internal function. For
declaring an internal alias to a public function, sure, but why redeclare
an internal function using typeof rather than just getting the original
declaration of the internal function right?
In this case, the problem presumably is that the internal declarations are
in the installed argz.h header. So move them from the installed header to
the include/ one. At that point, using typeof *does* make sense to copy
the type from the public function, e.g.
extern __typeof (argz_add) __argz_add __THROW attribute_hidden;
(argz.h is shared with gnulib, but in gnulib it doesn't have those
internal declarations anyway. So moving them to the include/ header helps
bring the public one closer to the gnulib version.)
--
Joseph S. Myers
joseph@codesourcery.com