diff options
author | Ulrich Drepper <drepper@redhat.com> | 2009-01-23 16:32:21 -0800 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2009-01-23 16:32:21 -0800 |
commit | ccccab08d66be13fe9ff5ca07f46709c069b45a2 (patch) | |
tree | 81cfc6f4c1eabefffa190d3d54eb59aa36149382 | |
parent | 75894321627c15a9dc6c6f0c51dae8ba84802705 (diff) | |
download | elfutils-ccccab08d66be13fe9ff5ca07f46709c069b45a2.tar.gz |
Fix handling of file descriptors for the files size opens.
-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 <drepper@redhat.com> + * 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; } |