diff options
| -rw-r--r-- | src/ChangeLog | 4 | ||||
| -rw-r--r-- | src/size.c | 15 |
2 files changed, 15 insertions, 4 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 30fdb07b..6203f712 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,9 @@ 2009-01-23 Ulrich Drepper <[email protected]> + * size.c (process_file): When handling archive, close file descriptor + here. For unknown file format also close file descriptor. + (handle_ar): Don't close file descriptor here. + * readelf.c (parse_opt): Move code to add to dump_data_sections and string_sections list in local function add_dump_section. Adjust 'x' key handling. For 'a' key add .strtab, .dynstr, and .comment section @@ -319,13 +319,23 @@ process_file (const char *fname) return 0; } else if (likely (elf_kind (elf) == ELF_K_AR)) - return handle_ar (fd, elf, NULL, fname); + { + int result = handle_ar (fd, elf, NULL, fname); + + if (unlikely (close (fd) != 0)) + error (EXIT_FAILURE, errno, gettext ("while closing '%s'"), fname); + + return result; + } /* We cannot handle this type. Close the descriptor anyway. */ if (unlikely (elf_end (elf) != 0)) INTERNAL_ERROR (fname); } + if (unlikely (close (fd) != 0)) + error (EXIT_FAILURE, errno, gettext ("while closing '%s'"), fname); + error (0, 0, gettext ("%s: file format not recognized"), fname); return 1; @@ -396,9 +406,6 @@ handle_ar (int fd, Elf *elf, const char *prefix, const char *fname) if (unlikely (elf_end (elf) != 0)) INTERNAL_ERROR (fname); - if (unlikely (close (fd) != 0)) - error (EXIT_FAILURE, errno, gettext ("while closing '%s'"), fname); - return result; } |
