Last change
on this file was 2036, checked in by bird, 20 years ago |
Initial revision
|
-
Property cvs2svn:cvs-rev
set to
1.1
-
Property svn:eol-style
set to
native
-
Property svn:executable
set to
*
-
Property svn:keywords
set to
Author Date Id Revision
|
File size:
1.2 KB
|
Line | |
---|
1 | /* Test case for gethostbyname_r bug when buffer expansion required. */
|
---|
2 |
|
---|
3 | #include <netdb.h>
|
---|
4 | #include <arpa/inet.h>
|
---|
5 | #include <errno.h>
|
---|
6 | #include <string.h>
|
---|
7 | #include <stdio.h>
|
---|
8 | #include <stdlib.h>
|
---|
9 | #include <unistd.h>
|
---|
10 |
|
---|
11 | int
|
---|
12 | main (void)
|
---|
13 | {
|
---|
14 | const char *host = "www.gnu.org";
|
---|
15 |
|
---|
16 | /* This code approximates the example code in the library manual. */
|
---|
17 |
|
---|
18 | struct hostent hostbuf, *hp;
|
---|
19 | size_t hstbuflen;
|
---|
20 | char *tmphstbuf;
|
---|
21 | int res;
|
---|
22 | int herr;
|
---|
23 |
|
---|
24 | hstbuflen = 16; /* Make it way small to ensure ERANGE. */
|
---|
25 | /* Allocate buffer, remember to free it to avoid memory leakage. */
|
---|
26 | tmphstbuf = malloc (hstbuflen);
|
---|
27 |
|
---|
28 | while ((res = gethostbyname_r (host, &hostbuf, tmphstbuf, hstbuflen,
|
---|
29 | &hp, &herr)) == ERANGE)
|
---|
30 | {
|
---|
31 | /* Enlarge the buffer. */
|
---|
32 | hstbuflen *= 2;
|
---|
33 | tmphstbuf = realloc (tmphstbuf, hstbuflen);
|
---|
34 | }
|
---|
35 |
|
---|
36 | if (res != 0 || hp == NULL)
|
---|
37 | {
|
---|
38 | printf ("gethostbyname_r failed: %s (errno: %m)\n", strerror (res));
|
---|
39 |
|
---|
40 | if (access ("/etc/resolv.conf", R_OK))
|
---|
41 | {
|
---|
42 | puts ("DNS probably not set up");
|
---|
43 | return 0;
|
---|
44 | }
|
---|
45 |
|
---|
46 | return 1;
|
---|
47 | }
|
---|
48 |
|
---|
49 | printf ("Got: %s %s\n", hp->h_name,
|
---|
50 | inet_ntoa (*(struct in_addr *) hp->h_addr));
|
---|
51 | return 0;
|
---|
52 | }
|
---|
Note:
See
TracBrowser
for help on using the repository browser.