On Fri, Mar 18, 2016 at 17:42:29 +0100, Martin Kletzander wrote: > Every aligning requires at least one cast and it's hard to read. Let's > make a function that makes sure the pointer is moved according to the > alignment and use that to move throughout the data buffer. > > Signed-off-by: Martin Kletzander <mkletzan@xxxxxxxxxx> > --- > tools/nss/libvirt_nss.c | 51 ++++++++++++++++++++++++++++++++----------------- > 1 file changed, 33 insertions(+), 18 deletions(-) > > diff --git a/tools/nss/libvirt_nss.c b/tools/nss/libvirt_nss.c > index ba3bb31b3569..c9909901786d 100644 > --- a/tools/nss/libvirt_nss.c > +++ b/tools/nss/libvirt_nss.c > @@ -252,17 +252,31 @@ _nss_libvirt_gethostbyname2_r(const char *name, int af, struct hostent *result, [...] > _nss_libvirt_gethostbyname3_r(const char *name, int af, struct hostent *result, > char *buffer, size_t buflen, int *errnop, > int *herrnop, int32_t *ttlp, char **canonp) > { > enum nss_status ret = NSS_STATUS_UNAVAIL; > - char *r_name, **r_aliases, *r_addr, **r_addr_list; > + char *r_name, **r_aliases, *r_addr, *r_addr_next, **r_addr_list; > leaseAddress *addr = NULL; > size_t naddr, i; > bool found = false; > - size_t nameLen, need, idx; > + size_t nameLen, need, idx = 0; You've initialized it in this function ... > int alen; > int r; > [...] > @@ -420,25 +438,22 @@ _nss_libvirt_gethostbyname4_r(const char *name, struct gaih_addrtuple **pat, ... but not in this function ... > /* First, append name */ > r_name = buffer; > memcpy(r_name, name, nameLen + 1); > - idx = ALIGN(nameLen + 1); > - ... and you remove the initialization here ... > > /* Second, append addresses */ > - r_tuple_first = (struct gaih_addrtuple*) (buffer + idx); > + r_tuple_first = move_and_align(buffer, nameLen + 1, &idx); ... and use it here: nss/libvirt_nss.c: In function '_nss_libvirt_gethostbyname4_r': nss/libvirt_nss.c:264:10: error: 'idx' may be used uninitialized in this function [-Werror=maybe-uninitialized] *idx += move; > for (i = 0; i < naddr; i++) { > int family = addr[i].af; Peter
Attachment:
signature.asc
Description: Digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list