Use the typeflag to identify if its a hardlink on OLD and GNU posix
authorGlenn L McGrath <bug1@ihug.co.nz>
Fri, 12 Sep 2003 06:31:28 +0000 (06:31 -0000)
committerGlenn L McGrath <bug1@ihug.co.nz>
Fri, 12 Sep 2003 06:31:28 +0000 (06:31 -0000)
modes, fixes a bug extracting hardlinks to symlinks.

archival/libunarchive/get_header_tar.c

index 55c9a22f4d3eb234cfb25df288bacaa96fad8359..b66bd322bc98a627aae123aa5745bf78e4d4ddee 100644 (file)
@@ -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);