diff options
| author | bug1 <bug1@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2002-11-23 10:44:47 +0000 |
|---|---|---|
| committer | bug1 <bug1@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2002-11-23 10:44:47 +0000 |
| commit | 6a9cee84731655d23626fc6fa13fa4e015170e10 (patch) | |
| tree | 1cd0eae04da9abc6431ebda8f300072d7f0f504e | |
| parent | 53e6fb6f7b520ce479021c487cad537a1342936a (diff) | |
| download | busybox-w32-6a9cee84731655d23626fc6fa13fa4e015170e10.tar.gz busybox-w32-6a9cee84731655d23626fc6fa13fa4e015170e10.tar.bz2 busybox-w32-6a9cee84731655d23626fc6fa13fa4e015170e10.zip | |
Fix long filename support
git-svn-id: svn://busybox.net/trunk/busybox@6006 69ca8d6d-28ef-0310-b511-8ec308f3f277
| -rw-r--r-- | archival/libunarchive/get_header_tar.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/archival/libunarchive/get_header_tar.c b/archival/libunarchive/get_header_tar.c index d3ff1608a..37e33d4c3 100644 --- a/archival/libunarchive/get_header_tar.c +++ b/archival/libunarchive/get_header_tar.c | |||
| @@ -20,6 +20,11 @@ | |||
| 20 | #include "unarchive.h" | 20 | #include "unarchive.h" |
| 21 | #include "libbb.h" | 21 | #include "libbb.h" |
| 22 | 22 | ||
| 23 | #ifdef CONFIG_FEATURE_GNUTAR_LONG_FILENAME | ||
| 24 | static char *longname = NULL; | ||
| 25 | static char *linkname = NULL; | ||
| 26 | #endif | ||
| 27 | |||
| 23 | extern char get_header_tar(archive_handle_t *archive_handle) | 28 | extern char get_header_tar(archive_handle_t *archive_handle) |
| 24 | { | 29 | { |
| 25 | file_header_t *file_header = archive_handle->file_header; | 30 | file_header_t *file_header = archive_handle->file_header; |
| @@ -85,7 +90,16 @@ extern char get_header_tar(archive_handle_t *archive_handle) | |||
| 85 | return(EXIT_FAILURE); | 90 | return(EXIT_FAILURE); |
| 86 | } | 91 | } |
| 87 | 92 | ||
| 88 | /* convert to type'ed variables */ | 93 | #ifdef CONFIG_FEATURE_GNUTAR_LONG_FILENAME |
| 94 | if (longname) { | ||
| 95 | file_header->name = longname; | ||
| 96 | longname = NULL; | ||
| 97 | } | ||
| 98 | else if (linkname) { | ||
| 99 | file_header->name = linkname; | ||
| 100 | linkname = NULL; | ||
| 101 | } else | ||
| 102 | #endif | ||
| 89 | if (tar.formated.prefix[0] == 0) { | 103 | if (tar.formated.prefix[0] == 0) { |
| 90 | file_header->name = strdup(tar.formated.name); | 104 | file_header->name = strdup(tar.formated.name); |
| 91 | } else { | 105 | } else { |
| @@ -134,28 +148,21 @@ extern char get_header_tar(archive_handle_t *archive_handle) | |||
| 134 | # endif | 148 | # endif |
| 135 | # ifdef CONFIG_FEATURE_GNUTAR_LONG_FILENAME | 149 | # ifdef CONFIG_FEATURE_GNUTAR_LONG_FILENAME |
| 136 | case 'L': { | 150 | case 'L': { |
| 137 | char *longname; | ||
| 138 | |||
| 139 | longname = xmalloc(file_header->size + 1); | 151 | longname = xmalloc(file_header->size + 1); |
| 140 | archive_xread_all(archive_handle, longname, file_header->size); | 152 | archive_xread_all(archive_handle, longname, file_header->size); |
| 141 | longname[file_header->size] = '\0'; | 153 | longname[file_header->size] = '\0'; |
| 142 | archive_handle->offset += file_header->size; | 154 | archive_handle->offset += file_header->size; |
| 143 | 155 | ||
| 144 | get_header_tar(archive_handle); | 156 | return(get_header_tar(archive_handle)); |
| 145 | file_header->name = longname; | ||
| 146 | break; | ||
| 147 | } | 157 | } |
| 148 | case 'K': { | 158 | case 'K': { |
| 149 | char *linkname; | ||
| 150 | |||
| 151 | linkname = xmalloc(file_header->size + 1); | 159 | linkname = xmalloc(file_header->size + 1); |
| 152 | archive_xread_all(archive_handle, linkname, file_header->size); | 160 | archive_xread_all(archive_handle, linkname, file_header->size); |
| 153 | linkname[file_header->size] = '\0'; | 161 | linkname[file_header->size] = '\0'; |
| 154 | archive_handle->offset += file_header->size; | 162 | archive_handle->offset += file_header->size; |
| 155 | 163 | ||
| 156 | get_header_tar(archive_handle); | ||
| 157 | file_header->name = linkname; | 164 | file_header->name = linkname; |
| 158 | break; | 165 | return(get_header_tar(archive_handle)); |
| 159 | } | 166 | } |
| 160 | # endif | 167 | # endif |
| 161 | } | 168 | } |
