Support gethostbyname_r_ERANGE.
Bug: 18802601 Change-Id: Iaa64921e96f91e330f1845c5399ee8aba39d9c10
This commit is contained in:
parent
65e6985617
commit
7069256495
@ -1208,7 +1208,7 @@ _dns_gethtbyname(void *rv, void *cb_data, va_list ap)
|
|||||||
free(buf);
|
free(buf);
|
||||||
__res_put_state(res);
|
__res_put_state(res);
|
||||||
if (hp == NULL)
|
if (hp == NULL)
|
||||||
switch (h_errno) {
|
switch (*info->he) {
|
||||||
case HOST_NOT_FOUND:
|
case HOST_NOT_FOUND:
|
||||||
return NS_NOTFOUND;
|
return NS_NOTFOUND;
|
||||||
case TRY_AGAIN:
|
case TRY_AGAIN:
|
||||||
@ -1326,6 +1326,7 @@ _dns_gethtbyaddr(void *rv, void *cb_data, va_list ap)
|
|||||||
*info->he = NETDB_SUCCESS;
|
*info->he = NETDB_SUCCESS;
|
||||||
return NS_SUCCESS;
|
return NS_SUCCESS;
|
||||||
nospc:
|
nospc:
|
||||||
|
errno = ENOSPC;
|
||||||
*info->he = NETDB_INTERNAL;
|
*info->he = NETDB_INTERNAL;
|
||||||
return NS_UNAVAIL;
|
return NS_UNAVAIL;
|
||||||
}
|
}
|
||||||
|
@ -71,6 +71,7 @@
|
|||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <errno.h>
|
||||||
#include <nsswitch.h>
|
#include <nsswitch.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
@ -133,6 +134,10 @@ nsdispatch(void *retval, const ns_dtab disp_tab[], const char *database,
|
|||||||
continue;
|
continue;
|
||||||
if (result & srclist[i].flags)
|
if (result & srclist[i].flags)
|
||||||
break;
|
break;
|
||||||
|
/* Stop trying next resolver when there is a memory space fatal error. */
|
||||||
|
if ((result & NS_UNAVAIL) != 0 && errno == ENOSPC) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
result &= NS_STATUSMASK; /* clear private flags in result */
|
result &= NS_STATUSMASK; /* clear private flags in result */
|
||||||
|
@ -116,7 +116,9 @@ _hf_gethtbyname(void *rv, void *cb_data, va_list ap)
|
|||||||
hp = _hf_gethtbyname2(name, af, info);
|
hp = _hf_gethtbyname2(name, af, info);
|
||||||
#endif
|
#endif
|
||||||
if (hp == NULL) {
|
if (hp == NULL) {
|
||||||
*info->he = HOST_NOT_FOUND;
|
if (*info->he == NETDB_INTERNAL && errno == ENOSPC) {
|
||||||
|
return NS_UNAVAIL;
|
||||||
|
}
|
||||||
return NS_NOTFOUND;
|
return NS_NOTFOUND;
|
||||||
}
|
}
|
||||||
return NS_SUCCESS;
|
return NS_SUCCESS;
|
||||||
@ -159,8 +161,12 @@ _hf_gethtbyname2(const char *name, int af, struct getnamaddr *info)
|
|||||||
|
|
||||||
hp = netbsd_gethostent_r(hf, info->hp, info->buf, info->buflen,
|
hp = netbsd_gethostent_r(hf, info->hp, info->buf, info->buflen,
|
||||||
info->he);
|
info->he);
|
||||||
if (hp == NULL)
|
if (hp == NULL) {
|
||||||
|
if (*info->he == NETDB_INTERNAL && errno == ENOSPC) {
|
||||||
|
goto nospc;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (strcasecmp(hp->h_name, name) != 0) {
|
if (strcasecmp(hp->h_name, name) != 0) {
|
||||||
char **cp;
|
char **cp;
|
||||||
@ -259,6 +265,9 @@ _hf_gethtbyaddr(void *rv, void *cb_data, va_list ap)
|
|||||||
endhostent_r(&hf);
|
endhostent_r(&hf);
|
||||||
|
|
||||||
if (hp == NULL) {
|
if (hp == NULL) {
|
||||||
|
if (errno == ENOSPC) {
|
||||||
|
return NS_UNAVAIL;
|
||||||
|
}
|
||||||
*info->he = HOST_NOT_FOUND;
|
*info->he = HOST_NOT_FOUND;
|
||||||
return NS_NOTFOUND;
|
return NS_NOTFOUND;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user