From aaef3303e0a6aa9d08ac41354dd090844273141a Mon Sep 17 00:00:00 2001 From: mark Date: Thu, 26 Jan 2006 04:13:52 +0000 Subject: [PATCH] *** empty log message *** --- README | 15 +++++++++++++++ environ.lua | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100755 README create mode 100755 environ.lua diff --git a/README b/README new file mode 100755 index 0000000..80ac315 --- /dev/null +++ b/README @@ -0,0 +1,15 @@ +-- environment +os.environ +os.setenv(name, value, overwrite) +os.unsetenv(name) + +-- miscellaneous +os.sleep(seconds) + +-- file system +os.dir +file = os.file + +-- process control +pid = os.spawn(filename, {args={}, env={}, stdin=io_file, stdout=io_file, stderr=io_file}) +exitcode = os.wait(pid) diff --git a/environ.lua b/environ.lua new file mode 100755 index 0000000..1eec96f --- /dev/null +++ b/environ.lua @@ -0,0 +1,39 @@ +local getmetatable, setmetatable = getmetatable, setmetatable +local rawget, rawset, type = rawget, rawset, type +local getenv, setenv, unsetenv = os.getenv, os.setenv, os.unsetenv + +local mt = getmetatable(os) +if not mt then + mt = {} + setmetatable(os, mt) +end +module "os" + +-- metatable for os +function mt:__index(k) + if k == "environ" then + local environ = {} + -- This function needs to be written in C. + for k,v in getenvs() do + e[k] = v + end + rawset(os, "environ", environ) + end +end + +-- metatable for os.environ +mt = {} +function mt:__newindex(name, value) + if type(name) ~= "string" then + error("Expected a string key", 2) + end + if value == nil then + unsetenv(name) + elseif typeof(value) == "string" then + setenv(name, value, true) + else + error("Expected a string value", 2) + end + rawset(self,name,value) +end +environ = setmetatable({}, e)