From ccccab08d66be13fe9ff5ca07f46709c069b45a2 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Fri, 23 Jan 2009 16:32:21 -0800 Subject: [PATCH] Fix handling of file descriptors for the files size opens. --- src/ChangeLog | 4 ++++ src/size.c | 15 +++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 30fdb07b7..6203f712a 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,9 @@ 2009-01-23 Ulrich Drepper + * 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 diff --git a/src/size.c b/src/size.c index f6f23d55f..4698c350f 100644 --- a/src/size.c +++ b/src/size.c @@ -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; } -- 2.47.2