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;
- }
|