diff options
author | Ulrich Drepper <drepper@redhat.com> | 2005-12-04 06:27:06 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2005-12-04 06:27:06 +0000 |
commit | 56a5719e184c982c7e09cb4cc57cb6cd42eadef4 (patch) | |
tree | 085569f5075f11252046e01d3ae53e1e6f2d85a2 | |
parent | 9069c5e963e530195745697d34f305faf45c0574 (diff) | |
download | glibc-56a5719e184c982c7e09cb4cc57cb6cd42eadef4.tar glibc-56a5719e184c982c7e09cb4cc57cb6cd42eadef4.tar.gz glibc-56a5719e184c982c7e09cb4cc57cb6cd42eadef4.tar.bz2 glibc-56a5719e184c982c7e09cb4cc57cb6cd42eadef4.zip |
* nis/nis_table.c (nis_list): Optimize freeing and reallocation of
result record.
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | nis/nis_table.c | 10 |
2 files changed, 13 insertions, 0 deletions
@@ -1,5 +1,8 @@ 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): Better sized buffers. Correct error case handling. * nis/nis_error.c (nis_sperror_r): Let snprintf determine whether diff --git a/nis/nis_table.c b/nis/nis_table.c index cfa7cef350..773380acac 100644 --- a/nis/nis_table.c +++ b/nis/nis_table.c @@ -296,6 +296,15 @@ nis_list (const_nis_name name, unsigned int flags, ibreq->ibr_srch.ibr_srch_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); res = calloc (1, sizeof (nis_result)); if (res == NULL) @@ -306,6 +315,7 @@ nis_list (const_nis_name name, unsigned int flags, nis_free_directory (dir); return NULL; } +#endif first_try = 1; /* Try at first the old binding */ goto again; } |