forked from JuliaLang/julia
-
Notifications
You must be signed in to change notification settings - Fork 0
/
env.j
54 lines (41 loc) · 1.25 KB
/
env.j
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
## core libc calls ##
hasenv(var::String) =
ccall(dlsym(libc, :getenv),
Ptr{Uint8}, (Ptr{Uint8},), cstring(var)) != C_NULL
function getenv(var::String)
val = ccall(dlsym(libc, :getenv),
Ptr{Uint8}, (Ptr{Uint8},), cstring(var))
if val == C_NULL
error("getenv: Undefined variable: ", var)
end
string(val)
end
function setenv(var::String, val::String)
ret = ccall(dlsym(libc, :setenv), Int32,
(Ptr{Uint8}, Ptr{Uint8}, Int32),
cstring(var), cstring(val), 1)
system_error(:setenv, ret != 0)
end
function unsetenv(var::String)
ret = ccall(dlsym(libc, :unsetenv), Int32, (Ptr{Uint8},), var)
system_error(:unsetenv, ret != 0)
end
## ENV: hash interface ##
type EnvHash; end
ENV = EnvHash()
function ref(::EnvHash, k::String)
try
getenv(k)
catch
throw(KeyError(k))
end
end
has(::EnvHash, k::String) = hasenv(k)
del(::EnvHash, k::String) = unsetenv(k)
assign(::EnvHash, v::String, k::String) = setenv(k,v)
# TODO: make this implement Hash interface
# it should thereby inherit the ability to
# iterate its key-value pairs and display
# iteself to the world.
## misc environment functionality ##
tty_columns() = parse_int(Int32, ENV["COLUMNS"], 10)