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: Calling functions through a pointer of incorrect type


On 03/22/2016 08:14 PM, Joseph Myers wrote:
> On Tue, 22 Mar 2016, Florian Weimer wrote:
> 
>> Just a sanity check: It is no longer acceptable glibc coding style to
>> call functions through mismatching pointer types.  Correct?
> 
> I think more specific examples would help so we can see if there are 
> cleaner approaches that generate the same code.  (For example, it's 
> deliberate that in some places functions with incompatible C types but 
> compatible ABIs are aliased to each other.)

I saw this in getaddrinfo:

  if (fct == NULL)
    /* We are cheating here.  The gethostbyname2_r
       function does not have the same interface as
       gethostbyname3_r but the extra arguments the
       latter takes are added at the end.  So the
       gethostbyname2_r code will just ignore them.  */
    fct = __nss_lookup_function (nip, "gethostbyname2_r");

The void ** vs concrete pointer example is __nss_getent.

For __nss_getent, it wouldn't be too hard to split the buffer management
from the call, and move the call to the caller of __nss_getent, where
the correct type is known.

getaddrinfo may be harder and involve splitting the code around the caller.

Florian


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