From a0515286bfc5c10baebfd43550722623fb2aefdd Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Wed, 9 Jan 2008 10:40:32 +0000 Subject: [PATCH] PR binutils/55326 * bucomm.c (list_supported_architectures): Free architecture list after use. * windres.c (set_endianess): Likewise. * windmc.c (set_endianess): Likewise. --- binutils/ChangeLog | 8 ++++++++ binutils/bucomm.c | 6 ++++-- binutils/windmc.c | 14 +++++++++++--- binutils/windres.c | 25 +++++++++++++++++-------- 4 files changed, 40 insertions(+), 13 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index d3c1d32c77..0c0efdaaab 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,11 @@ +2008-01-09 Jakub Zawadzki + + PR binutils/55326 + * bucomm.c (list_supported_architectures): Free architecture list + after use. + * windres.c (set_endianess): Likewise. + * windmc.c (set_endianess): Likewise. + 2008-01-08 Kai Tietz * binutils/rclex.c: (yylex): Add ':', '_', '\\', and '/' to post diff --git a/binutils/bucomm.c b/binutils/bucomm.c index 26cb09efb4..508790ffa3 100644 --- a/binutils/bucomm.c +++ b/binutils/bucomm.c @@ -195,16 +195,18 @@ list_supported_targets (const char *name, FILE *f) void list_supported_architectures (const char *name, FILE *f) { - const char **arch; + const char ** arch; + const char ** arches; if (name == NULL) fprintf (f, _("Supported architectures:")); else fprintf (f, _("%s: supported architectures:"), name); - for (arch = bfd_arch_list (); *arch; arch++) + for (arch = arches = bfd_arch_list (); *arch; arch++) fprintf (f, " %s", *arch); fprintf (f, "\n"); + free (arches); } /* The length of the longest architecture name + 1. */ diff --git a/binutils/windmc.c b/binutils/windmc.c index 14a2f86a1d..2c6da4283d 100644 --- a/binutils/windmc.c +++ b/binutils/windmc.c @@ -245,18 +245,23 @@ set_endianess (bfd *abfd, const char *target) if (! target_vec) fatal ("Can't detect target endianess and architecture."); target_is_bigendian = ((target_vec->byteorder == BFD_ENDIAN_BIG) ? 1 : 0); + { - const char *tname = target_vec->name; - const char **arch = bfd_arch_list (); + const char * tname = target_vec->name; + const char ** arches = bfd_arch_list (); - if (arch && tname) + if (arches && tname) { + const char ** arch = arches; + if (strchr (tname, '-') != NULL) tname = strchr (tname, '-') + 1; + while (*arch != NULL) { const char *in_a = strstr (*arch, tname); char end_ch = (in_a ? in_a[strlen (tname)] : 0); + if (in_a && (in_a == *arch || in_a[-1] == ':') && end_ch == 0) { @@ -266,6 +271,9 @@ set_endianess (bfd *abfd, const char *target) arch++; } } + + free (arches); + if (! def_target_arch) fatal ("Can't detect architecture."); } diff --git a/binutils/windres.c b/binutils/windres.c index a4b466c5a5..e68a504cf3 100644 --- a/binutils/windres.c +++ b/binutils/windres.c @@ -1062,7 +1062,8 @@ main (int argc, char **argv) return 0; } -static void set_endianess (bfd *abfd, const char *target) +static void +set_endianess (bfd *abfd, const char *target) { const bfd_target *target_vec; @@ -1071,17 +1072,22 @@ static void set_endianess (bfd *abfd, const char *target) if (! target_vec) fatal ("Can't detect target endianess and architecture."); target_is_bigendian = ((target_vec->byteorder == BFD_ENDIAN_BIG) ? 1 : 0); + { - const char *tname = target_vec->name; - const char **arch = bfd_arch_list(); - if (arch && tname) + const char * tname = target_vec->name; + const char ** arches = bfd_arch_list(); + + if (arches && tname) { + const char ** arch = arches; + if (strchr (tname, '-') != NULL) tname = strchr (tname, '-') + 1; while (*arch != NULL) { const char *in_a = strstr (*arch, tname); char end_ch = (in_a ? in_a[strlen(tname)] : 0); + if (in_a && (in_a == *arch || in_a[-1] == ':') && end_ch == 0) { @@ -1091,6 +1097,9 @@ static void set_endianess (bfd *abfd, const char *target) arch++; } } + + free (arches); + if (! def_target_arch) fatal ("Can't detect architecture."); } @@ -1156,8 +1165,8 @@ set_windres_bfd (windres_bfd *wrbfd, bfd *abfd, asection *sec, rc_uint_type kind } void -set_windres_bfd_content(windres_bfd *wrbfd, const void *data, rc_uint_type off, - rc_uint_type length) +set_windres_bfd_content (windres_bfd *wrbfd, const void *data, rc_uint_type off, + rc_uint_type length) { if (WR_KIND(wrbfd) != WR_KIND_TARGET) { @@ -1169,8 +1178,8 @@ set_windres_bfd_content(windres_bfd *wrbfd, const void *data, rc_uint_type off, } void -get_windres_bfd_content(windres_bfd *wrbfd, void *data, rc_uint_type off, - rc_uint_type length) +get_windres_bfd_content (windres_bfd *wrbfd, void *data, rc_uint_type off, + rc_uint_type length) { if (WR_KIND(wrbfd) != WR_KIND_TARGET) { -- 2.11.0