aboutsummaryrefslogtreecommitdiffstats
path: root/lib/stdlib/test/escript_SUITE_data/archive_script_file_access/archive_script_file_access.erl
blob: 523621e4f33cb8bf29032eaeea8862f84f29351c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
%%
%% %CopyrightBegin%
%%
%% Copyright Ericsson AB 2012-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
%% compliance with the License. You should have received a copy of the
%% Erlang Public License along with this software. If not, it can be
%% retrieved online at http://www.erlang.org/.
%%
%% Software distributed under the License is distributed on an "AS IS"
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%% the License for the specific language governing rights and limitations
%% under the License.
%%
%% %CopyrightEnd%
%%
-module(archive_script_file_access).
-behaviour(escript).

-export([main/1]).

-include_lib("kernel/include/file.hrl").

main([RelArchiveFile]) ->

    AbsArchiveFile = filename:absname(RelArchiveFile),
    DotSlashArchiveFile = "./" ++ RelArchiveFile,

    Beam = atom_to_list(?MODULE) ++ ".beam",
    AbsBeam = filename:join(AbsArchiveFile,Beam),
    RelBeam = filename:join(RelArchiveFile,Beam),
    DotSlashBeam = filename:join(DotSlashArchiveFile,Beam),
    Dir = "dir1",
    AbsDir = filename:join(AbsArchiveFile,Dir),
    RelDir = filename:join(RelArchiveFile,Dir),
    DotSlashDir = filename:join(DotSlashArchiveFile,Dir),
    SubDir = "subdir1",
    AbsSubDir = filename:join(AbsDir,SubDir),
    RelSubDir = filename:join(RelDir,SubDir),
    DotSlashSubDir = filename:join(DotSlashDir,SubDir),

    {ok,List1} = erl_prim_loader:list_dir(AbsArchiveFile),
    {ok,List1} = erl_prim_loader:list_dir(RelArchiveFile),
    {ok,List1} = erl_prim_loader:list_dir(DotSlashArchiveFile),
    {ok,List1} = erl_prim_loader:list_dir(AbsArchiveFile ++ "/"),
    {ok,List1} = erl_prim_loader:list_dir(AbsArchiveFile ++ "/."),
    {ok,List1} = erl_prim_loader:list_dir(filename:join([AbsDir,".."])),
    {ok,List1} = erl_prim_loader:list_dir(filename:join([RelDir,".."])),
    {ok,List1} = erl_prim_loader:list_dir(filename:join([DotSlashDir,".."])),
    {ok,List1} = erl_prim_loader:list_dir(filename:join([AbsSubDir,"..",".."])),
    {ok,List1} = erl_prim_loader:list_dir(filename:join([RelSubDir,"..",".."])),
    {ok,List1} = erl_prim_loader:list_dir(filename:join([DotSlashSubDir,"..",".."])),
    false = lists:member([],List1),

    %% If symlinks are supported on this platform...
    RelSymlinkArchiveFile = "symlink_to_" ++ RelArchiveFile,
    case element(1,os:type()) =:= win32 orelse file:read_link(RelSymlinkArchiveFile) of
	{ok,_} ->
	    DotSlashSymlinkArchiveFile = "./" ++ RelSymlinkArchiveFile,
	    AbsSymlinkArchiveFile=filename:join(filename:dirname(AbsArchiveFile),
						RelSymlinkArchiveFile),
	    {ok,List1} = erl_prim_loader:list_dir(AbsSymlinkArchiveFile),
	    {ok,List1} = erl_prim_loader:list_dir(RelSymlinkArchiveFile),
	    {ok,List1} = erl_prim_loader:list_dir(DotSlashSymlinkArchiveFile);
	_ -> % not supported
	    ok
    end,


    {ok,List2} = erl_prim_loader:list_dir(AbsDir),
    {ok,List2} = erl_prim_loader:list_dir(RelDir),
    {ok,List2} = erl_prim_loader:list_dir(DotSlashDir),
    false = lists:member([],List2),

    error = erl_prim_loader:list_dir(AbsBeam),
    error = erl_prim_loader:list_dir(RelBeam),
    error = erl_prim_loader:list_dir(DotSlashBeam),

    error = erl_prim_loader:get_file(AbsArchiveFile),
    error = erl_prim_loader:get_file(RelArchiveFile),
    error = erl_prim_loader:get_file(DotSlashArchiveFile),
    error = erl_prim_loader:get_file(AbsArchiveFile ++ "/"),
    error = erl_prim_loader:get_file(AbsArchiveFile ++ "/."),
    {ok,Bin,AbsBeam} = erl_prim_loader:get_file(AbsBeam),
    {ok,Bin,RelBeam} = erl_prim_loader:get_file(RelBeam),
    {ok,Bin,DotSlashBeam} = erl_prim_loader:get_file(DotSlashBeam),

    {ok,#file_info{type=directory}=DFI} =
	erl_prim_loader:read_file_info(AbsArchiveFile),
    {ok,DFI} = erl_prim_loader:read_file_info(RelArchiveFile),
    {ok,DFI} = erl_prim_loader:read_file_info(DotSlashArchiveFile),
    {ok,DFI} = erl_prim_loader:read_file_info(AbsArchiveFile ++ "/"),
    {ok,DFI} = erl_prim_loader:read_file_info(AbsArchiveFile ++ "/."),
    {ok,#file_info{type=regular}=RFI} = erl_prim_loader:read_file_info(AbsBeam),
    {ok,RFI} = erl_prim_loader:read_file_info(RelBeam),
    {ok,RFI} = erl_prim_loader:read_file_info(DotSlashBeam),

    F = AbsArchiveFile ++ ".extension",
    error = erl_prim_loader:list_dir(F),
    {ok,_,_} = erl_prim_loader:get_file(F),
    {ok,#file_info{type=regular}} = erl_prim_loader:read_file_info(F),

    ok.