|
Last change
on this file since 2196 was 2036, checked in by bird, 21 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
|
| Rev | Line | |
|---|
| [2036] | 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.