From: Alan Modra Date: Thu, 27 Feb 2020 03:41:35 +0000 (+1030) Subject: _bfd_xcoff_read_ar_hdr tidy X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=05f52dc2e1359fc4f69fab5c39fdfdf5efe93a15;p=binutils-gdb.git _bfd_xcoff_read_ar_hdr tidy * coff-rs6000.c (_bfd_xcoff_read_ar_hdr): Put all data in one malloc'd block. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index ff03baa0dca..e5cf5e125e2 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2020-02-27 Alan Modra + + * coff-rs6000.c (_bfd_xcoff_read_ar_hdr): Put all data in one + malloc'd block. + 2020-02-27 Alan Modra * bfd.c (bfd_stat_arch_elt): Use vector of containing archive, diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c index 8b8f4725041..1cc708ce1b3 100644 --- a/bfd/coff-rs6000.c +++ b/bfd/coff-rs6000.c @@ -1491,32 +1491,23 @@ _bfd_xcoff_read_ar_hdr (bfd *abfd) { bfd_size_type namlen; struct areltdata *ret; - bfd_size_type amt = sizeof (struct areltdata); - - ret = (struct areltdata *) bfd_zmalloc (amt); - if (ret == NULL) - return NULL; + bfd_size_type amt; if (! xcoff_big_format_p (abfd)) { struct xcoff_ar_hdr hdr; struct xcoff_ar_hdr *hdrp; - if (bfd_bread (&hdr, (bfd_size_type) SIZEOF_AR_HDR, abfd) - != SIZEOF_AR_HDR) - { - free (ret); - return NULL; - } + if (bfd_bread (&hdr, SIZEOF_AR_HDR, abfd) != SIZEOF_AR_HDR) + return NULL; GET_VALUE_IN_FIELD (namlen, hdr.namlen, 10); - amt = SIZEOF_AR_HDR + namlen + 1; - hdrp = (struct xcoff_ar_hdr *) bfd_alloc (abfd, amt); - if (hdrp == NULL) - { - free (ret); - return NULL; - } + amt = sizeof (struct areltdata) + SIZEOF_AR_HDR + namlen + 1; + ret = (struct areltdata *) bfd_malloc (amt); + if (ret == NULL) + return ret; + + hdrp = (struct xcoff_ar_hdr *) (ret + 1); memcpy (hdrp, &hdr, SIZEOF_AR_HDR); if (bfd_bread ((char *) hdrp + SIZEOF_AR_HDR, namlen, abfd) != namlen) { @@ -1534,21 +1525,16 @@ _bfd_xcoff_read_ar_hdr (bfd *abfd) struct xcoff_ar_hdr_big hdr; struct xcoff_ar_hdr_big *hdrp; - if (bfd_bread (&hdr, (bfd_size_type) SIZEOF_AR_HDR_BIG, abfd) - != SIZEOF_AR_HDR_BIG) - { - free (ret); - return NULL; - } + if (bfd_bread (&hdr, SIZEOF_AR_HDR_BIG, abfd) != SIZEOF_AR_HDR_BIG) + return NULL; GET_VALUE_IN_FIELD (namlen, hdr.namlen, 10); - amt = SIZEOF_AR_HDR_BIG + namlen + 1; - hdrp = (struct xcoff_ar_hdr_big *) bfd_alloc (abfd, amt); - if (hdrp == NULL) - { - free (ret); - return NULL; - } + amt = sizeof (struct areltdata) + SIZEOF_AR_HDR_BIG + namlen + 1; + ret = (struct areltdata *) bfd_malloc (amt); + if (ret == NULL) + return ret; + + hdrp = (struct xcoff_ar_hdr_big *) (ret + 1); memcpy (hdrp, &hdr, SIZEOF_AR_HDR_BIG); if (bfd_bread ((char *) hdrp + SIZEOF_AR_HDR_BIG, namlen, abfd) != namlen) {