diff options
Diffstat (limited to 'lib/kernel/src/os.erl')
| -rw-r--r-- | lib/kernel/src/os.erl | 79 | 
1 files changed, 47 insertions, 32 deletions
| diff --git a/lib/kernel/src/os.erl b/lib/kernel/src/os.erl index f6769df585..e20a2434b4 100644 --- a/lib/kernel/src/os.erl +++ b/lib/kernel/src/os.erl @@ -1,7 +1,7 @@  %%  %% %CopyrightBegin%  %% -%% Copyright Ericsson AB 1997-2011. All Rights Reserved. +%% Copyright Ericsson AB 1997-2012. 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 @@ -24,16 +24,48 @@  -include("file.hrl"). --spec type() -> vxworks | {Osfamily, Osname} when +%%% BIFs + +-export([getenv/0, getenv/1, getpid/0, putenv/2, timestamp/0]). + +-spec getenv() -> [string()]. + +getenv() -> erlang:nif_error(undef). + +-spec getenv(VarName) -> Value | false when +      VarName :: string(), +      Value :: string(). + +getenv(_) -> +    erlang:nif_error(undef). + +-spec getpid() -> Value when +      Value :: string(). + +getpid() -> +    erlang:nif_error(undef). + +-spec putenv(VarName, Value) -> true when +      VarName :: string(), +      Value :: string(). + +putenv(_, _) -> +    erlang:nif_error(undef). + +-spec timestamp() -> Timestamp when +      Timestamp :: erlang:timestamp(). + +timestamp() -> +    erlang:nif_error(undef). + +%%% End of BIFs + +-spec type() -> {Osfamily, Osname} when        Osfamily :: unix | win32,        Osname :: atom().  type() -> -    case erlang:system_info(os_type) of -	{vxworks, _} -> -	    vxworks; -	Else -> Else -    end. +    erlang:system_info(os_type).  -spec version() -> VersionString | {Major, Minor, Release} when        VersionString :: string(), @@ -83,25 +115,14 @@ find_executable1(_Name, [], _Extensions) ->  verify_executable(Name0, [Ext|Rest], OrigExtensions) ->      Name1 = Name0 ++ Ext, -    case os:type() of -	vxworks -> -	    %% We consider all existing VxWorks files to be executable -	    case file:read_file_info(Name1) of -		{ok, _} -> -		    {ok, Name1}; -		_ -> -		    verify_executable(Name0, Rest, OrigExtensions) -	    end; +    case file:read_file_info(Name1) of +	{ok, #file_info{type=regular,mode=Mode}} +	when Mode band 8#111 =/= 0 -> +	    %% XXX This test for execution permission is not fool-proof +	    %% on Unix, since we test if any execution bit is set. +	    {ok, Name1};  	_ -> -	    case file:read_file_info(Name1) of -		{ok, #file_info{type=regular,mode=Mode}} -		when Mode band 8#111 =/= 0 -> -		    %% XXX This test for execution permission is not fool-proof -		    %% on Unix, since we test if any execution bit is set. -		    {ok, Name1}; -		_ -> -		    verify_executable(Name0, Rest, OrigExtensions) -	    end +	    verify_executable(Name0, Rest, OrigExtensions)      end;  verify_executable(Name, [], OrigExtensions) when OrigExtensions =/= [""] -> %% Windows      %% Will only happen on windows, hence case insensitivity @@ -154,8 +175,7 @@ reverse_element(List) ->  extensions() ->      case type() of  	{win32, _} -> [".exe",".com",".cmd",".bat"]; -	{unix, _} -> [""]; -	vxworks -> [""] +	{unix, _} -> [""]      end.  %% Executes the given command in the default shell for the operating system. @@ -173,11 +193,6 @@ cmd(Cmd) ->  			  {Cspec,_} -> lists:concat([Cspec," /c",Cmd])  		      end,  	    Port = open_port({spawn, Command}, [stream, in, eof, hide]), -	    get_data(Port, []); -	%% VxWorks uses a 'sh -c hook' in 'vxcall.c' to run os:cmd. -	vxworks -> -	    Command = lists:concat(["sh -c '", Cmd, "'"]), -	    Port = open_port({spawn, Command}, [stream, in, eof]),  	    get_data(Port, [])      end. | 
