X-Git-Url: http://nitlanguage.org diff --git a/lib/standard/environ.nit b/lib/standard/environ.nit index 504f1d3..adfbedd 100644 --- a/lib/standard/environ.nit +++ b/lib/standard/environ.nit @@ -11,29 +11,60 @@ # You are allowed to redistribute it and sell it, alone or is a part of # another product. -# Acces of the environement variables of the process +# Access to the environment variables of the process module environ -import symbol +import text +import file # TODO prevoir une structure pour recup tout un environ, le modifier et le passer a process -redef class Symbol - # Return environement value for this symbol - # If there is no such environement value, then return "" +redef class String + # Return environment value for the symbol. + # If there is no such environment variable, then return "" + # + # assert "PATH".environ != "" + # assert "NIT %\n".environ == "" fun environ: String do - var res = to_s.to_cstring.get_environ + var res = self.to_cstring.get_environ # FIXME: There is no proper way to handle NULL C string yet. What a pitty. var nulstr = once ("".to_cstring.get_environ) if res != nulstr then - return new String.from_cstring(res) + return res.to_s else return "" end end + + # Set the enviroment value of a variable. + # + # "NITis".setenv("fun") + # assert "NITis".environ == "fun" + fun setenv(v: String) do to_cstring.setenv( v.to_cstring ) + + # Search for the program `self` in all directories from `PATH` + fun program_is_in_path: Bool + do + var full_path = "PATH".environ + var paths = full_path.split(":") + for path in paths do if path.file_exists then + if path.join_path(self).file_exists then return true + end + + return false + end end redef class NativeString - private fun get_environ: NativeString is extern "string_NativeString_NativeString_get_environ_0" + private fun get_environ: NativeString `{ return getenv(self); `} + private fun setenv(value: NativeString) `{ setenv(self, value, 1); `} +end + +redef class Sys + redef init + do + var x = "NIT_SRAND".environ + if x != "" then srand_from(x.to_i) + end end