| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 | /* Since the reentrant gethost functions take a char * buffer, * we have to make sure they internally do not assume alignment. * The actual return values are not relevant.  If the test fails, * it'll be due to an alignment exception which means the test * app is killed by the kernel. */#include <errno.h>#include <netdb.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <arpa/inet.h>#include <sys/socket.h>int main(int argc, char *argv[]){	size_t i;	char buf[1024];	in_addr_t addr;	addr = inet_addr("127.0.0.1");	for (i = 0; i < sizeof(size_t) * 2; ++i) {		struct hostent hent, *hentres;		int ret, herr;		printf("Testing misalignment of %2zi bytes: ", i);		memset(&hent, 0x00, sizeof(hent));		ret = gethostent_r(&hent, buf + i, sizeof(buf) - i, &hentres, &herr);		printf("%sgethostent_r() ", (ret ? "!!!" : ""));		memset(&hent, 0x00, sizeof(hent));		ret = gethostbyname_r("localhost", &hent, buf + i, sizeof(buf) - i, &hentres, &herr);		printf("%sgethostbyname_r() ", (ret ? "!!!" : ""));		memset(&hent, 0x00, sizeof(hent));		ret = gethostbyname2_r("localhost", AF_INET, &hent, buf + i, sizeof(buf) - i, &hentres, &herr);		printf("%sgethostbyname2_r() ", (ret ? "!!!" : ""));		memset(&hent, 0x00, sizeof(hent));		ret = gethostbyaddr_r(&addr, sizeof(addr), AF_INET, &hent, buf + i, sizeof(buf) - i, &hentres, &herr);		printf("%sgethostbyaddr_r() ", (ret ? "!!!" : ""));		puts("OK!");	}	return 0;}
 |