anchor.diff:                                              Name = reverse(RevName),
                                               {true, {Status, [Name | Names]}}
                                       end;
  -                                ["", RevName | FD] when FD =:= FunnyDir ->
  +                                ["", RevName | DC] when DC =:= DirComponents ->
                                       %% Directory
                                       Name = reverse(RevName),
                                       {true, {Status, [Name | Names]}};
  -                                [RevName] when FunnyDir =:= [""] ->
  -                                    %% Top file
  +                                [RevName] when DirComponents =:= [""] ->
  +                                    %% File in top directory
                                       Name = reverse(RevName),
                                       {true, {ok, [Name | Names]}};
  -                                ["", RevName] when FunnyDir =:= [""] ->
  -                                    %% Top file
  +                                ["", RevName] when DirComponents =:= [""] ->
  +                                    %% Directory in top directory
                                       Name = reverse(RevName),
                                       {true, {ok, [Name | Names]}};
                                   _ ->
  
positive.code: 	    {error, Reason}
      end.
  
  open_archive(Archive, FileInfo, Acc, Fun) ->
      FakeFI = FileInfo#file_info{type = directory},
      Wrapper =
  	fun({N, GI, GB}, {A, I, FunnyDirs}) -> % Full iteration at open
  		Funny = funny_split(N, $/),
  		FunnyDirs2 =
  		    case Funny of
  			["" | FunnyDir] ->
  			    [FunnyDir | FunnyDirs];
  			_ ->
  			    FunnyDirs
  		    end,
  		{Includes, FunnyDirs3, A2} = 
  		    ensure_virtual_dirs(Funny, Fun, FakeFI, [{true, Funny}], FunnyDirs2, A),
  		{_Continue, A3} = Fun({Funny, GI, GB}, A2),
  		{true, Includes, {A3, I, FunnyDirs3}}
  	end,
      prim_zip:open(Wrapper, {Acc, FakeFI, []}, Archive).
  
  ensure_virtual_dirs(Funny, Fun, FakeFI, Includes, FunnyDirs, Acc) ->
      case Funny of
  	[_] ->
  	    {Includes, FunnyDirs, Acc};
  	[_ | FunnyDir] ->
  	    case lists:member(FunnyDir, FunnyDirs) of % BIF
  		false ->
  		    GetInfo = fun() -> FakeFI end,
  		    GetBin = fun() -> <<>> end,
  		    VirtualDir = ["" | FunnyDir],
  		    Includes2 = [{true, VirtualDir, GetInfo, GetBin} | Includes],
  		    FunnyDirs2 = [FunnyDir | FunnyDirs],
  		    {I, F, Acc2} = ensure_virtual_dirs(FunnyDir, Fun, FakeFI, Includes2, FunnyDirs2, Acc),
  		    {_Continue, Acc3} = Fun({VirtualDir, GetInfo, GetBin}, Acc2),
  		    {I, F, Acc3};
  		true ->
  		    ensure_virtual_dirs(FunnyDir,Fun,FakeFI,Includes,FunnyDirs,Acc)
  	    end
     end.
  
  foldl_archive(PrimZip, Acc, Fun) ->
      Wrapper =
          fun({Funny, GI, GB}, A) ->
                  %% Allow partial iteration at foldl
                  {Continue, A2} = Fun({Funny, GI, GB}, A),
                  {Continue, true, A2}
          end,                        
      prim_zip:foldl(Wrapper, Acc, PrimZip).
  
negative.code:                 end;
              {archive, ArchiveFile, FileInArchive} ->
                  debug(PS, {archive_read_file_info, File}),
                  FileComponents = path_split(FileInArchive),
                  Fun =
                      fun({Components, GetInfo, _GetBin}, Acc)  ->
  			    case Components of
  				["" | F] when F =:= FileComponents ->
                                      %% Directory
                                      {false, {ok, GetInfo()}};
                                  F when F =:= FileComponents ->
                                      %% Plain file
                                      {false, {ok, GetInfo()}};
                                  _ ->
  