 
 ! Normal file
 : typeflag-0 ( header -- )
-    dup name>> dup "global_pax_header" = [
-        drop [ read-data-blocks ] with-string-writer drop
-    ] [
-        prepend-current-directory read/write-blocks
-    ] if ;
-
-! Hard link
+    dup name>> prepend-current-directory read/write-blocks ;
+
+TUPLE: hard-link linkname name ;
+C: <hard-link> hard-link
+
+TUPLE: symbolic-link linkname name ;
+C: <symbolic-link> symbolic-link
+
+! Hard link, don't call normalize-path
 : typeflag-1 ( header -- )
-    [ name>> ] [ linkname>> ] bi make-hard-link ;
-
-! Symlink
+    [ linkname>> ] [ name>> ] bi <hard-link> save-link ;
+
+! Symlink, don't call normalize-path
 : typeflag-2 ( header -- )
-    [ name>> ] [ linkname>> ] bi make-link ;
+    [ linkname>> ] [ name>> ] bi <symbolic-link> save-link ;
 
 ! character special
 : typeflag-3 ( header -- ) unknown-typeflag ;

        drop
    ] if ;

: untar ( path -- )
    normalize-path dup parent-directory [
         binary [ parse-tar ] with-file-reader
    ] with-directory ;

: typeflag-9 ( header -- ) unknown-typeflag ;

! Global POSIX header
: typeflag-g ( header -- )
    ! Read something like: 52 comment=9f2a940965286754f3a34d5737c3097c05db8725
    ! and drop it
    [ read-data-blocks ] with-string-writer drop ;

! Extended POSIX header
: typeflag-x ( header -- ) unknown-typeflag ;
