The gethostbyname_r() call accepts a pointer to a struct hostent (&hostbuf in
the example) and a pointer to a pointer to a struct hostent (&hp in the
example). The result of the lookup is stored in hostbuf itself and hp is set to
point at that buffer on success.
The hp pointer is returned by the example function, but shouldn't be. The thing
it points to has automatic scope and so won't exist when the function returns.
The example function gethostname() should accept a (hostent*) as a parameter,
The hostbuf variable should be allocated statically (although that would
defeat the purpose of a gethostbyname_r() call in the first place)
There is a secondary problem in that there is no (direct) way that the pointer
to the auxiliary buffer is passed back to the caller for later release of the
allocated memory - leading to a memory leak. Perhaps that could be ignored in
example code though?
Summary: Bug in gethostbyname_r() example
AssignedTo: roland at gnu dot org
ReportedBy: andyparkins at gmail dot com
CC: glibc-bugs at sources dot redhat dot com