This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 1/2] Mark internal argz functions with attribute_hidden [BZ #18822]


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


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