summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2009-01-23 16:32:21 -0800
committerUlrich Drepper <drepper@redhat.com>2009-01-23 16:32:21 -0800
commitccccab08d66be13fe9ff5ca07f46709c069b45a2 (patch)
tree81cfc6f4c1eabefffa190d3d54eb59aa36149382
parent75894321627c15a9dc6c6f0c51dae8ba84802705 (diff)
downloadelfutils-ccccab08d66be13fe9ff5ca07f46709c069b45a2.tar.gz
Fix handling of file descriptors for the files size opens.
-rw-r--r--src/ChangeLog4
-rw-r--r--src/size.c15
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
diff --git a/src/size.c b/src/size.c
index f6f23d55..4698c350 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;
}