Skip to content

Commit 34d197d

Browse files
committed
Remove last users of str::sbuf. Issue #855
1 parent b714150 commit 34d197d

File tree

8 files changed

+91
-73
lines changed

8 files changed

+91
-73
lines changed

src/lib/generic_os.rs

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
import str::sbuf;
1+
import istr::sbuf;
22

33

44
#[cfg(target_os = "linux")]
55
#[cfg(target_os = "macos")]
66
fn getenv(n: &istr) -> option::t<istr> {
7-
let n = istr::to_estr(n);
8-
let s = os::libc::getenv(str::buf(n));
9-
ret if s as int == 0 {
7+
let s = istr::as_buf(n, { |buf|
8+
os::libc::getenv(buf)
9+
});
10+
ret if unsafe::reinterpret_cast(s) == 0 {
1011
option::none::<istr>
1112
} else {
1213
let s = unsafe::reinterpret_cast(s);
@@ -17,39 +18,43 @@ fn getenv(n: &istr) -> option::t<istr> {
1718
#[cfg(target_os = "linux")]
1819
#[cfg(target_os = "macos")]
1920
fn setenv(n: &istr, v: &istr) {
20-
let n = istr::to_estr(n);
21-
let v = istr::to_estr(v);
22-
let nbuf = str::buf(n);
23-
let vbuf = str::buf(v);
24-
os::libc::setenv(nbuf, vbuf, 1);
21+
// FIXME (868)
22+
let _: () = istr::as_buf(n, { |nbuf|
23+
// FIXME (868)
24+
let _: () = istr::as_buf(v, { |vbuf|
25+
os::libc::setenv(nbuf, vbuf, 1);
26+
});
27+
});
2528
}
2629

2730
#[cfg(target_os = "win32")]
2831
fn getenv(n: &istr) -> option::t<istr> {
29-
let n = istr::to_estr(n);
30-
let nbuf = str::buf(n);
3132
let nsize = 256u;
3233
while true {
33-
let vstr = str::alloc(nsize - 1u);
34-
let vbuf = str::buf(vstr);
35-
let res = os::kernel32::GetEnvironmentVariableA(nbuf, vbuf, nsize);
34+
let v: [u8] = [];
35+
vec::reserve(v, nsize);
36+
let res = istr::as_buf(n, { |nbuf|
37+
let vbuf = vec::to_ptr(v);
38+
os::kernel32::GetEnvironmentVariableA(nbuf, vbuf, nsize)
39+
});
3640
if res == 0u {
3741
ret option::none;
3842
} else if res < nsize {
39-
let vbuf = unsafe::reinterpret_cast(vbuf);
40-
ret option::some(istr::str_from_cstr(vbuf));
43+
vec::unsafe::set_len(v, res);
44+
ret option::some(istr::unsafe_from_bytes(v));
4145
} else { nsize = res; }
4246
}
4347
fail;
4448
}
4549

4650
#[cfg(target_os = "win32")]
4751
fn setenv(n: &istr, v: &istr) {
48-
let n = istr::to_estr(n);
49-
let v = istr::to_estr(v);
50-
let nbuf = str::buf(n);
51-
let vbuf = str::buf(v);
52-
os::kernel32::SetEnvironmentVariableA(nbuf, vbuf);
52+
// FIXME (868)
53+
let _: () = istr::as_buf(n, { |nbuf|
54+
let _: () = istr::as_buf(v, { |vbuf|
55+
os::kernel32::SetEnvironmentVariableA(nbuf, vbuf);
56+
});
57+
});
5358
}
5459

5560
// Local Variables:

src/lib/io.rs

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -175,10 +175,12 @@ fn stdin() -> reader {
175175
}
176176

177177
fn file_reader(path: &istr) -> reader {
178-
let path = istr::to_estr(path);
179-
let mode = "r";
180-
let f = os::libc::fopen(str::buf(path), str::buf(mode));
181-
if f as uint == 0u { log_err "error opening " + path; fail; }
178+
let f = istr::as_buf(path, { |pathbuf|
179+
istr::as_buf(~"r", { |modebuf|
180+
os::libc::fopen(pathbuf, modebuf)
181+
})
182+
});
183+
if f as uint == 0u { log_err ~"error opening " + path; fail; }
182184
ret new_reader(FILE_buf_reader(f, option::some(@FILE_res(f))));
183185
}
184186
@@ -278,7 +280,6 @@ obj fd_buf_writer(fd: int, res: option::t<@fd_res>) {
278280
}
279281

280282
fn file_buf_writer(path: &istr, flags: &[fileflag]) -> buf_writer {
281-
let path = istr::to_estr(path);
282283
let fflags: int =
283284
os::libc_constants::O_WRONLY() | os::libc_constants::O_BINARY();
284285
for f: fileflag in flags {
@@ -289,10 +290,11 @@ fn file_buf_writer(path: &istr, flags: &[fileflag]) -> buf_writer {
289290
none. { }
290291
}
291292
}
292-
let fd =
293-
os::libc::open(str::buf(path), fflags,
293+
let fd = istr::as_buf(path, { |pathbuf|
294+
os::libc::open(pathbuf, fflags,
294295
os::libc_constants::S_IRUSR() |
295-
os::libc_constants::S_IWUSR());
296+
os::libc_constants::S_IWUSR())
297+
});
296298
if fd < 0 {
297299
log_err "error opening file for writing";
298300
log_err sys::rustrt::last_os_error();
@@ -365,10 +367,12 @@ fn file_writer(path: &istr, flags: &[fileflag]) -> writer {
365367

366368
// FIXME: fileflags
367369
fn buffered_file_buf_writer(path: &istr) -> buf_writer {
368-
let path = istr::to_estr(path);
369-
let mode = "w";
370-
let f = os::libc::fopen(str::buf(path), str::buf(mode));
371-
if f as uint == 0u { log_err "error opening " + path; fail; }
370+
let f = istr::as_buf(path, { |pathbuf|
371+
istr::as_buf(~"w", { |modebuf|
372+
os::libc::fopen(pathbuf, modebuf)
373+
})
374+
});
375+
if f as uint == 0u { log_err ~"error opening " + path; fail; }
372376
ret FILE_writer(f, option::some(@FILE_res(f)));
373377
}
374378

src/lib/linux_os.rs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11

2-
import str::sbuf;
3-
42

53
// FIXME Somehow merge stuff duplicated here and macosx_os.rs. Made difficult
64
// by https://github.com/graydon/rust/issues#issue/268
@@ -9,25 +7,25 @@ native "cdecl" mod libc = "" {
97
fn write(fd: int, buf: *u8, count: uint) -> int;
108
fn fread(buf: *u8, size: uint, n: uint, f: libc::FILE) -> uint;
119
fn fwrite(buf: *u8, size: uint, n: uint, f: libc::FILE) -> uint;
12-
fn open(s: sbuf, flags: int, mode: uint) -> int;
10+
fn open(s: istr::sbuf, flags: int, mode: uint) -> int;
1311
fn close(fd: int) -> int;
1412
type FILE;
15-
fn fopen(path: sbuf, mode: sbuf) -> FILE;
16-
fn fdopen(fd: int, mode: sbuf) -> FILE;
13+
fn fopen(path: istr::sbuf, mode: istr::sbuf) -> FILE;
14+
fn fdopen(fd: int, mode: istr::sbuf) -> FILE;
1715
fn fclose(f: FILE);
1816
fn fgetc(f: FILE) -> int;
1917
fn ungetc(c: int, f: FILE);
2018
fn feof(f: FILE) -> int;
2119
fn fseek(f: FILE, offset: int, whence: int) -> int;
2220
fn ftell(f: FILE) -> int;
2321
type dir;
24-
fn opendir(d: sbuf) -> dir;
22+
fn opendir(d: istr::sbuf) -> dir;
2523
fn closedir(d: dir) -> int;
2624
type dirent;
2725
fn readdir(d: dir) -> dirent;
28-
fn getenv(n: sbuf) -> sbuf;
29-
fn setenv(n: sbuf, v: sbuf, overwrite: int) -> int;
30-
fn unsetenv(n: sbuf) -> int;
26+
fn getenv(n: istr::sbuf) -> istr::sbuf;
27+
fn setenv(n: istr::sbuf, v: istr::sbuf, overwrite: int) -> int;
28+
fn unsetenv(n: istr::sbuf) -> int;
3129
fn pipe(buf: *mutable int) -> int;
3230
fn waitpid(pid: int, status: &mutable int, options: int) -> int;
3331
}
@@ -64,7 +62,11 @@ fn pipe() -> {in: int, out: int} {
6462
ret {in: fds.in, out: fds.out};
6563
}
6664

67-
fn fd_FILE(fd: int) -> libc::FILE { ret libc::fdopen(fd, str::buf("r")); }
65+
fn fd_FILE(fd: int) -> libc::FILE {
66+
ret istr::as_buf(~"r", { |modebuf|
67+
libc::fdopen(fd, modebuf)
68+
});
69+
}
6870
6971
fn waitpid(pid: int) -> int {
7072
let status = 0;

src/lib/macos_os.rs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,28 @@
11

2-
import str::sbuf;
3-
42
native "cdecl" mod libc = "" {
53
fn read(fd: int, buf: *u8, count: uint) -> int;
64
fn write(fd: int, buf: *u8, count: uint) -> int;
75
fn fread(buf: *u8, size: uint, n: uint, f: libc::FILE) -> uint;
86
fn fwrite(buf: *u8, size: uint, n: uint, f: libc::FILE) -> uint;
9-
fn open(s: sbuf, flags: int, mode: uint) -> int;
7+
fn open(s: istr::sbuf, flags: int, mode: uint) -> int;
108
fn close(fd: int) -> int;
119
type FILE;
12-
fn fopen(path: sbuf, mode: sbuf) -> FILE;
13-
fn fdopen(fd: int, mode: sbuf) -> FILE;
10+
fn fopen(path: istr::sbuf, mode: istr::sbuf) -> FILE;
11+
fn fdopen(fd: int, mode: istr::sbuf) -> FILE;
1412
fn fclose(f: FILE);
1513
fn fgetc(f: FILE) -> int;
1614
fn ungetc(c: int, f: FILE);
1715
fn feof(f: FILE) -> int;
1816
fn fseek(f: FILE, offset: int, whence: int) -> int;
1917
fn ftell(f: FILE) -> int;
2018
type dir;
21-
fn opendir(d: sbuf) -> dir;
19+
fn opendir(d: istr::sbuf) -> dir;
2220
fn closedir(d: dir) -> int;
2321
type dirent;
2422
fn readdir(d: dir) -> dirent;
25-
fn getenv(n: sbuf) -> sbuf;
26-
fn setenv(n: sbuf, v: sbuf, overwrite: int) -> int;
27-
fn unsetenv(n: sbuf) -> int;
23+
fn getenv(n: istr::sbuf) -> istr::sbuf;
24+
fn setenv(n: istr::sbuf, v: istr::sbuf, overwrite: int) -> int;
25+
fn unsetenv(n: istr::sbuf) -> int;
2826
fn pipe(buf: *mutable int) -> int;
2927
fn waitpid(pid: int, status: &mutable int, options: int) -> int;
3028
}
@@ -61,7 +59,11 @@ fn pipe() -> {in: int, out: int} {
6159
ret {in: fds.in, out: fds.out};
6260
}
6361

64-
fn fd_FILE(fd: int) -> libc::FILE { ret libc::fdopen(fd, str::buf("r")); }
62+
fn fd_FILE(fd: int) -> libc::FILE {
63+
ret istr::as_buf(~"r", { |modebuf|
64+
libc::fdopen(fd, modebuf)
65+
});
66+
}
6567
6668
fn waitpid(pid: int) -> int {
6769
let status = 0;

src/lib/run_program.rs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
import str::sbuf;
2+
import istr::sbuf;
33

44
export program;
55
export run_program;
@@ -12,19 +12,21 @@ native "rust" mod rustrt {
1212
int;
1313
}
1414

15-
fn arg_vec(prog: str, args: &[str]) -> [sbuf] {
16-
let argptrs = [str::buf(prog)];
17-
for arg: str in args { argptrs += [str::buf(arg)]; }
18-
argptrs += [0 as sbuf];
15+
fn arg_vec(prog: &istr, args: &[@istr]) -> [sbuf] {
16+
let argptrs = istr::as_buf(prog, { |buf| [buf] });
17+
for arg in args {
18+
argptrs += istr::as_buf(*arg, { |buf| [buf] });
19+
}
20+
argptrs += [unsafe::reinterpret_cast(0)];
1921
ret argptrs;
2022
}
2123

2224
fn spawn_process(prog: &istr, args: &[istr], in_fd: int, out_fd: int,
2325
err_fd: int) -> int {
24-
let prog = istr::to_estr(prog);
25-
let args = istr::to_estrs(args);
26-
// Note: we have to hold on to this vector reference while we hold a
27-
// pointer to its buffer
26+
// Note: we have to hold on to these vector references while we hold a
27+
// pointer to their buffers
28+
let prog = prog;
29+
let args = vec::map({ |&arg| @arg }, args);
2830
let argv = arg_vec(prog, args);
2931
let pid =
3032
rustrt::rust_run_program(vec::unsafe::to_ptr(argv),

src/lib/str.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
import rustrt::sbuf;
33
import uint::le;
4-
export sbuf;
4+
// export sbuf;
55
// export rustrt;
66
// export eq;
77
// export lteq;
@@ -10,7 +10,7 @@ export sbuf;
1010
// export is_ascii;
1111
export alloc;
1212
// export byte_len;
13-
export buf;
13+
// export buf;
1414
// export bytes;
1515
// export unsafe_from_byte;
1616
// export str_from_cstr;

src/lib/win32_os.rs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11

2-
import str::sbuf;
3-
42
native "cdecl" mod libc = "" {
53
fn read(fd: int, buf: *u8, count: uint) -> int;
64
fn write(fd: int, buf: *u8, count: uint) -> int;
75
fn fread(buf: *u8, size: uint, n: uint, f: libc::FILE) -> uint;
86
fn fwrite(buf: *u8, size: uint, n: uint, f: libc::FILE) -> uint;
9-
fn open(s: sbuf, flags: int, mode: uint) -> int = "_open";
7+
fn open(s: istr::sbuf, flags: int, mode: uint) -> int = "_open";
108
fn close(fd: int) -> int = "_close";
119
type FILE;
12-
fn fopen(path: sbuf, mode: sbuf) -> FILE;
13-
fn _fdopen(fd: int, mode: sbuf) -> FILE;
10+
fn fopen(path: istr::sbuf, mode: istr::sbuf) -> FILE;
11+
fn _fdopen(fd: int, mode: istr::sbuf) -> FILE;
1412
fn fclose(f: FILE);
1513
fn fgetc(f: FILE) -> int;
1614
fn ungetc(c: int, f: FILE);
@@ -42,8 +40,9 @@ mod libc_constants {
4240
}
4341

4442
native "x86stdcall" mod kernel32 {
45-
fn GetEnvironmentVariableA(n: sbuf, v: sbuf, nsize: uint) -> uint;
46-
fn SetEnvironmentVariableA(n: sbuf, v: sbuf) -> int;
43+
fn GetEnvironmentVariableA(n: istr::sbuf, v: istr::sbuf,
44+
nsize: uint) -> uint;
45+
fn SetEnvironmentVariableA(n: istr::sbuf, v: istr::sbuf) -> int;
4746
}
4847

4948
fn exec_suffix() -> istr { ret ~".exe"; }
@@ -69,7 +68,11 @@ fn pipe() -> {in: int, out: int} {
6968
ret {in: fds.in, out: fds.out};
7069
}
7170

72-
fn fd_FILE(fd: int) -> libc::FILE { ret libc::_fdopen(fd, str::buf("r")); }
71+
fn fd_FILE(fd: int) -> libc::FILE {
72+
ret istr::as_buf(~"r", { |modebuf|
73+
libc::_fdopen(fd, modebuf)
74+
});
75+
}
7376
7477
native "rust" mod rustrt {
7578
fn rust_process_wait(handle: int) -> int;

src/test/compile-fail/native-type-mismatch.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// error-pattern:expected native but found native
1+
// error-pattern:expected *Mb but found native
22
use std;
33

44
fn main() {

0 commit comments

Comments
 (0)