Skip to content

Commit c31198a

Browse files
committed
---
yaml --- r: 22751 b: refs/heads/master c: 4378e7e h: refs/heads/master i: 22749: 7e6b7d7 22747: 3233cd6 22743: a602282 22735: 58274f6 22719: 4d49670 v: v3
1 parent ea8d77f commit c31198a

File tree

2 files changed

+31
-13
lines changed

2 files changed

+31
-13
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: 43867bf6f333049ede4611c9eace092bfc2b9696
2+
refs/heads/master: 4378e7ead19b48bc13cb196e3926a8cda3432ec8
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: cd6f24f9d14ac90d167386a56e7a6ac1f0318195
55
refs/heads/try: ffbe0e0e00374358b789b0037bcb3a577cd218be

trunk/src/libcore/os.rs

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ export walk_dir;
4141
export as_c_charp, fill_charp_buf;
4242

4343
extern mod rustrt {
44-
fn rust_env_pairs() -> ~[~str];
4544
fn rust_getcwd() -> ~str;
4645
fn rust_path_is_dir(path: *libc::c_char) -> c_int;
4746
fn rust_path_exists(path: *libc::c_char) -> c_int;
@@ -52,16 +51,6 @@ extern mod rustrt {
5251
}
5352

5453

55-
fn env() -> ~[(~str,~str)] {
56-
let mut pairs = ~[];
57-
for vec::each(rustrt::rust_env_pairs()) |p| {
58-
let vs = str::splitn_char(p, '=', 1u);
59-
assert vec::len(vs) == 2u;
60-
vec::push(pairs, (vs[0], vs[1]));
61-
}
62-
ret pairs;
63-
}
64-
6554
const tmpbuf_sz : uint = 1000u;
6655

6756
fn as_c_charp<T>(s: ~str, f: fn(*c_char) -> T) -> T {
@@ -130,19 +119,25 @@ fn setenv(n: ~str, v: ~str) {
130119
global_env::setenv(n, v)
131120
}
132121

122+
fn env() -> ~[(~str,~str)] {
123+
global_env::env()
124+
}
125+
133126
mod global_env {
134127
//! Internal module for serializing access to getenv/setenv
135128
136129
export getenv;
137130
export setenv;
131+
export env;
138132

139133
extern mod rustrt {
140134
fn rust_global_env_chan_ptr() -> *libc::uintptr_t;
141135
}
142136

143137
enum msg {
144138
msg_getenv(~str, comm::chan<option<~str>>),
145-
msg_setenv(~str, ~str, comm::chan<()>)
139+
msg_setenv(~str, ~str, comm::chan<()>),
140+
msg_env(comm::chan<~[(~str,~str)]>)
146141
}
147142

148143
fn getenv(n: ~str) -> option<~str> {
@@ -159,6 +154,13 @@ mod global_env {
159154
comm::recv(po)
160155
}
161156

157+
fn env() -> ~[(~str,~str)] {
158+
let env_ch = get_global_env_chan();
159+
let po = comm::port();
160+
comm::send(env_ch, msg_env(comm::chan(po)));
161+
comm::recv(po)
162+
}
163+
162164
fn get_global_env_chan() -> comm::chan<msg> {
163165
let global_ptr = rustrt::rust_global_env_chan_ptr();
164166
let task_build_fn = || {
@@ -183,6 +185,9 @@ mod global_env {
183185
either::left(msg_setenv(n, v, resp_ch)) {
184186
comm::send(resp_ch, impl::setenv(n, v))
185187
}
188+
either::left(msg_env(resp_ch)) {
189+
comm::send(resp_ch, impl::env())
190+
}
186191
either::right(_) {
187192
break;
188193
}
@@ -193,6 +198,19 @@ mod global_env {
193198
}
194199

195200
mod impl {
201+
extern mod rustrt {
202+
fn rust_env_pairs() -> ~[~str];
203+
}
204+
205+
fn env() -> ~[(~str,~str)] {
206+
let mut pairs = ~[];
207+
for vec::each(rustrt::rust_env_pairs()) |p| {
208+
let vs = str::splitn_char(p, '=', 1u);
209+
assert vec::len(vs) == 2u;
210+
vec::push(pairs, (vs[0], vs[1]));
211+
}
212+
ret pairs;
213+
}
196214

197215
#[cfg(unix)]
198216
fn getenv(n: ~str) -> option<~str> {

0 commit comments

Comments
 (0)