diff options
Diffstat (limited to 'src/lib/libc')
| -rw-r--r-- | src/lib/libc/net/getaddrinfo.c | 42 | 
1 files changed, 11 insertions, 31 deletions
| diff --git a/src/lib/libc/net/getaddrinfo.c b/src/lib/libc/net/getaddrinfo.c index 3f8521cb31..5e11ab00c3 100644 --- a/src/lib/libc/net/getaddrinfo.c +++ b/src/lib/libc/net/getaddrinfo.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: getaddrinfo.c,v 1.64 2007/05/12 21:38:14 ray Exp $ */ | 1 | /* $OpenBSD: getaddrinfo.c,v 1.65 2007/05/17 03:55:08 ray Exp $ */ | 
| 2 | /* $KAME: getaddrinfo.c,v 1.31 2000/08/31 17:36:43 itojun Exp $ */ | 2 | /* $KAME: getaddrinfo.c,v 1.31 2000/08/31 17:36:43 itojun Exp $ */ | 
| 3 | 3 | ||
| 4 | /* | 4 | /* | 
| @@ -217,9 +217,8 @@ static const struct afd *find_afd(int); | |||
| 217 | static int ip6_str2scopeid(char *, struct sockaddr_in6 *, u_int32_t *); | 217 | static int ip6_str2scopeid(char *, struct sockaddr_in6 *, u_int32_t *); | 
| 218 | #endif | 218 | #endif | 
| 219 | 219 | ||
| 220 | static void _sethtent(void); | 220 | static struct addrinfo * _gethtent(const char *, const struct addrinfo *, | 
| 221 | static void _endhtent(void); | 221 | FILE *); | 
| 222 | static struct addrinfo * _gethtent(const char *, const struct addrinfo *); | ||
| 223 | static struct addrinfo *_files_getaddrinfo(const char *, | 222 | static struct addrinfo *_files_getaddrinfo(const char *, | 
| 224 | const struct addrinfo *); | 223 | const struct addrinfo *); | 
| 225 | 224 | ||
| @@ -949,7 +948,6 @@ ip6_str2scopeid(char *scope, struct sockaddr_in6 *sin6, u_int32_t *scopeid) | |||
| 949 | 948 | ||
| 950 | static const char AskedForGot[] = | 949 | static const char AskedForGot[] = | 
| 951 | "gethostby*.getanswer: asked for \"%s\", got \"%s\""; | 950 | "gethostby*.getanswer: asked for \"%s\", got \"%s\""; | 
| 952 | static FILE *hostf = NULL; | ||
| 953 | 951 | ||
| 954 | static struct addrinfo * | 952 | static struct addrinfo * | 
| 955 | getanswer(const querybuf *answer, int anslen, const char *qname, int qtype, | 953 | getanswer(const querybuf *answer, int anslen, const char *qname, int qtype, | 
| @@ -1221,28 +1219,8 @@ _dns_getaddrinfo(const char *name, const struct addrinfo *pai) | |||
| 1221 | return sentinel.ai_next; | 1219 | return sentinel.ai_next; | 
| 1222 | } | 1220 | } | 
| 1223 | 1221 | ||
| 1224 | static FILE *hostf; | ||
| 1225 | |||
| 1226 | static void | ||
| 1227 | _sethtent(void) | ||
| 1228 | { | ||
| 1229 | if (!hostf) | ||
| 1230 | hostf = fopen(_PATH_HOSTS, "r" ); | ||
| 1231 | else | ||
| 1232 | rewind(hostf); | ||
| 1233 | } | ||
| 1234 | |||
| 1235 | static void | ||
| 1236 | _endhtent(void) | ||
| 1237 | { | ||
| 1238 | if (hostf) { | ||
| 1239 | (void) fclose(hostf); | ||
| 1240 | hostf = NULL; | ||
| 1241 | } | ||
| 1242 | } | ||
| 1243 | |||
| 1244 | static struct addrinfo * | 1222 | static struct addrinfo * | 
| 1245 | _gethtent(const char *name, const struct addrinfo *pai) | 1223 | _gethtent(const char *name, const struct addrinfo *pai, FILE *hostf) | 
| 1246 | { | 1224 | { | 
| 1247 | char *p; | 1225 | char *p; | 
| 1248 | char *cp, *tname, *cname; | 1226 | char *cp, *tname, *cname; | 
| @@ -1251,8 +1229,6 @@ _gethtent(const char *name, const struct addrinfo *pai) | |||
| 1251 | const char *addr; | 1229 | const char *addr; | 
| 1252 | char hostbuf[8*1024]; | 1230 | char hostbuf[8*1024]; | 
| 1253 | 1231 | ||
| 1254 | if (!hostf && !(hostf = fopen(_PATH_HOSTS, "r" ))) | ||
| 1255 | return (NULL); | ||
| 1256 | again: | 1232 | again: | 
| 1257 | if (!(p = fgets(hostbuf, sizeof hostbuf, hostf))) | 1233 | if (!(p = fgets(hostbuf, sizeof hostbuf, hostf))) | 
| 1258 | return (NULL); | 1234 | return (NULL); | 
| @@ -1308,17 +1284,21 @@ _files_getaddrinfo(const char *name, const struct addrinfo *pai) | |||
| 1308 | { | 1284 | { | 
| 1309 | struct addrinfo sentinel, *cur; | 1285 | struct addrinfo sentinel, *cur; | 
| 1310 | struct addrinfo *p; | 1286 | struct addrinfo *p; | 
| 1287 | FILE *hostf; | ||
| 1288 | |||
| 1289 | hostf = fopen(_PATH_HOSTS, "r"); | ||
| 1290 | if (hostf == NULL) | ||
| 1291 | return NULL; | ||
| 1311 | 1292 | ||
| 1312 | memset(&sentinel, 0, sizeof(sentinel)); | 1293 | memset(&sentinel, 0, sizeof(sentinel)); | 
| 1313 | cur = &sentinel; | 1294 | cur = &sentinel; | 
| 1314 | 1295 | ||
| 1315 | _sethtent(); | 1296 | while ((p = _gethtent(name, pai, hostf)) != NULL) { | 
| 1316 | while ((p = _gethtent(name, pai)) != NULL) { | ||
| 1317 | cur->ai_next = p; | 1297 | cur->ai_next = p; | 
| 1318 | while (cur && cur->ai_next) | 1298 | while (cur && cur->ai_next) | 
| 1319 | cur = cur->ai_next; | 1299 | cur = cur->ai_next; | 
| 1320 | } | 1300 | } | 
| 1321 | _endhtent(); | 1301 | fclose(hostf); | 
| 1322 | 1302 | ||
| 1323 | return sentinel.ai_next; | 1303 | return sentinel.ai_next; | 
| 1324 | } | 1304 | } | 
