diff options
Diffstat (limited to 'libc/inet/resolv.c')
-rw-r--r-- | libc/inet/resolv.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/libc/inet/resolv.c b/libc/inet/resolv.c index b799b0d81..4837bf9f7 100644 --- a/libc/inet/resolv.c +++ b/libc/inet/resolv.c @@ -1721,22 +1721,24 @@ int attribute_hidden __read_etc_hosts_r(FILE * fp, const char * name, int type, #ifdef L_gethostent __UCLIBC_MUTEX_STATIC(mylock, PTHREAD_MUTEX_INITIALIZER); -static int __stay_open; +static smallint __stay_open; static FILE * __gethostent_fp; void endhostent(void) { __UCLIBC_MUTEX_LOCK(mylock); __stay_open = 0; - if (__gethostent_fp) + if (__gethostent_fp) { fclose(__gethostent_fp); + __gethostent_fp = NULL; + } __UCLIBC_MUTEX_UNLOCK(mylock); } void sethostent(int stay_open) { __UCLIBC_MUTEX_LOCK(mylock); - __stay_open = stay_open; + __stay_open = (stay_open != 0); __UCLIBC_MUTEX_UNLOCK(mylock); } @@ -1757,8 +1759,10 @@ int gethostent_r(struct hostent *result_buf, char *buf, size_t buflen, ret = __read_etc_hosts_r(__gethostent_fp, NULL, AF_INET, GETHOSTENT, result_buf, buf, buflen, result, h_errnop); - if (__stay_open == 0) + if (__stay_open == 0) { fclose(__gethostent_fp); + __gethostent_fp = NULL; + } DONE: __UCLIBC_MUTEX_UNLOCK(mylock); return ret; |