Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
365f1748
R
Rust
项目概览
int
/
Rust
大约 1 年 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
365f1748
编写于
10月 03, 2012
作者:
G
Graydon Hoare
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Attempt to fix os::args errors on various platforms.
上级
72b7a770
变更
6
显示空白变更内容
内联
并排
Showing
6 changed file
with
42 addition
and
17 deletion
+42
-17
src/libcore/os.rs
src/libcore/os.rs
+21
-13
src/rt/rust.cpp
src/rt/rust.cpp
+1
-1
src/rt/rust_builtin.cpp
src/rt/rust_builtin.cpp
+12
-0
src/rt/rust_env.cpp
src/rt/rust_env.cpp
+3
-2
src/rt/rust_env.h
src/rt/rust_env.h
+3
-1
src/rt/rustrt.def.in
src/rt/rustrt.def.in
+2
-0
未找到文件。
src/libcore/os.rs
浏览文件 @
365f1748
...
...
@@ -32,6 +32,8 @@
// FIXME: move these to str perhaps? #2620
extern
mod
rustrt
{
fn
rust_get_argc
()
->
c_int
;
fn
rust_get_argv
()
->
**
c_char
;
fn
rust_getcwd
()
->
~
str
;
fn
rust_path_is_dir
(
path
:
*
libc
::
c_char
)
->
c_int
;
fn
rust_path_exists
(
path
:
*
libc
::
c_char
)
->
c_int
;
...
...
@@ -732,6 +734,14 @@ pub fn set_exit_status(code: int) {
rustrt
::
rust_set_exit_status
(
code
as
libc
::
intptr_t
);
}
unsafe
fn
load_argc_and_argv
(
argc
:
c_int
,
argv
:
**
c_char
)
->
~
[
~
str
]
{
let
mut
args
=
~
[];
for
uint
::
range
(
0
,
argc
as
uint
)
|
i
|
{
vec
::
push
(
&
mut
args
,
str
::
raw
::
from_c_str
(
*
argv
.offset
(
i
)));
}
return
args
;
}
/**
* Returns the command line arguments
*
...
...
@@ -740,23 +750,20 @@ pub fn set_exit_status(code: int) {
#[cfg(target_os
=
"macos"
)]
fn
real_args
()
->
~
[
~
str
]
{
unsafe
{
let
(
argc
,
argv
)
=
(
*
_
NSGetArgc
()
as
uint
,
*
_
NSGetArgv
());
let
mut
args
=
~
[];
for
uint
::
range
(
0
,
argc
)
|
i
|
{
vec
::
push
(
&
mut
args
,
str
::
raw
::
from_c_str
(
*
argv
.offset
(
i
)));
}
return
args
;
let
(
argc
,
argv
)
=
(
*
_
NSGetArgc
()
as
c_int
,
*
_
NSGetArgv
()
as
**
c_char
);
load_argc_and_argv
(
argc
,
argv
)
}
}
#[cfg(target_os
=
"linux"
)]
fn
real_args
()
->
~
[
~
str
]
{
fail
// Needs implementing.
}
#[cfg(target_os
=
"freebsd"
)]
fn
real_args
()
->
~
[
~
str
]
{
fail
// Needs implementing.
unsafe
{
let
argc
=
rustrt
::
rust_get_argc
();
let
argv
=
rustrt
::
rust_get_argv
();
load_argc_and_argv
(
argc
,
argv
)
}
}
#[cfg(windows)]
...
...
@@ -775,7 +782,8 @@ fn real_args() -> ~[~str] {
while
*
ptr
.offset
(
len
)
!=
0
{
len
+=
1
;
}
// Push it onto the list.
vec
::
push
(
&
mut
args
,
vec
::
raw
::
form_slice
(
ptr
,
len
,
vec
::
push
(
&
mut
args
,
vec
::
raw
::
buf_as_slice
(
ptr
,
len
,
str
::
from_utf16
));
}
}
...
...
src/rt/rust.cpp
浏览文件 @
365f1748
...
...
@@ -86,7 +86,7 @@ rust_start(uintptr_t main_fn, int argc, char **argv, void* crate_map) {
// Load runtime configuration options from the environment.
// FIXME #1497: Should provide a way to get these from the command
// line as well.
rust_env
*
env
=
load_env
();
rust_env
*
env
=
load_env
(
argc
,
argv
);
global_crate_map
=
crate_map
;
...
...
src/rt/rust_builtin.cpp
浏览文件 @
365f1748
...
...
@@ -588,6 +588,18 @@ rust_num_threads() {
return
task
->
kernel
->
env
->
num_sched_threads
;
}
extern
"C"
CDECL
int
rust_get_argc
()
{
rust_task
*
task
=
rust_get_current_task
();
return
task
->
kernel
->
env
->
argc
;
}
extern
"C"
CDECL
char
**
rust_get_argv
()
{
rust_task
*
task
=
rust_get_current_task
();
return
task
->
kernel
->
env
->
argv
;
}
extern
"C"
CDECL
rust_sched_id
rust_new_sched
(
uintptr_t
threads
)
{
rust_task
*
task
=
rust_get_current_task
();
...
...
src/rt/rust_env.cpp
浏览文件 @
365f1748
...
...
@@ -107,7 +107,7 @@ copyenv(const char* name) {
}
rust_env
*
load_env
()
{
load_env
(
int
argc
,
char
**
argv
)
{
rust_env
*
env
=
(
rust_env
*
)
malloc
(
sizeof
(
rust_env
));
env
->
num_sched_threads
=
(
size_t
)
get_num_threads
();
...
...
@@ -118,7 +118,8 @@ load_env() {
env
->
detailed_leaks
=
getenv
(
DETAILED_LEAKS
)
!=
NULL
;
env
->
rust_seed
=
copyenv
(
RUST_SEED
);
env
->
poison_on_free
=
getenv
(
RUST_POISON_ON_FREE
)
!=
NULL
;
env
->
argc
=
argc
;
env
->
argv
=
argv
;
return
env
;
}
...
...
src/rt/rust_env.h
浏览文件 @
365f1748
...
...
@@ -13,9 +13,11 @@ struct rust_env {
bool
detailed_leaks
;
char
*
rust_seed
;
bool
poison_on_free
;
int
argc
;
char
**
argv
;
};
rust_env
*
load_env
();
rust_env
*
load_env
(
int
argc
,
char
**
argv
);
void
free_env
(
rust_env
*
rust_env
);
#endif
src/rt/rustrt.def.in
浏览文件 @
365f1748
...
...
@@ -31,6 +31,8 @@ rand_new_seeded2
rand_next
rand_seed
rust_get_sched_id
rust_get_argc
rust_get_argv
rust_new_sched
rust_new_task_in_sched
rust_num_threads
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录