1
+ import str:: sbuf;
1
2
2
3
4
+ #[ cfg( target_os = "linux" ) ]
5
+ #[ cfg( target_os = "macos" ) ]
3
6
fn getenv ( str n) -> option:: t [ str ] {
4
7
auto s = os:: libc:: getenv ( str:: buf ( n) ) ;
5
8
ret if ( s as int == 0 ) {
6
9
option:: none[ str]
7
10
} else { option:: some[ str] ( str:: str_from_cstr ( s) ) } ;
8
- }
11
+ }
12
+
13
+ #[ cfg( target_os = "linux" ) ]
14
+ #[ cfg( target_os = "macos" ) ]
15
+ fn setenv ( str n, str v) {
16
+ auto nbuf = str:: buf ( n) ;
17
+ auto vbuf = str:: buf ( v) ;
18
+ os:: libc:: setenv ( nbuf, vbuf, 1 ) ;
19
+ }
20
+
21
+ #[ cfg( target_os = "win32" ) ]
22
+ fn getenv ( str n) -> option:: t [ str ] {
23
+ auto nbuf = str:: buf ( n) ;
24
+ auto nsize = 256 u;
25
+ while ( true ) {
26
+ auto vstr = str:: alloc ( nsize - 1 u) ;
27
+ auto vbuf = str:: buf ( vstr) ;
28
+ auto res = os:: kernel32:: GetEnvironmentVariableA ( nbuf, vbuf, nsize) ;
29
+ if ( res == 0 u) {
30
+ ret option:: none;
31
+ } else if ( res < nsize) {
32
+ ret option:: some ( str:: str_from_cstr ( vbuf) ) ;
33
+ } else {
34
+ nsize = res;
35
+ }
36
+ }
37
+ fail;
38
+ }
39
+
40
+ #[ cfg( target_os = "win32" ) ]
41
+ fn setenv ( str n, str v) {
42
+ auto nbuf = str:: buf ( n) ;
43
+ auto vbuf = str:: buf ( v) ;
44
+ os:: kernel32:: SetEnvironmentVariableA ( nbuf, vbuf) ;
45
+ }
46
+
47
+ // Local Variables:
48
+ // mode: rust;
49
+ // fill-column: 78;
50
+ // indent-tabs-mode: nil
51
+ // c-basic-offset: 4
52
+ // buffer-file-coding-system: utf-8-unix
53
+ // compile-command: "make -k -C .. 2>&1 | sed -e 's/\\/x\\//x:\\//g'";
54
+ // End:
0 commit comments