From 507891998164b8548f5aebfc54e759a3fbbd3bde Mon Sep 17 00:00:00 2001 From: Matt Kraai Date: Tue, 28 Aug 2001 22:57:38 +0000 Subject: Use the correct buffer when calling dirname, improve an error message, and plug some memory leaks. Patch by Laurence Anderson. --- libbb/unarchive.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'libbb') diff --git a/libbb/unarchive.c b/libbb/unarchive.c index 2d171b4..4d47eff 100644 --- a/libbb/unarchive.c +++ b/libbb/unarchive.c @@ -129,7 +129,7 @@ char *extract_archive(FILE *src_stream, FILE *out_stream, const file_header_t *f if (function & extract_create_leading_dirs) { /* Create leading directories with default umask */ char *buf, *parent; buf = xstrdup(full_name); - parent = dirname(full_name); + parent = dirname(buf); if (make_directory (parent, -1, FILEUTILS_RECUR) != 0) { if ((function & extract_quiet) != extract_quiet) { error_msg("couldn't create leading directories"); @@ -160,7 +160,7 @@ char *extract_archive(FILE *src_stream, FILE *out_stream, const file_header_t *f if (stat_res != 0) { if (mkdir(full_name, file_entry->mode) < 0) { if ((function & extract_quiet) != extract_quiet) { - perror_msg("extract_archive: "); + perror_msg("extract_archive: %s", full_name); } } } @@ -266,6 +266,9 @@ char *unarchive(FILE *src_stream, FILE *out_stream, file_header_t *(*get_headers /* seek past the data entry */ seek_sub_file(src_stream, file_entry->size); } + free(file_entry->name); /* may be null, but doesn't matter */ + free(file_entry->link_name); + free(file_entry); } return(buffer); } -- cgit v1.1