From: Glenn L McGrath Date: Fri, 12 Sep 2003 06:31:28 +0000 (-0000) Subject: Use the typeflag to identify if its a hardlink on OLD and GNU posix X-Git-Tag: 1_00_pre3~8 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=ef91bf67ed675cd6de2cc78acd930059fbefa375;p=oweals%2Fbusybox.git Use the typeflag to identify if its a hardlink on OLD and GNU posix modes, fixes a bug extracting hardlinks to symlinks. --- diff --git a/archival/libunarchive/get_header_tar.c b/archival/libunarchive/get_header_tar.c index 55c9a22f4..b66bd322b 100644 --- a/archival/libunarchive/get_header_tar.c +++ b/archival/libunarchive/get_header_tar.c @@ -29,6 +29,7 @@ extern char get_header_tar(archive_handle_t *archive_handle) { file_header_t *file_header = archive_handle->file_header; union { + /* ustar header, Posix 1003.1 */ unsigned char raw[512]; struct { char name[100]; /* 0-99 */ @@ -128,12 +129,6 @@ extern char get_header_tar(archive_handle_t *archive_handle) file_header->mode |= S_IFREG; } break; -#if 0 - /* hard links are detected as entries with 0 size, a link name, - * and not being a symlink, hence we have nothing to do here */ - case '1': - break; -#endif case '2': file_header->mode |= S_IFLNK; break; @@ -150,6 +145,11 @@ extern char get_header_tar(archive_handle_t *archive_handle) file_header->mode |= S_IFIFO; break; # endif + /* hard links are detected as entries with 0 size, a link name, + * and not being a symlink, hence we have nothing to do here */ + case '1': + file_header->mode |= ~S_IFLNK; + break; # ifdef CONFIG_FEATURE_TAR_GNU_EXTENSIONS case 'L': { longname = xmalloc(file_header->size + 1);