Calling functions through a pointer of incorrect type
Florian Weimer
fweimer@redhat.com
Tue Mar 22 20:25:00 GMT 2016
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
More information about the Libc-alpha
mailing list