diff options
Diffstat (limited to 'bfd/som.c')
-rw-r--r-- | bfd/som.c | 24 |
1 files changed, 14 insertions, 10 deletions
@@ -24,7 +24,7 @@ #include "sysdep.h" #include "alloca-conf.h" #include "bfd.h" - +#include "libiberty.h" #include "libbfd.h" #include "som.h" #include "safe-ctype.h" @@ -3304,11 +3304,12 @@ som_write_space_strings (bfd *abfd, /* Chunk of memory that we can use as buffer space, then throw away. */ size_t tmp_space_size = SOM_TMP_BUFSIZE; - char *tmp_space = alloca (tmp_space_size); + char *tmp_space = xmalloc (tmp_space_size); char *p = tmp_space; unsigned int strings_size = 0; asection *section; bfd_size_type amt; + bfd_size_type res; /* Seek to the start of the space strings in preparation for writing them out. */ @@ -3355,7 +3356,7 @@ som_write_space_strings (bfd *abfd, tmp_space_size = length + 5; else tmp_space_size = 2 * tmp_space_size; - tmp_space = alloca (tmp_space_size); + tmp_space = xrealloc (tmp_space, tmp_space_size); } /* Reset to beginning of the (possibly new) buffer space. */ @@ -3391,7 +3392,9 @@ som_write_space_strings (bfd *abfd, /* Done with the space/subspace strings. Write out any information contained in a partial block. */ amt = p - tmp_space; - if (bfd_bwrite ((void *) &tmp_space[0], amt, abfd) != amt) + res = bfd_bwrite ((void *) &tmp_space[0], amt, abfd); + free (tmp_space); + if (res != amt) return FALSE; *string_sizep = strings_size; return TRUE; @@ -3408,15 +3411,14 @@ som_write_symbol_strings (bfd *abfd, struct som_compilation_unit *compilation_unit) { unsigned int i; - /* Chunk of memory that we can use as buffer space, then throw away. */ size_t tmp_space_size = SOM_TMP_BUFSIZE; - char *tmp_space = alloca (tmp_space_size); + char *tmp_space = xmalloc (tmp_space_size); char *p = tmp_space; - unsigned int strings_size = 0; bfd_size_type amt; + bfd_size_type res; /* This gets a bit gruesome because of the compilation unit. The strings within the compilation unit are part of the symbol @@ -3475,7 +3477,7 @@ som_write_symbol_strings (bfd *abfd, tmp_space_size = 5 + length; else tmp_space_size = 2 * tmp_space_size; - tmp_space = alloca (tmp_space_size); + tmp_space = xrealloc (tmp_space, tmp_space_size); } /* Reset to beginning of the (possibly new) buffer @@ -3530,7 +3532,7 @@ som_write_symbol_strings (bfd *abfd, tmp_space_size = 5 + length; else tmp_space_size = 2 * tmp_space_size; - tmp_space = alloca (tmp_space_size); + tmp_space = xrealloc (tmp_space, tmp_space_size); } /* Reset to beginning of the (possibly new) buffer space. */ @@ -3563,7 +3565,9 @@ som_write_symbol_strings (bfd *abfd, /* Scribble out any partial block. */ amt = p - tmp_space; - if (bfd_bwrite ((void *) &tmp_space[0], amt, abfd) != amt) + res = bfd_bwrite ((void *) &tmp_space[0], amt, abfd); + free (tmp_space); + if (res != amt) return FALSE; *string_sizep = strings_size; |