* nis/nis_table.c (nis_list): Optimize freeing and reallocation of

result record.
This commit is contained in:
Ulrich Drepper 2005-12-04 06:27:06 +00:00
parent 9069c5e963
commit 56a5719e18
2 changed files with 13 additions and 0 deletions

View File

@ -1,5 +1,8 @@
2005-12-03 Ulrich Drepper <drepper@redhat.com> 2005-12-03 Ulrich Drepper <drepper@redhat.com>
* nis/nis_table.c (nis_list): Optimize freeing and reallocation of
result record.
* nis/nss_nisplus/nisplus-network.c (_nss_nisplus_getnetbyaddr_r): * nis/nss_nisplus/nisplus-network.c (_nss_nisplus_getnetbyaddr_r):
Better sized buffers. Correct error case handling. Better sized buffers. Correct error case handling.
* nis/nis_error.c (nis_sperror_r): Let snprintf determine whether * nis/nis_error.c (nis_sperror_r): Let snprintf determine whether

View File

@ -296,6 +296,15 @@ nis_list (const_nis_name name, unsigned int flags,
ibreq->ibr_srch.ibr_srch_val = ibreq->ibr_srch.ibr_srch_val =
NIS_RES_OBJECT (res)->LI_data.li_attrs.li_attrs_val; NIS_RES_OBJECT (res)->LI_data.li_attrs.li_attrs_val;
} }
/* The following is a non-obvious optimization. A
nis_freeresult call would call xdr_free as the
following code. But it also would unnecessarily
free the result structure. We avoid this here
along with the necessary tests. */
#if 1
xdr_free ((xdrproc_t) _xdr_nis_result, (char *)res);
memset (res, '\0', sizeof (*res));
#else
nis_freeresult (res); nis_freeresult (res);
res = calloc (1, sizeof (nis_result)); res = calloc (1, sizeof (nis_result));
if (res == NULL) if (res == NULL)
@ -306,6 +315,7 @@ nis_list (const_nis_name name, unsigned int flags,
nis_free_directory (dir); nis_free_directory (dir);
return NULL; return NULL;
} }
#endif
first_try = 1; /* Try at first the old binding */ first_try = 1; /* Try at first the old binding */
goto again; goto again;
} }