From ef91bf67ed675cd6de2cc78acd930059fbefa375 Mon Sep 17 00:00:00 2001 From: Glenn L McGrath Date: Fri, 12 Sep 2003 06:31:28 +0000 Subject: [PATCH] Use the typeflag to identify if its a hardlink on OLD and GNU posix modes, fixes a bug extracting hardlinks to symlinks. --- archival/libunarchive/get_header_tar.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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); -- 2.25.1