Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
b41d5146
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,发现更多精彩内容 >>
提交
b41d5146
编写于
9月 27, 2012
作者:
G
Graydon Hoare
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
De-export os and libc. Close #2006.
上级
0bcb3bc5
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
731 addition
and
894 deletion
+731
-894
src/libcore/core.rc
src/libcore/core.rc
+1
-2
src/libcore/core.rs
src/libcore/core.rs
+0
-2
src/libcore/libc.rs
src/libcore/libc.rs
+651
-750
src/libcore/os.rs
src/libcore/os.rs
+79
-140
未找到文件。
src/libcore/core.rc
浏览文件 @
b41d5146
...
...
@@ -37,6 +37,7 @@ Implicitly, all crates behave as if they included the following prologue:
#[no_core];
#[legacy_modes];
#[legacy_exports];
#[warn(vecs_implicitly_copyable)];
#[deny(non_camel_case_types)];
...
...
@@ -307,9 +308,7 @@ mod pipes;
mod gc;
#[legacy_exports]
mod io;
#[legacy_exports]
mod libc;
#[legacy_exports]
mod os;
#[legacy_exports]
mod path;
...
...
src/libcore/core.rs
浏览文件 @
b41d5146
...
...
@@ -2,8 +2,6 @@
// Export various ubiquitous types, constructors, methods.
#[legacy_exports]
;
use
option
::{
Some
,
None
};
use
Option
=
option
::
Option
;
use
result
::{
Result
,
Ok
,
Err
};
...
...
src/libcore/libc.rs
浏览文件 @
b41d5146
...
...
@@ -2,40 +2,40 @@
#[forbid(deprecated_mode)]
;
#[forbid(deprecated_pattern)]
;
/*!
* Bindings for libc.
*
* We consider the following specs reasonably normative with respect
* to interoperating with the C standard library (libc/msvcrt):
*
* * ISO 9899:1990 ('C95', 'ANSI C', 'Standard C'), NA1, 1995.
* * ISO 9899:1999 ('C99' or 'C9x').
* * ISO 9945:1988 / IEEE 1003.1-1988 ('POSIX.1').
* * ISO 9945:2001 / IEEE 1003.1-2001 ('POSIX:2001', 'SUSv3').
* * ISO 9945:2008 / IEEE 1003.1-2008 ('POSIX:2008', 'SUSv4').
*
* Despite having several names each, these are *reasonably* coherent
* point-in-time, list-of-definition sorts of specs. You can get each under a
* variety of names but will wind up with the same definition in each case.
*
* Our interface to these libraries is complicated by the non-universality of
* conformance to any of them. About the only thing universally supported is
* the first (C95), beyond that definitions quickly become absent on various
* platforms.
*
* We therefore wind up dividing our module-space up (mostly for the sake of
* sanity while editing, filling-in-details and eliminating duplication) into
* definitions common-to-all (held in modules named c95, c99, posix88, posix01
* and posix08) and definitions that appear only on *some* platforms (named
* 'extra'). This would be things like significant OSX foundation kit, or
* win32 library kernel32.dll, or various fancy glibc, linux or BSD
* extensions.
*
* In addition to the per-platform 'extra' modules, we define a module of
* 'common BSD' libc routines that never quite made it into POSIX but show up
* in multiple derived systems. This is the 4.4BSD r2 / 1995 release, the
* final one from Berkeley after the lawsuits died down and the CSRG
* dissolved.
*/
* Bindings for libc.
*
* We consider the following specs reasonably normative with respect
* to interoperating with the C standard library (libc/msvcrt):
*
* * ISO 9899:1990 ('C95', 'ANSI C', 'Standard C'), NA1, 1995.
* * ISO 9899:1999 ('C99' or 'C9x').
* * ISO 9945:1988 / IEEE 1003.1-1988 ('POSIX.1').
* * ISO 9945:2001 / IEEE 1003.1-2001 ('POSIX:2001', 'SUSv3').
* * ISO 9945:2008 / IEEE 1003.1-2008 ('POSIX:2008', 'SUSv4').
*
* Despite having several names each, these are *reasonably* coherent
* point-in-time, list-of-definition sorts of specs. You can get each under a
* variety of names but will wind up with the same definition in each case.
*
* Our interface to these libraries is complicated by the non-universality of
* conformance to any of them. About the only thing universally supported is
* the first (C95), beyond that definitions quickly become absent on various
* platforms.
*
* We therefore wind up dividing our module-space up (mostly for the sake of
* sanity while editing, filling-in-details and eliminating duplication) into
* definitions common-to-all (held in modules named c95, c99, posix88, posix01
* and posix08) and definitions that appear only on *some* platforms (named
* 'extra'). This would be things like significant OSX foundation kit, or
* win32 library kernel32.dll, or various fancy glibc, linux or BSD
* extensions.
*
* In addition to the per-platform 'extra' modules, we define a module of
* 'common BSD' libc routines that never quite made it into POSIX but show up
* in multiple derived systems. This is the 4.4BSD r2 / 1995 release, the
* final one from Berkeley after the lawsuits died down and the CSRG
* dissolved.
*/
#[allow(non_camel_case_types)]
;
...
...
@@ -44,19 +44,19 @@
// FIXME (#2006): change these to glob-exports when sufficiently supported.
use
types
::
common
::
c95
::
*
;
use
types
::
common
::
c99
::
*
;
use
types
::
common
::
posix88
::
*
;
use
types
::
common
::
posix01
::
*
;
use
types
::
common
::
posix08
::
*
;
use
types
::
common
::
bsd44
::
*
;
use
types
::
os
::
arch
::
c95
::
*
;
use
types
::
os
::
arch
::
c99
::
*
;
use
types
::
os
::
arch
::
posix88
::
*
;
use
types
::
os
::
arch
::
posix01
::
*
;
use
types
::
os
::
arch
::
posix08
::
*
;
use
types
::
os
::
arch
::
bsd44
::
*
;
use
types
::
os
::
arch
::
extra
::
*
;
pub
use
types
::
common
::
c95
::
*
;
pub
use
types
::
common
::
c99
::
*
;
pub
use
types
::
common
::
posix88
::
*
;
pub
use
types
::
common
::
posix01
::
*
;
pub
use
types
::
common
::
posix08
::
*
;
pub
use
types
::
common
::
bsd44
::
*
;
pub
use
types
::
os
::
arch
::
c95
::
*
;
pub
use
types
::
os
::
arch
::
c99
::
*
;
pub
use
types
::
os
::
arch
::
posix88
::
*
;
pub
use
types
::
os
::
arch
::
posix01
::
*
;
pub
use
types
::
os
::
arch
::
posix08
::
*
;
pub
use
types
::
os
::
arch
::
bsd44
::
*
;
pub
use
types
::
os
::
arch
::
extra
::
*
;
use
consts
::
os
::
c95
::
*
;
use
consts
::
os
::
c99
::
*
;
...
...
@@ -83,756 +83,682 @@
use
funcs
::
bsd44
::
*
;
use
funcs
::
extra
::
*
;
// FIXME (#2006): remove these 3 exports (and their uses next door in os::)
// when export globs work. They provide access (for now) for os:: to dig
// around in the rest of the platform-specific definitions.
export
types
,
funcs
,
consts
;
// Explicit export lists for the intersection (provided here) mean that
// you can write more-platform-agnostic code if you stick to just these
// symbols.
export
c_float
,
c_double
,
c_void
,
FILE
,
fpos_t
;
export
DIR
,
dirent
;
export
c_char
,
c_schar
,
c_uchar
;
export
c_short
,
c_ushort
,
c_int
,
c_uint
,
c_long
,
c_ulong
;
export
size_t
,
ptrdiff_t
,
clock_t
,
time_t
;
export
c_longlong
,
c_ulonglong
,
intptr_t
,
uintptr_t
;
export
off_t
,
dev_t
,
ino_t
,
pid_t
,
mode_t
,
ssize_t
;
pub
use
size_t
;
pub
use
c_float
,
c_double
,
c_void
,
FILE
,
fpos_t
;
pub
use
DIR
,
dirent
;
pub
use
c_char
,
c_schar
,
c_uchar
;
pub
use
c_short
,
c_ushort
,
c_int
,
c_uint
,
c_long
,
c_ulong
;
pub
use
size_t
,
ptrdiff_t
,
clock_t
,
time_t
;
pub
use
c_longlong
,
c_ulonglong
,
intptr_t
,
uintptr_t
;
pub
use
off_t
,
dev_t
,
ino_t
,
pid_t
,
mode_t
,
ssize_t
;
export
EXIT_FAILURE
,
EXIT_SUCCESS
,
RAND_MAX
,
EOF
,
SEEK_SET
,
SEEK_CUR
,
SEEK_END
,
_
IOFBF
,
_
IONBF
,
_
IOLBF
,
BUFSIZ
,
FOPEN_MAX
,
FILENAME_MAX
,
L_tmpnam
,
TMP_MAX
,
O_RDONLY
,
O_WRONLY
,
O_RDWR
,
O_APPEND
,
O_CREAT
,
O_EXCL
,
O_TRUNC
,
S_IFIFO
,
S_IFCHR
,
S_IFBLK
,
S_IFDIR
,
S_IFREG
,
S_IFMT
,
S_IEXEC
,
S_IWRITE
,
S_IREAD
,
S_IRWXU
,
S_IXUSR
,
S_IWUSR
,
S_IRUSR
,
F_OK
,
R_OK
,
W_OK
,
X_OK
,
STDIN_FILENO
,
STDOUT_FILENO
,
STDERR_FILENO
;
pub
use
EXIT_FAILURE
,
EXIT_SUCCESS
,
RAND_MAX
,
EOF
,
SEEK_SET
,
SEEK_CUR
,
SEEK_END
,
_
IOFBF
,
_
IONBF
,
_
IOLBF
,
BUFSIZ
,
FOPEN_MAX
,
FILENAME_MAX
,
L_tmpnam
,
TMP_MAX
,
O_RDONLY
,
O_WRONLY
,
O_RDWR
,
O_APPEND
,
O_CREAT
,
O_EXCL
,
O_TRUNC
,
S_IFIFO
,
S_IFCHR
,
S_IFBLK
,
S_IFDIR
,
S_IFREG
,
S_IFMT
,
S_IEXEC
,
S_IWRITE
,
S_IREAD
,
S_IRWXU
,
S_IXUSR
,
S_IWUSR
,
S_IRUSR
,
F_OK
,
R_OK
,
W_OK
,
X_OK
,
STDIN_FILENO
,
STDOUT_FILENO
,
STDERR_FILENO
;
export
isalnum
,
isalpha
,
iscntrl
,
isdigit
,
islower
,
isprint
,
ispunct
,
isspace
,
isupper
,
isxdigit
,
tolower
,
toupper
;
pub
use
isalnum
,
isalpha
,
iscntrl
,
isdigit
,
islower
,
isprint
,
ispunct
,
isspace
,
isupper
,
isxdigit
,
tolower
,
toupper
;
export
fopen
,
freopen
,
fflush
,
fclose
,
remove
,
tmpfile
,
setvbuf
,
setbuf
,
fgetc
,
fgets
,
fputc
,
fputs
,
puts
,
ungetc
,
fread
,
fwrite
,
fseek
,
ftell
,
rewind
,
fgetpos
,
fsetpos
,
feof
,
ferror
,
perror
;
pub
use
fopen
,
freopen
,
fflush
,
fclose
,
remove
,
tmpfile
,
setvbuf
,
setbuf
,
fgetc
,
fgets
,
fputc
,
fputs
,
puts
,
ungetc
,
fread
,
fwrite
,
fseek
,
ftell
,
rewind
,
fgetpos
,
fsetpos
,
feof
,
ferror
,
perror
;
export
abs
,
labs
,
atof
,
atoi
,
strtod
,
strtol
,
strtoul
,
calloc
,
malloc
,
realloc
,
free
,
abort
,
exit
,
system
,
getenv
,
rand
,
srand
;
pub
use
abs
,
labs
,
atof
,
atoi
,
strtod
,
strtol
,
strtoul
,
calloc
,
malloc
,
realloc
,
free
,
abort
,
exit
,
system
,
getenv
,
rand
,
srand
;
export
strcpy
,
strncpy
,
strcat
,
strncat
,
strcmp
,
strncmp
,
strcoll
,
strchr
,
strrchr
,
strspn
,
strcspn
,
strpbrk
,
strstr
,
strlen
,
strerror
,
strtok
,
strxfrm
,
memcpy
,
memmove
,
memcmp
,
memchr
,
memset
;
pub
use
strcpy
,
strncpy
,
strcat
,
strncat
,
strcmp
,
strncmp
,
strcoll
,
strchr
,
strrchr
,
strspn
,
strcspn
,
strpbrk
,
strstr
,
strlen
,
strerror
,
strtok
,
strxfrm
,
memcpy
,
memmove
,
memcmp
,
memchr
,
memset
;
export
chmod
,
mkdir
;
export
popen
,
pclose
,
fdopen
,
fileno
;
export
open
,
creat
;
export
access
,
chdir
,
close
,
dup
,
dup2
,
execv
,
execve
,
execvp
,
getcwd
,
getpid
,
isatty
,
lseek
,
pipe
,
read
,
rmdir
,
unlink
,
write
;
pub
use
chmod
,
mkdir
;
pub
use
popen
,
pclose
,
fdopen
,
fileno
;
pub
use
open
,
creat
;
pub
use
access
,
chdir
,
close
,
dup
,
dup2
,
execv
,
execve
,
execvp
,
getcwd
,
getpid
,
isatty
,
lseek
,
pipe
,
read
,
rmdir
,
unlink
,
write
;
mod
types
{
#[legacy_exports]
;
// Types tend to vary *per architecture* so we pull their definitions out
// into this module.
// Standard types that are opaque or common, so are not per-target.
mod
common
{
#[legacy_exports]
;
mod
c95
{
#[legacy_exports]
;
enum
c_void
{}
enum
FILE
{}
enum
fpos_t
{}
pub
mod
common
{
pub
mod
c95
{
pub
enum
c_void
{}
pub
enum
FILE
{}
pub
enum
fpos_t
{}
}
mod
c99
{
#[legacy_exports]
;
type
int8_t
=
i8
;
type
int16_t
=
i16
;
type
int32_t
=
i32
;
type
int64_t
=
i64
;
type
uint8_t
=
u8
;
type
uint16_t
=
u16
;
type
uint32_t
=
u32
;
type
uint64_t
=
u64
;
pub
mod
c99
{
pub
type
int8_t
=
i8
;
pub
type
int16_t
=
i16
;
pub
type
int32_t
=
i32
;
pub
type
int64_t
=
i64
;
pub
type
uint8_t
=
u8
;
pub
type
uint16_t
=
u16
;
pub
type
uint32_t
=
u32
;
pub
type
uint64_t
=
u64
;
}
mod
posix88
{
#[legacy_exports]
;
enum
DIR
{}
enum
dirent
{}
pub
mod
posix88
{
pub
enum
DIR
{}
pub
enum
dirent
{}
}
mod
posix01
{
#[legacy_exports]
;
}
mod
posix08
{
#[legacy_exports]
;
}
mod
bsd44
{
#[legacy_exports]
;
}
pub
mod
posix01
{}
pub
mod
posix08
{}
pub
mod
bsd44
{}
}
// Standard types that are scalar but vary by OS and arch.
#[cfg(target_os
=
"linux"
)]
mod
os
{
#[legacy_exports]
;
pub
mod
os
{
#[cfg(target_arch
=
"x86"
)]
mod
arch
{
#[legacy_exports]
;
mod
c95
{
#[legacy_exports]
;
type
c_char
=
i8
;
type
c_schar
=
i8
;
type
c_uchar
=
u8
;
type
c_short
=
i16
;
type
c_ushort
=
u16
;
type
c_int
=
i32
;
type
c_uint
=
u32
;
type
c_long
=
i32
;
type
c_ulong
=
u32
;
type
c_float
=
f32
;
type
c_double
=
f64
;
type
size_t
=
u32
;
type
ptrdiff_t
=
i32
;
type
clock_t
=
i32
;
type
time_t
=
i32
;
type
wchar_t
=
i32
;
pub
mod
arch
{
pub
mod
c95
{
pub
type
c_char
=
i8
;
pub
type
c_schar
=
i8
;
pub
type
c_uchar
=
u8
;
pub
type
c_short
=
i16
;
pub
type
c_ushort
=
u16
;
pub
type
c_int
=
i32
;
pub
type
c_uint
=
u32
;
pub
type
c_long
=
i32
;
pub
type
c_ulong
=
u32
;
pub
type
c_float
=
f32
;
pub
type
c_double
=
f64
;
pub
type
size_t
=
u32
;
pub
type
ptrdiff_t
=
i32
;
pub
type
clock_t
=
i32
;
pub
type
time_t
=
i32
;
pub
type
wchar_t
=
i32
;
}
mod
c99
{
#[legacy_exports]
;
type
c_longlong
=
i64
;
type
c_ulonglong
=
u64
;
type
intptr_t
=
int
;
type
uintptr_t
=
uint
;
pub
mod
c99
{
pub
type
c_longlong
=
i64
;
pub
type
c_ulonglong
=
u64
;
pub
type
intptr_t
=
int
;
pub
type
uintptr_t
=
uint
;
}
mod
posix88
{
#[legacy_exports]
;
type
off_t
=
i32
;
type
dev_t
=
u64
;
type
ino_t
=
u32
;
type
pid_t
=
i32
;
type
uid_t
=
u32
;
type
gid_t
=
u32
;
type
useconds_t
=
u32
;
type
mode_t
=
u32
;
type
ssize_t
=
i32
;
}
mod
posix01
{
#[legacy_exports]
;
}
mod
posix08
{
#[legacy_exports]
;
}
mod
bsd44
{
#[legacy_exports]
;
}
mod
extra
{
#[legacy_exports]
;
pub
mod
posix88
{
pub
type
off_t
=
i32
;
pub
type
dev_t
=
u64
;
pub
type
ino_t
=
u32
;
pub
type
pid_t
=
i32
;
pub
type
uid_t
=
u32
;
pub
type
gid_t
=
u32
;
pub
type
useconds_t
=
u32
;
pub
type
mode_t
=
u32
;
pub
type
ssize_t
=
i32
;
}
pub
mod
posix01
{}
pub
mod
posix08
{}
pub
mod
bsd44
{}
pub
mod
extra
{}
}
#[cfg(target_arch
=
"x86_64"
)]
mod
arch
{
#[legacy_exports]
;
mod
c95
{
#[legacy_exports]
;
type
c_char
=
i8
;
type
c_schar
=
i8
;
type
c_uchar
=
u8
;
type
c_short
=
i16
;
type
c_ushort
=
u16
;
type
c_int
=
i32
;
type
c_uint
=
u32
;
type
c_long
=
i64
;
type
c_ulong
=
u64
;
type
c_float
=
f32
;
type
c_double
=
f64
;
type
size_t
=
u64
;
type
ptrdiff_t
=
i64
;
type
clock_t
=
i64
;
type
time_t
=
i64
;
type
wchar_t
=
i32
;
pub
mod
arch
{
pub
mod
c95
{
pub
type
c_char
=
i8
;
pub
type
c_schar
=
i8
;
pub
type
c_uchar
=
u8
;
pub
type
c_short
=
i16
;
pub
type
c_ushort
=
u16
;
pub
type
c_int
=
i32
;
pub
type
c_uint
=
u32
;
pub
type
c_long
=
i64
;
pub
type
c_ulong
=
u64
;
pub
type
c_float
=
f32
;
pub
type
c_double
=
f64
;
pub
type
size_t
=
u64
;
pub
type
ptrdiff_t
=
i64
;
pub
type
clock_t
=
i64
;
pub
type
time_t
=
i64
;
pub
type
wchar_t
=
i32
;
}
pub
mod
c99
{
pub
type
c_longlong
=
i64
;
pub
type
c_ulonglong
=
u64
;
pub
type
intptr_t
=
int
;
pub
type
uintptr_t
=
uint
;
}
mod
c99
{
#[legacy_exports]
;
type
c_longlong
=
i64
;
type
c_ulonglong
=
u64
;
type
intptr_t
=
int
;
type
uintptr_t
=
uint
;
pub
mod
posix88
{
pub
type
off_t
=
i64
;
pub
type
dev_t
=
u64
;
pub
type
ino_t
=
u64
;
pub
type
pid_t
=
i32
;
pub
type
uid_t
=
u32
;
pub
type
gid_t
=
u32
;
pub
type
useconds_t
=
u32
;
pub
type
mode_t
=
u32
;
pub
type
ssize_t
=
i64
;
}
mod
posix88
{
#[legacy_exports]
;
type
off_t
=
i64
;
type
dev_t
=
u64
;
type
ino_t
=
u64
;
type
pid_t
=
i32
;
type
uid_t
=
u32
;
type
gid_t
=
u32
;
type
useconds_t
=
u32
;
type
mode_t
=
u32
;
type
ssize_t
=
i64
;
pub
mod
posix01
{
}
mod
posix01
{
#[legacy_exports]
;
}
mod
posix08
{
#[legacy_exports]
;
}
mod
bsd44
{
#[legacy_exports]
;
}
mod
extra
{
#[legacy_exports]
;
pub
mod
posix08
{
}
pub
mod
bsd44
{
}
pub
mod
extra
{
}
}
}
#[cfg(target_os
=
"freebsd"
)]
mod
os
{
#[legacy_exports]
;
pub
mod
os
{
#[cfg(target_arch
=
"x86_64"
)]
mod
arch
{
#[legacy_exports]
;
mod
c95
{
#[legacy_exports]
;
type
c_char
=
i8
;
type
c_schar
=
i8
;
type
c_uchar
=
u8
;
type
c_short
=
i16
;
type
c_ushort
=
u16
;
type
c_int
=
i32
;
type
c_uint
=
u32
;
type
c_long
=
i64
;
type
c_ulong
=
u64
;
type
c_float
=
f32
;
type
c_double
=
f64
;
type
size_t
=
u64
;
type
ptrdiff_t
=
i64
;
type
clock_t
=
i32
;
type
time_t
=
i64
;
type
wchar_t
=
i32
;
pub
mod
arch
{
pub
mod
c95
{
pub
type
c_char
=
i8
;
pub
type
c_schar
=
i8
;
pub
type
c_uchar
=
u8
;
pub
type
c_short
=
i16
;
pub
type
c_ushort
=
u16
;
pub
type
c_int
=
i32
;
pub
type
c_uint
=
u32
;
pub
type
c_long
=
i64
;
pub
type
c_ulong
=
u64
;
pub
type
c_float
=
f32
;
pub
type
c_double
=
f64
;
pub
type
size_t
=
u64
;
pub
type
ptrdiff_t
=
i64
;
pub
type
clock_t
=
i32
;
pub
type
time_t
=
i64
;
pub
type
wchar_t
=
i32
;
}
pub
mod
c99
{
pub
type
c_longlong
=
i64
;
pub
type
c_ulonglong
=
u64
;
pub
type
intptr_t
=
int
;
pub
type
uintptr_t
=
uint
;
}
mod
c99
{
#[legacy_exports]
;
type
c_longlong
=
i64
;
type
c_ulonglong
=
u64
;
type
intptr_t
=
int
;
type
uintptr_t
=
uint
;
pub
mod
posix88
{
pub
type
off_t
=
i64
;
pub
type
dev_t
=
u32
;
pub
type
ino_t
=
u32
;
pub
type
pid_t
=
i32
;
pub
type
uid_t
=
u32
;
pub
type
gid_t
=
u32
;
pub
type
useconds_t
=
u32
;
pub
type
mode_t
=
u16
;
pub
type
ssize_t
=
i64
;
}
mod
posix88
{
#[legacy_exports]
;
type
off_t
=
i64
;
type
dev_t
=
u32
;
type
ino_t
=
u32
;
type
pid_t
=
i32
;
type
uid_t
=
u32
;
type
gid_t
=
u32
;
type
useconds_t
=
u32
;
type
mode_t
=
u16
;
type
ssize_t
=
i64
;
pub
mod
posix01
{
}
mod
posix01
{
#[legacy_exports]
;
}
mod
posix08
{
#[legacy_exports]
;
}
mod
bsd44
{
#[legacy_exports]
;
}
mod
extra
{
#[legacy_exports]
;
pub
mod
posix08
{
}
pub
mod
bsd44
{
}
pub
mod
extra
{
}
}
}
#[cfg(target_os
=
"win32"
)]
mod
os
{
#[legacy_exports]
;
pub
mod
os
{
#[cfg(target_arch
=
"x86"
)]
mod
arch
{
#[legacy_exports]
;
mod
c95
{
#[legacy_exports]
;
type
c_char
=
i8
;
type
c_schar
=
i8
;
type
c_uchar
=
u8
;
type
c_short
=
i16
;
type
c_ushort
=
u16
;
type
c_int
=
i32
;
type
c_uint
=
u32
;
type
c_long
=
i32
;
type
c_ulong
=
u32
;
type
c_float
=
f32
;
type
c_double
=
f64
;
type
size_t
=
u32
;
type
ptrdiff_t
=
i32
;
type
clock_t
=
i32
;
type
time_t
=
i32
;
type
wchar_t
=
u16
;
pub
mod
arch
{
pub
mod
c95
{
pub
type
c_char
=
i8
;
pub
type
c_schar
=
i8
;
pub
type
c_uchar
=
u8
;
pub
type
c_short
=
i16
;
pub
type
c_ushort
=
u16
;
pub
type
c_int
=
i32
;
pub
type
c_uint
=
u32
;
pub
type
c_long
=
i32
;
pub
type
c_ulong
=
u32
;
pub
type
c_float
=
f32
;
pub
type
c_double
=
f64
;
pub
type
size_t
=
u32
;
pub
type
ptrdiff_t
=
i32
;
pub
type
clock_t
=
i32
;
pub
type
time_t
=
i32
;
pub
type
wchar_t
=
u16
;
}
pub
mod
c99
{
pub
type
c_longlong
=
i64
;
pub
type
c_ulonglong
=
u64
;
pub
type
intptr_t
=
int
;
pub
type
uintptr_t
=
uint
;
}
mod
c99
{
#[legacy_exports]
;
type
c_longlong
=
i64
;
type
c_ulonglong
=
u64
;
type
intptr_t
=
int
;
type
uintptr_t
=
uint
;
pub
mod
posix88
{
pub
type
off_t
=
i32
;
pub
type
dev_t
=
u32
;
pub
type
ino_t
=
i16
;
pub
type
pid_t
=
i32
;
pub
type
useconds_t
=
u32
;
pub
type
mode_t
=
u16
;
pub
type
ssize_t
=
i32
;
}
mod
posix88
{
#[legacy_exports]
;
type
off_t
=
i32
;
type
dev_t
=
u32
;
type
ino_t
=
i16
;
type
pid_t
=
i32
;
type
useconds_t
=
u32
;
type
mode_t
=
u16
;
type
ssize_t
=
i32
;
pub
mod
posix01
{
}
mod
posix01
{
#[legacy_exports]
;
}
mod
posix08
{
#[legacy_exports]
;
}
mod
bsd44
{
#[legacy_exports]
;
}
mod
extra
{
#[legacy_exports]
;
type
BOOL
=
c_int
;
type
BYTE
=
u8
;
type
CCHAR
=
c_char
;
type
CHAR
=
c_char
;
pub
mod
posix08
{
}
pub
mod
bsd44
{
}
pub
mod
extra
{
pub
type
BOOL
=
c_int
;
pub
type
BYTE
=
u8
;
pub
type
CCHAR
=
c_char
;
pub
type
CHAR
=
c_char
;
type
DWORD
=
c_ulong
;
type
DWORDLONG
=
c_ulonglong
;
pub
type
DWORD
=
c_ulong
;
pub
type
DWORDLONG
=
c_ulonglong
;
type
HANDLE
=
LPVOID
;
type
HMODULE
=
c_uint
;
pub
type
HANDLE
=
LPVOID
;
pub
type
HMODULE
=
c_uint
;
type
LONG_PTR
=
c_long
;
pub
type
LONG_PTR
=
c_long
;
type
LPCWSTR
=
*
WCHAR
;
type
LPCSTR
=
*
CHAR
;
pub
type
LPCWSTR
=
*
WCHAR
;
pub
type
LPCSTR
=
*
CHAR
;
type
LPWSTR
=
*
mut
WCHAR
;
type
LPSTR
=
*
mut
CHAR
;
pub
type
LPWSTR
=
*
mut
WCHAR
;
pub
type
LPSTR
=
*
mut
CHAR
;
// Not really, but opaque to us.
type
LPSECURITY_ATTRIBUTES
=
LPVOID
;
pub
type
LPSECURITY_ATTRIBUTES
=
LPVOID
;
type
LPVOID
=
*
mut
c_void
;
type
LPWORD
=
*
mut
WORD
;
pub
type
LPVOID
=
*
mut
c_void
;
pub
type
LPWORD
=
*
mut
WORD
;
type
LRESULT
=
LONG_PTR
;
type
PBOOL
=
*
mut
BOOL
;
type
WCHAR
=
wchar_t
;
type
WORD
=
u16
;
pub
type
LRESULT
=
LONG_PTR
;
pub
type
PBOOL
=
*
mut
BOOL
;
pub
type
WCHAR
=
wchar_t
;
pub
type
WORD
=
u16
;
}
}
}
#[cfg(target_os
=
"macos"
)]
mod
os
{
#[legacy_exports]
;
pub
mod
os
{
#[cfg(target_arch
=
"x86"
)]
mod
arch
{
#[legacy_exports]
;
mod
c95
{
#[legacy_exports]
;
type
c_char
=
i8
;
type
c_schar
=
i8
;
type
c_uchar
=
u8
;
type
c_short
=
i16
;
type
c_ushort
=
u16
;
type
c_int
=
i32
;
type
c_uint
=
u32
;
type
c_long
=
i32
;
type
c_ulong
=
u32
;
type
c_float
=
f32
;
type
c_double
=
f64
;
type
size_t
=
u32
;
type
ptrdiff_t
=
i32
;
type
clock_t
=
u32
;
type
time_t
=
i32
;
type
wchar_t
=
i32
;
pub
mod
arch
{
pub
mod
c95
{
pub
type
c_char
=
i8
;
pub
type
c_schar
=
i8
;
pub
type
c_uchar
=
u8
;
pub
type
c_short
=
i16
;
pub
type
c_ushort
=
u16
;
pub
type
c_int
=
i32
;
pub
type
c_uint
=
u32
;
pub
type
c_long
=
i32
;
pub
type
c_ulong
=
u32
;
pub
type
c_float
=
f32
;
pub
type
c_double
=
f64
;
pub
type
size_t
=
u32
;
pub
type
ptrdiff_t
=
i32
;
pub
type
clock_t
=
u32
;
pub
type
time_t
=
i32
;
pub
type
wchar_t
=
i32
;
}
pub
mod
c99
{
pub
type
c_longlong
=
i64
;
pub
type
c_ulonglong
=
u64
;
pub
type
intptr_t
=
int
;
pub
type
uintptr_t
=
uint
;
}
mod
c99
{
#[legacy_exports]
;
type
c_longlong
=
i64
;
type
c_ulonglong
=
u64
;
type
intptr_t
=
int
;
type
uintptr_t
=
uint
;
pub
mod
posix88
{
pub
type
off_t
=
i64
;
pub
type
dev_t
=
i32
;
pub
type
ino_t
=
u64
;
pub
type
pid_t
=
i32
;
pub
type
uid_t
=
u32
;
pub
type
gid_t
=
u32
;
pub
type
useconds_t
=
u32
;
pub
type
mode_t
=
u16
;
pub
type
ssize_t
=
i32
;
}
mod
posix88
{
#[legacy_exports]
;
type
off_t
=
i64
;
type
dev_t
=
i32
;
type
ino_t
=
u64
;
type
pid_t
=
i32
;
type
uid_t
=
u32
;
type
gid_t
=
u32
;
type
useconds_t
=
u32
;
type
mode_t
=
u16
;
type
ssize_t
=
i32
;
pub
mod
posix01
{
}
mod
posix01
{
#[legacy_exports]
;
}
mod
posix08
{
#[legacy_exports]
;
}
mod
bsd44
{
#[legacy_exports]
;
}
mod
extra
{
#[legacy_exports]
;
pub
mod
posix08
{
}
pub
mod
bsd44
{
}
pub
mod
extra
{
}
}
#[cfg(target_arch
=
"x86_64"
)]
mod
arch
{
#[legacy_exports]
;
mod
c95
{
#[legacy_exports]
;
type
c_char
=
i8
;
type
c_schar
=
i8
;
type
c_uchar
=
u8
;
type
c_short
=
i16
;
type
c_ushort
=
u16
;
type
c_int
=
i32
;
type
c_uint
=
u32
;
type
c_long
=
i64
;
type
c_ulong
=
u64
;
type
c_float
=
f32
;
type
c_double
=
f64
;
type
size_t
=
u64
;
type
ptrdiff_t
=
i64
;
type
clock_t
=
u64
;
type
time_t
=
i64
;
type
wchar_t
=
i32
;
pub
mod
arch
{
pub
mod
c95
{
pub
type
c_char
=
i8
;
pub
type
c_schar
=
i8
;
pub
type
c_uchar
=
u8
;
pub
type
c_short
=
i16
;
pub
type
c_ushort
=
u16
;
pub
type
c_int
=
i32
;
pub
type
c_uint
=
u32
;
pub
type
c_long
=
i64
;
pub
type
c_ulong
=
u64
;
pub
type
c_float
=
f32
;
pub
type
c_double
=
f64
;
pub
type
size_t
=
u64
;
pub
type
ptrdiff_t
=
i64
;
pub
type
clock_t
=
u64
;
pub
type
time_t
=
i64
;
pub
type
wchar_t
=
i32
;
}
pub
mod
c99
{
pub
type
c_longlong
=
i64
;
pub
type
c_ulonglong
=
u64
;
pub
type
intptr_t
=
int
;
pub
type
uintptr_t
=
uint
;
}
mod
c99
{
#[legacy_exports]
;
type
c_longlong
=
i64
;
type
c_ulonglong
=
u64
;
type
intptr_t
=
int
;
type
uintptr_t
=
uint
;
pub
mod
posix88
{
pub
type
off_t
=
i64
;
pub
type
dev_t
=
i32
;
pub
type
ino_t
=
u64
;
pub
type
pid_t
=
i32
;
pub
type
uid_t
=
u32
;
pub
type
gid_t
=
u32
;
pub
type
useconds_t
=
u32
;
pub
type
mode_t
=
u16
;
pub
type
ssize_t
=
i64
;
}
mod
posix88
{
#[legacy_exports]
;
type
off_t
=
i64
;
type
dev_t
=
i32
;
type
ino_t
=
u64
;
type
pid_t
=
i32
;
type
uid_t
=
u32
;
type
gid_t
=
u32
;
type
useconds_t
=
u32
;
type
mode_t
=
u16
;
type
ssize_t
=
i64
;
pub
mod
posix01
{
}
mod
posix01
{
#[legacy_exports]
;
}
mod
posix08
{
#[legacy_exports]
;
}
mod
bsd44
{
#[legacy_exports]
;
}
mod
extra
{
#[legacy_exports]
;
pub
mod
posix08
{
}
pub
mod
bsd44
{
}
pub
mod
extra
{
}
}
}
}
mod
consts
{
#[legacy_exports]
;
pub
mod
consts
{
// Consts tend to vary per OS so we pull their definitions out
// into this module.
#[cfg(target_os
=
"win32"
)]
mod
os
{
#[legacy_exports]
;
mod
c95
{
#[legacy_exports]
;
const
EXIT_FAILURE
:
int
=
1
;
const
EXIT_SUCCESS
:
int
=
0
;
const
RAND_MAX
:
int
=
32767
;
const
EOF
:
int
=
-
1
;
const
SEEK_SET
:
int
=
0
;
const
SEEK_CUR
:
int
=
1
;
const
SEEK_END
:
int
=
2
;
const
_
IOFBF
:
int
=
0
;
const
_
IONBF
:
int
=
4
;
const
_
IOLBF
:
int
=
64
;
const
BUFSIZ
:
uint
=
512_u
;
const
FOPEN_MAX
:
uint
=
20_u
;
const
FILENAME_MAX
:
uint
=
260_u
;
const
L_tmpnam
:
uint
=
16_u
;
const
TMP_MAX
:
uint
=
32767_u
;
pub
mod
os
{
pub
mod
c95
{
pub
const
EXIT_FAILURE
:
int
=
1
;
pub
const
EXIT_SUCCESS
:
int
=
0
;
pub
const
RAND_MAX
:
int
=
32767
;
pub
const
EOF
:
int
=
-
1
;
pub
const
SEEK_SET
:
int
=
0
;
pub
const
SEEK_CUR
:
int
=
1
;
pub
const
SEEK_END
:
int
=
2
;
pub
const
_
IOFBF
:
int
=
0
;
pub
const
_
IONBF
:
int
=
4
;
pub
const
_
IOLBF
:
int
=
64
;
pub
const
BUFSIZ
:
uint
=
512_u
;
pub
const
FOPEN_MAX
:
uint
=
20_u
;
pub
const
FILENAME_MAX
:
uint
=
260_u
;
pub
const
L_tmpnam
:
uint
=
16_u
;
pub
const
TMP_MAX
:
uint
=
32767_u
;
}
mod
c99
{
#[legacy_exports]
;
}
mod
posix88
{
#[legacy_exports]
;
const
O_RDONLY
:
int
=
0
;
const
O_WRONLY
:
int
=
1
;
const
O_RDWR
:
int
=
2
;
const
O_APPEND
:
int
=
8
;
const
O_CREAT
:
int
=
256
;
const
O_EXCL
:
int
=
1024
;
const
O_TRUNC
:
int
=
512
;
const
S_IFIFO
:
int
=
4096
;
const
S_IFCHR
:
int
=
8192
;
const
S_IFBLK
:
int
=
12288
;
const
S_IFDIR
:
int
=
16384
;
const
S_IFREG
:
int
=
32768
;
const
S_IFMT
:
int
=
61440
;
const
S_IEXEC
:
int
=
64
;
const
S_IWRITE
:
int
=
128
;
const
S_IREAD
:
int
=
256
;
const
S_IRWXU
:
int
=
448
;
const
S_IXUSR
:
int
=
64
;
const
S_IWUSR
:
int
=
128
;
const
S_IRUSR
:
int
=
256
;
const
F_OK
:
int
=
0
;
const
R_OK
:
int
=
4
;
const
W_OK
:
int
=
2
;
const
X_OK
:
int
=
1
;
const
STDIN_FILENO
:
int
=
0
;
const
STDOUT_FILENO
:
int
=
1
;
const
STDERR_FILENO
:
int
=
2
;
pub
mod
c99
{
}
mod
posix01
{
#[legacy_exports]
;
}
mod
posix08
{
#[legacy_exports]
;
}
mod
bsd44
{
#[legacy_exports]
;
}
mod
extra
{
#[legacy_exports]
;
const
O_TEXT
:
int
=
16384
;
const
O_BINARY
:
int
=
32768
;
const
O_NOINHERIT
:
int
=
128
;
const
ERROR_SUCCESS
:
int
=
0
;
const
ERROR_INSUFFICIENT_BUFFER
:
int
=
122
;
pub
mod
posix88
{
pub
const
O_RDONLY
:
int
=
0
;
pub
const
O_WRONLY
:
int
=
1
;
pub
const
O_RDWR
:
int
=
2
;
pub
const
O_APPEND
:
int
=
8
;
pub
const
O_CREAT
:
int
=
256
;
pub
const
O_EXCL
:
int
=
1024
;
pub
const
O_TRUNC
:
int
=
512
;
pub
const
S_IFIFO
:
int
=
4096
;
pub
const
S_IFCHR
:
int
=
8192
;
pub
const
S_IFBLK
:
int
=
12288
;
pub
const
S_IFDIR
:
int
=
16384
;
pub
const
S_IFREG
:
int
=
32768
;
pub
const
S_IFMT
:
int
=
61440
;
pub
const
S_IEXEC
:
int
=
64
;
pub
const
S_IWRITE
:
int
=
128
;
pub
const
S_IREAD
:
int
=
256
;
pub
const
S_IRWXU
:
int
=
448
;
pub
const
S_IXUSR
:
int
=
64
;
pub
const
S_IWUSR
:
int
=
128
;
pub
const
S_IRUSR
:
int
=
256
;
pub
const
F_OK
:
int
=
0
;
pub
const
R_OK
:
int
=
4
;
pub
const
W_OK
:
int
=
2
;
pub
const
X_OK
:
int
=
1
;
pub
const
STDIN_FILENO
:
int
=
0
;
pub
const
STDOUT_FILENO
:
int
=
1
;
pub
const
STDERR_FILENO
:
int
=
2
;
}
pub
mod
posix01
{
}
pub
mod
posix08
{
}
pub
mod
bsd44
{
}
pub
mod
extra
{
pub
const
O_TEXT
:
int
=
16384
;
pub
const
O_BINARY
:
int
=
32768
;
pub
const
O_NOINHERIT
:
int
=
128
;
pub
const
ERROR_SUCCESS
:
int
=
0
;
pub
const
ERROR_INSUFFICIENT_BUFFER
:
int
=
122
;
}
}
#[cfg(target_os
=
"linux"
)]
mod
os
{
#[legacy_exports]
;
mod
c95
{
#[legacy_exports]
;
const
EXIT_FAILURE
:
int
=
1
;
const
EXIT_SUCCESS
:
int
=
0
;
const
RAND_MAX
:
int
=
2147483647
;
const
EOF
:
int
=
-
1
;
const
SEEK_SET
:
int
=
0
;
const
SEEK_CUR
:
int
=
1
;
const
SEEK_END
:
int
=
2
;
const
_
IOFBF
:
int
=
0
;
const
_
IONBF
:
int
=
2
;
const
_
IOLBF
:
int
=
1
;
const
BUFSIZ
:
uint
=
8192
_u
;
const
FOPEN_MAX
:
uint
=
16
_u
;
const
FILENAME_MAX
:
uint
=
4096
_u
;
const
L_tmpnam
:
uint
=
20_u
;
const
TMP_MAX
:
uint
=
238328_u
;
pub
mod
os
{
pub
mod
c95
{
pub
const
EXIT_FAILURE
:
int
=
1
;
pub
const
EXIT_SUCCESS
:
int
=
0
;
pub
const
RAND_MAX
:
int
=
2147483647
;
pub
const
EOF
:
int
=
-
1
;
pub
const
SEEK_SET
:
int
=
0
;
pub
const
SEEK_CUR
:
int
=
1
;
pub
const
SEEK_END
:
int
=
2
;
pub
const
_
IOFBF
:
int
=
0
;
pub
const
_
IONBF
:
int
=
2
;
pub
const
_
IOLBF
:
int
=
1
;
pub
const
BUFSIZ
:
uint
=
8192_u
;
pub
const
FOPEN_MAX
:
uint
=
16_u
;
pub
const
FILENAME_MAX
:
uint
=
4096
_u
;
pub
const
L_tmpnam
:
uint
=
20
_u
;
pub
const
TMP_MAX
:
uint
=
238328
_u
;
}
pub
mod
c99
{
}
mod
c99
{
#[legacy_exports]
;
}
mod
posix88
{
#[legacy_exports]
;
const
O_RDONLY
:
int
=
0
;
const
O_WRONLY
:
int
=
1
;
const
O_RDWR
:
int
=
2
;
const
O_APPEND
:
int
=
1024
;
const
O_CREAT
:
int
=
64
;
const
O_EXCL
:
int
=
128
;
const
O_TRUNC
:
int
=
512
;
const
S_IFIFO
:
int
=
4096
;
const
S_IFCHR
:
int
=
8192
;
const
S_IFBLK
:
int
=
24576
;
const
S_IFDIR
:
int
=
16384
;
const
S_IFREG
:
int
=
32768
;
const
S_IFMT
:
int
=
61440
;
const
S_IEXEC
:
int
=
64
;
const
S_IWRITE
:
int
=
128
;
const
S_IREAD
:
int
=
256
;
const
S_IRWXU
:
int
=
448
;
const
S_IXUSR
:
int
=
64
;
const
S_IWUSR
:
int
=
128
;
const
S_IRUSR
:
int
=
256
;
const
F_OK
:
int
=
0
;
const
R_OK
:
int
=
4
;
const
W_OK
:
int
=
2
;
const
X_OK
:
int
=
1
;
const
STDIN_FILENO
:
int
=
0
;
const
STDOUT_FILENO
:
int
=
1
;
const
STDERR_FILENO
:
int
=
2
;
const
F_LOCK
:
int
=
1
;
const
F_TEST
:
int
=
3
;
const
F_TLOCK
:
int
=
2
;
const
F_ULOCK
:
int
=
0
;
pub
mod
posix88
{
pub
const
O_RDONLY
:
int
=
0
;
pub
const
O_WRONLY
:
int
=
1
;
pub
const
O_RDWR
:
int
=
2
;
pub
const
O_APPEND
:
int
=
1024
;
pub
const
O_CREAT
:
int
=
64
;
pub
const
O_EXCL
:
int
=
128
;
pub
const
O_TRUNC
:
int
=
512
;
pub
const
S_IFIFO
:
int
=
4096
;
pub
const
S_IFCHR
:
int
=
8192
;
pub
const
S_IFBLK
:
int
=
24576
;
pub
const
S_IFDIR
:
int
=
16384
;
pub
const
S_IFREG
:
int
=
32768
;
pub
const
S_IFMT
:
int
=
61440
;
pub
const
S_IEXEC
:
int
=
64
;
pub
const
S_IWRITE
:
int
=
128
;
pub
const
S_IREAD
:
int
=
256
;
pub
const
S_IRWXU
:
int
=
448
;
pub
const
S_IXUSR
:
int
=
64
;
pub
const
S_IWUSR
:
int
=
128
;
pub
const
S_IRUSR
:
int
=
256
;
pub
const
F_OK
:
int
=
0
;
pub
const
R_OK
:
int
=
4
;
pub
const
W_OK
:
int
=
2
;
pub
const
X_OK
:
int
=
1
;
pub
const
STDIN_FILENO
:
int
=
0
;
pub
const
STDOUT_FILENO
:
int
=
1
;
pub
const
STDERR_FILENO
:
int
=
2
;
pub
const
F_LOCK
:
int
=
1
;
pub
const
F_TEST
:
int
=
3
;
pub
const
F_TLOCK
:
int
=
2
;
pub
const
F_ULOCK
:
int
=
0
;
}
mod
posix01
{
#[legacy_exports]
;
}
mod
posix08
{
#[legacy_exports]
;
}
mod
bsd44
{
#[legacy_exports]
;
}
mod
extra
{
#[legacy_exports]
;
const
O_RSYNC
:
int
=
1052672
;
const
O_DSYNC
:
int
=
4096
;
const
O_SYNC
:
int
=
1052672
;
pub
mod
posix01
{
}
pub
mod
posix08
{
}
pub
mod
bsd44
{
}
pub
mod
extra
{
pub
const
O_RSYNC
:
int
=
1052672
;
pub
const
O_DSYNC
:
int
=
4096
;
pub
const
O_SYNC
:
int
=
1052672
;
}
}
#[cfg(target_os
=
"freebsd"
)]
mod
os
{
#[legacy_exports]
;
mod
c95
{
#[legacy_exports]
;
const
EXIT_FAILURE
:
int
=
1
;
const
EXIT_SUCCESS
:
int
=
0
;
const
RAND_MAX
:
int
=
2147483647
;
const
EOF
:
int
=
-
1
;
const
SEEK_SET
:
int
=
0
;
const
SEEK_CUR
:
int
=
1
;
const
SEEK_END
:
int
=
2
;
const
_
IOFBF
:
int
=
0
;
const
_
IONBF
:
int
=
2
;
const
_
IOLBF
:
int
=
1
;
const
BUFSIZ
:
uint
=
1024_u
;
const
FOPEN_MAX
:
uint
=
20_u
;
const
FILENAME_MAX
:
uint
=
1024_u
;
const
L_tmpnam
:
uint
=
1024_u
;
const
TMP_MAX
:
uint
=
308915776_u
;
pub
mod
os
{
pub
mod
c95
{
pub
const
EXIT_FAILURE
:
int
=
1
;
pub
const
EXIT_SUCCESS
:
int
=
0
;
pub
const
RAND_MAX
:
int
=
2147483647
;
pub
const
EOF
:
int
=
-
1
;
pub
const
SEEK_SET
:
int
=
0
;
pub
const
SEEK_CUR
:
int
=
1
;
pub
const
SEEK_END
:
int
=
2
;
pub
const
_
IOFBF
:
int
=
0
;
pub
const
_
IONBF
:
int
=
2
;
pub
const
_
IOLBF
:
int
=
1
;
pub
const
BUFSIZ
:
uint
=
1024_u
;
pub
const
FOPEN_MAX
:
uint
=
20_u
;
pub
const
FILENAME_MAX
:
uint
=
1024_u
;
pub
const
L_tmpnam
:
uint
=
1024_u
;
pub
const
TMP_MAX
:
uint
=
308915776_u
;
}
pub
mod
c99
{
}
pub
mod
posix88
{
pub
const
O_RDONLY
:
int
=
0
;
pub
const
O_WRONLY
:
int
=
1
;
pub
const
O_RDWR
:
int
=
2
;
pub
const
O_APPEND
:
int
=
8
;
pub
const
O_CREAT
:
int
=
512
;
pub
const
O_EXCL
:
int
=
2048
;
pub
const
O_TRUNC
:
int
=
1024
;
pub
const
S_IFIFO
:
int
=
4096
;
pub
const
S_IFCHR
:
int
=
8192
;
pub
const
S_IFBLK
:
int
=
24576
;
pub
const
S_IFDIR
:
int
=
16384
;
pub
const
S_IFREG
:
int
=
32768
;
pub
const
S_IFMT
:
int
=
61440
;
pub
const
S_IEXEC
:
int
=
64
;
pub
const
S_IWRITE
:
int
=
128
;
pub
const
S_IREAD
:
int
=
256
;
pub
const
S_IRWXU
:
int
=
448
;
pub
const
S_IXUSR
:
int
=
64
;
pub
const
S_IWUSR
:
int
=
128
;
pub
const
S_IRUSR
:
int
=
256
;
pub
const
F_OK
:
int
=
0
;
pub
const
R_OK
:
int
=
4
;
pub
const
W_OK
:
int
=
2
;
pub
const
X_OK
:
int
=
1
;
pub
const
STDIN_FILENO
:
int
=
0
;
pub
const
STDOUT_FILENO
:
int
=
1
;
pub
const
STDERR_FILENO
:
int
=
2
;
pub
const
F_LOCK
:
int
=
1
;
pub
const
F_TEST
:
int
=
3
;
pub
const
F_TLOCK
:
int
=
2
;
pub
const
F_ULOCK
:
int
=
0
;
}
pub
mod
posix01
{
}
pub
mod
posix08
{
}
mod
c99
{
#[legacy_exports]
;
}
mod
posix88
{
#[legacy_exports]
;
const
O_RDONLY
:
int
=
0
;
const
O_WRONLY
:
int
=
1
;
const
O_RDWR
:
int
=
2
;
const
O_APPEND
:
int
=
8
;
const
O_CREAT
:
int
=
512
;
const
O_EXCL
:
int
=
2048
;
const
O_TRUNC
:
int
=
1024
;
const
S_IFIFO
:
int
=
4096
;
const
S_IFCHR
:
int
=
8192
;
const
S_IFBLK
:
int
=
24576
;
const
S_IFDIR
:
int
=
16384
;
const
S_IFREG
:
int
=
32768
;
const
S_IFMT
:
int
=
61440
;
const
S_IEXEC
:
int
=
64
;
const
S_IWRITE
:
int
=
128
;
const
S_IREAD
:
int
=
256
;
const
S_IRWXU
:
int
=
448
;
const
S_IXUSR
:
int
=
64
;
const
S_IWUSR
:
int
=
128
;
const
S_IRUSR
:
int
=
256
;
const
F_OK
:
int
=
0
;
const
R_OK
:
int
=
4
;
const
W_OK
:
int
=
2
;
const
X_OK
:
int
=
1
;
const
STDIN_FILENO
:
int
=
0
;
const
STDOUT_FILENO
:
int
=
1
;
const
STDERR_FILENO
:
int
=
2
;
const
F_LOCK
:
int
=
1
;
const
F_TEST
:
int
=
3
;
const
F_TLOCK
:
int
=
2
;
const
F_ULOCK
:
int
=
0
;
pub
mod
bsd44
{
}
mod
posix01
{
#[legacy_exports]
;
}
mod
posix08
{
#[legacy_exports]
;
}
mod
bsd44
{
#[legacy_exports]
;
}
mod
extra
{
#[legacy_exports]
;
const
O_SYNC
:
int
=
128
;
const
CTL_KERN
:
int
=
1
;
const
KERN_PROC
:
int
=
14
;
const
KERN_PROC_PATHNAME
:
int
=
12
;
pub
mod
extra
{
pub
const
O_SYNC
:
int
=
128
;
pub
const
CTL_KERN
:
int
=
1
;
pub
const
KERN_PROC
:
int
=
14
;
pub
const
KERN_PROC_PATHNAME
:
int
=
12
;
}
}
#[cfg(target_os
=
"macos"
)]
mod
os
{
#[legacy_exports]
;
mod
c95
{
#[legacy_exports]
;
const
EXIT_FAILURE
:
int
=
1
;
const
EXIT_SUCCESS
:
int
=
0
;
const
RAND_MAX
:
int
=
2147483647
;
const
EOF
:
int
=
-
1
;
const
SEEK_SET
:
int
=
0
;
const
SEEK_CUR
:
int
=
1
;
const
SEEK_END
:
int
=
2
;
const
_
IOFBF
:
int
=
0
;
const
_
IONBF
:
int
=
2
;
const
_
IOLBF
:
int
=
1
;
const
BUFSIZ
:
uint
=
1024_u
;
const
FOPEN_MAX
:
uint
=
20_u
;
const
FILENAME_MAX
:
uint
=
1024_u
;
const
L_tmpnam
:
uint
=
1024_u
;
const
TMP_MAX
:
uint
=
308915776_u
;
pub
mod
os
{
pub
mod
c95
{
pub
const
EXIT_FAILURE
:
int
=
1
;
pub
const
EXIT_SUCCESS
:
int
=
0
;
pub
const
RAND_MAX
:
int
=
2147483647
;
pub
const
EOF
:
int
=
-
1
;
pub
const
SEEK_SET
:
int
=
0
;
pub
const
SEEK_CUR
:
int
=
1
;
pub
const
SEEK_END
:
int
=
2
;
pub
const
_
IOFBF
:
int
=
0
;
pub
const
_
IONBF
:
int
=
2
;
pub
const
_
IOLBF
:
int
=
1
;
pub
const
BUFSIZ
:
uint
=
1024_u
;
pub
const
FOPEN_MAX
:
uint
=
20_u
;
pub
const
FILENAME_MAX
:
uint
=
1024_u
;
pub
const
L_tmpnam
:
uint
=
1024_u
;
pub
const
TMP_MAX
:
uint
=
308915776_u
;
}
mod
c99
{
#[legacy_exports]
;
}
mod
posix88
{
#[legacy_exports]
;
const
O_RDONLY
:
int
=
0
;
const
O_WRONLY
:
int
=
1
;
const
O_RDWR
:
int
=
2
;
const
O_APPEND
:
int
=
8
;
const
O_CREAT
:
int
=
512
;
const
O_EXCL
:
int
=
2048
;
const
O_TRUNC
:
int
=
1024
;
const
S_IFIFO
:
int
=
4096
;
const
S_IFCHR
:
int
=
8192
;
const
S_IFBLK
:
int
=
24576
;
const
S_IFDIR
:
int
=
16384
;
const
S_IFREG
:
int
=
32768
;
const
S_IFMT
:
int
=
61440
;
const
S_IEXEC
:
int
=
64
;
const
S_IWRITE
:
int
=
128
;
const
S_IREAD
:
int
=
256
;
const
S_IRWXU
:
int
=
448
;
const
S_IXUSR
:
int
=
64
;
const
S_IWUSR
:
int
=
128
;
const
S_IRUSR
:
int
=
256
;
const
F_OK
:
int
=
0
;
const
R_OK
:
int
=
4
;
const
W_OK
:
int
=
2
;
const
X_OK
:
int
=
1
;
const
STDIN_FILENO
:
int
=
0
;
const
STDOUT_FILENO
:
int
=
1
;
const
STDERR_FILENO
:
int
=
2
;
const
F_LOCK
:
int
=
1
;
const
F_TEST
:
int
=
3
;
const
F_TLOCK
:
int
=
2
;
const
F_ULOCK
:
int
=
0
;
pub
mod
c99
{
}
mod
posix01
{
#[legacy_exports]
;
}
mod
posix08
{
#[legacy_exports]
;
}
mod
bsd44
{
#[legacy_exports]
;
}
mod
extra
{
#[legacy_exports]
;
const
O_DSYNC
:
int
=
4194304
;
const
O_SYNC
:
int
=
128
;
const
F_FULLFSYNC
:
int
=
51
;
pub
mod
posix88
{
pub
const
O_RDONLY
:
int
=
0
;
pub
const
O_WRONLY
:
int
=
1
;
pub
const
O_RDWR
:
int
=
2
;
pub
const
O_APPEND
:
int
=
8
;
pub
const
O_CREAT
:
int
=
512
;
pub
const
O_EXCL
:
int
=
2048
;
pub
const
O_TRUNC
:
int
=
1024
;
pub
const
S_IFIFO
:
int
=
4096
;
pub
const
S_IFCHR
:
int
=
8192
;
pub
const
S_IFBLK
:
int
=
24576
;
pub
const
S_IFDIR
:
int
=
16384
;
pub
const
S_IFREG
:
int
=
32768
;
pub
const
S_IFMT
:
int
=
61440
;
pub
const
S_IEXEC
:
int
=
64
;
pub
const
S_IWRITE
:
int
=
128
;
pub
const
S_IREAD
:
int
=
256
;
pub
const
S_IRWXU
:
int
=
448
;
pub
const
S_IXUSR
:
int
=
64
;
pub
const
S_IWUSR
:
int
=
128
;
pub
const
S_IRUSR
:
int
=
256
;
pub
const
F_OK
:
int
=
0
;
pub
const
R_OK
:
int
=
4
;
pub
const
W_OK
:
int
=
2
;
pub
const
X_OK
:
int
=
1
;
pub
const
STDIN_FILENO
:
int
=
0
;
pub
const
STDOUT_FILENO
:
int
=
1
;
pub
const
STDERR_FILENO
:
int
=
2
;
pub
const
F_LOCK
:
int
=
1
;
pub
const
F_TEST
:
int
=
3
;
pub
const
F_TLOCK
:
int
=
2
;
pub
const
F_ULOCK
:
int
=
0
;
}
pub
mod
posix01
{
}
pub
mod
posix08
{
}
pub
mod
bsd44
{
}
pub
mod
extra
{
pub
const
O_DSYNC
:
int
=
4194304
;
pub
const
O_SYNC
:
int
=
128
;
pub
const
F_FULLFSYNC
:
int
=
51
;
}
}
}
mod
funcs
{
#[legacy_exports]
;
pub
mod
funcs
{
// Thankfull most of c95 is universally available and does not vary by OS
// or anything. The same is not true of POSIX.
mod
c95
{
#[legacy_exports]
;
pub
mod
c95
{
#[nolink]
#[abi
=
"cdecl"
]
extern
mod
ctype
{
#[legacy_exports]
;
pub
extern
mod
ctype
{
fn
isalnum
(
c
:
c_int
)
->
c_int
;
fn
isalpha
(
c
:
c_int
)
->
c_int
;
fn
iscntrl
(
c
:
c_int
)
->
c_int
;
...
...
@@ -850,9 +776,7 @@ mod c95 {
#[nolink]
#[abi
=
"cdecl"
]
extern
mod
stdio
{
#[legacy_exports]
;
pub
extern
mod
stdio
{
fn
fopen
(
filename
:
*
c_char
,
mode
:
*
c_char
)
->
*
FILE
;
fn
freopen
(
filename
:
*
c_char
,
mode
:
*
c_char
,
file
:
*
FILE
)
->
*
FILE
;
...
...
@@ -882,7 +806,8 @@ fn fread(ptr: *mut c_void, size: size_t,
nobj
:
size_t
,
stream
:
*
FILE
)
->
size_t
;
fn
fwrite
(
ptr
:
*
c_void
,
size
:
size_t
,
nobj
:
size_t
,
stream
:
*
FILE
)
->
size_t
;
fn
fseek
(
stream
:
*
FILE
,
offset
:
c_long
,
whence
:
c_int
)
->
c_int
;
fn
fseek
(
stream
:
*
FILE
,
offset
:
c_long
,
whence
:
c_int
)
->
c_int
;
fn
ftell
(
stream
:
*
FILE
)
->
c_long
;
fn
rewind
(
stream
:
*
FILE
);
fn
fgetpos
(
stream
:
*
FILE
,
ptr
:
*
fpos_t
)
->
c_int
;
...
...
@@ -895,16 +820,16 @@ fn fwrite(ptr: *c_void, size: size_t,
#[nolink]
#[abi
=
"cdecl"
]
extern
mod
stdlib
{
#[legacy_exports]
;
pub
extern
mod
stdlib
{
fn
abs
(
i
:
c_int
)
->
c_int
;
fn
labs
(
i
:
c_long
)
->
c_long
;
// Omitted: div, ldiv (return type incomplete).
// Omitted: div, ldiv (return
pub
type incomplete).
fn
atof
(
s
:
*
c_char
)
->
c_double
;
fn
atoi
(
s
:
*
c_char
)
->
c_int
;
fn
strtod
(
s
:
*
c_char
,
endp
:
**
c_char
)
->
c_double
;
fn
strtol
(
s
:
*
c_char
,
endp
:
**
c_char
,
base
:
c_int
)
->
c_long
;
fn
strtoul
(
s
:
*
c_char
,
endp
:
**
c_char
,
base
:
c_int
)
->
c_ulong
;
fn
strtoul
(
s
:
*
c_char
,
endp
:
**
c_char
,
base
:
c_int
)
->
c_ulong
;
fn
calloc
(
nobj
:
size_t
,
size
:
size_t
)
->
*
c_void
;
fn
malloc
(
size
:
size_t
)
->
*
c_void
;
fn
realloc
(
p
:
*
c_void
,
size
:
size_t
)
->
*
c_void
;
...
...
@@ -921,9 +846,7 @@ fn fwrite(ptr: *c_void, size: size_t,
#[nolink]
#[abi
=
"cdecl"
]
extern
mod
string
{
#[legacy_exports]
;
pub
extern
mod
string
{
fn
strcpy
(
dst
:
*
c_char
,
src
:
*
c_char
)
->
*
c_char
;
fn
strncpy
(
dst
:
*
c_char
,
src
:
*
c_char
,
n
:
size_t
)
->
*
c_char
;
fn
strcat
(
s
:
*
c_char
,
ct
:
*
c_char
)
->
*
c_char
;
...
...
@@ -956,13 +879,10 @@ fn fwrite(ptr: *c_void, size: size_t,
// with the same POSIX functions and types as other platforms.
#[cfg(target_os
=
"win32"
)]
mod
posix88
{
#[legacy_exports]
;
pub
mod
posix88
{
#[nolink]
#[abi
=
"cdecl"
]
extern
mod
stat
{
#[legacy_exports]
;
pub
extern
mod
stat
{
#[link_name
=
"_chmod"
]
fn
chmod
(
path
:
*
c_char
,
mode
:
c_int
)
->
c_int
;
...
...
@@ -972,8 +892,7 @@ mod posix88 {
#[nolink]
#[abi
=
"cdecl"
]
extern
mod
stdio
{
#[legacy_exports]
;
pub
extern
mod
stdio
{
#[link_name
=
"_popen"
]
fn
popen
(
command
:
*
c_char
,
mode
:
*
c_char
)
->
*
FILE
;
...
...
@@ -989,8 +908,7 @@ mod posix88 {
#[nolink]
#[abi
=
"cdecl"
]
extern
mod
fcntl
{
#[legacy_exports]
;
pub
extern
mod
fcntl
{
#[link_name
=
"_open"
]
fn
open
(
path
:
*
c_char
,
oflag
:
c_int
,
mode
:
c_int
)
->
c_int
;
...
...
@@ -1000,15 +918,13 @@ mod posix88 {
#[nolink]
#[abi
=
"cdecl"
]
extern
mod
dirent
{
#[legacy_exports]
;
pub
extern
mod
dirent
{
// Not supplied at all.
}
#[nolink]
#[abi
=
"cdecl"
]
extern
mod
unistd
{
#[legacy_exports]
;
pub
extern
mod
unistd
{
#[link_name
=
"_access"
]
fn
access
(
path
:
*
c_char
,
amode
:
c_int
)
->
c_int
;
...
...
@@ -1035,7 +951,8 @@ fn execve(prog: *c_char, argv: **c_char,
fn
execvp
(
c
:
*
c_char
,
argv
:
**
c_char
)
->
c_int
;
#[link_name
=
"_execvpe"
]
fn
execvpe
(
c
:
*
c_char
,
argv
:
**
c_char
,
envp
:
**
c_char
)
->
c_int
;
fn
execvpe
(
c
:
*
c_char
,
argv
:
**
c_char
,
envp
:
**
c_char
)
->
c_int
;
#[link_name
=
"_getcwd"
]
fn
getcwd
(
buf
:
*
c_char
,
size
:
size_t
)
->
*
c_char
;
...
...
@@ -1072,13 +989,10 @@ fn pipe(fds: *mut c_int, psize: c_uint,
#[cfg(target_os
=
"linux"
)]
#[cfg(target_os
=
"macos"
)]
#[cfg(target_os
=
"freebsd"
)]
mod
posix88
{
#[legacy_exports]
;
pub
mod
posix88
{
#[nolink]
#[abi
=
"cdecl"
]
extern
mod
stat
{
#[legacy_exports]
;
pub
extern
mod
stat
{
fn
chmod
(
path
:
*
c_char
,
mode
:
mode_t
)
->
c_int
;
fn
fchmod
(
fd
:
c_int
,
mode
:
mode_t
)
->
c_int
;
fn
mkdir
(
path
:
*
c_char
,
mode
:
mode_t
)
->
c_int
;
...
...
@@ -1087,8 +1001,7 @@ mod posix88 {
#[nolink]
#[abi
=
"cdecl"
]
extern
mod
stdio
{
#[legacy_exports]
;
pub
extern
mod
stdio
{
fn
popen
(
command
:
*
c_char
,
mode
:
*
c_char
)
->
*
FILE
;
fn
pclose
(
stream
:
*
FILE
)
->
c_int
;
fn
fdopen
(
fd
:
c_int
,
mode
:
*
c_char
)
->
*
FILE
;
...
...
@@ -1097,8 +1010,7 @@ mod posix88 {
#[nolink]
#[abi
=
"cdecl"
]
extern
mod
fcntl
{
#[legacy_exports]
;
pub
extern
mod
fcntl
{
fn
open
(
path
:
*
c_char
,
oflag
:
c_int
,
mode
:
c_int
)
->
c_int
;
fn
creat
(
path
:
*
c_char
,
mode
:
mode_t
)
->
c_int
;
fn
fcntl
(
fd
:
c_int
,
cmd
:
c_int
)
->
c_int
;
...
...
@@ -1106,8 +1018,7 @@ mod posix88 {
#[nolink]
#[abi
=
"cdecl"
]
extern
mod
dirent
{
#[legacy_exports]
;
pub
extern
mod
dirent
{
fn
opendir
(
dirname
:
*
c_char
)
->
*
DIR
;
fn
closedir
(
dirp
:
*
DIR
)
->
c_int
;
fn
readdir
(
dirp
:
*
DIR
)
->
*
dirent
;
...
...
@@ -1118,8 +1029,7 @@ mod posix88 {
#[nolink]
#[abi
=
"cdecl"
]
extern
mod
unistd
{
#[legacy_exports]
;
pub
extern
mod
unistd
{
fn
access
(
path
:
*
c_char
,
amode
:
c_int
)
->
c_int
;
fn
alarm
(
seconds
:
c_uint
)
->
c_uint
;
fn
chdir
(
dir
:
*
c_char
)
->
c_int
;
...
...
@@ -1128,7 +1038,8 @@ mod posix88 {
fn
dup
(
fd
:
c_int
)
->
c_int
;
fn
dup2
(
src
:
c_int
,
dst
:
c_int
)
->
c_int
;
fn
execv
(
prog
:
*
c_char
,
argv
:
**
c_char
)
->
c_int
;
fn
execve
(
prog
:
*
c_char
,
argv
:
**
c_char
,
envp
:
**
c_char
)
->
c_int
;
fn
execve
(
prog
:
*
c_char
,
argv
:
**
c_char
,
envp
:
**
c_char
)
->
c_int
;
fn
execvp
(
c
:
*
c_char
,
argv
:
**
c_char
)
->
c_int
;
fn
fork
()
->
pid_t
;
fn
fpathconf
(
filedes
:
c_int
,
name
:
c_int
)
->
c_long
;
...
...
@@ -1138,7 +1049,8 @@ mod posix88 {
fn
getgid
()
->
gid_t
;
fn
getgroups
(
ngroups_max
:
c_int
,
groups
:
*
mut
gid_t
)
->
c_int
;
fn
getlogin
()
->
*
c_char
;
fn
getopt
(
argc
:
c_int
,
argv
:
**
c_char
,
optstr
:
*
c_char
)
->
c_int
;
fn
getopt
(
argc
:
c_int
,
argv
:
**
c_char
,
optstr
:
*
c_char
)
->
c_int
;
fn
getpgrp
()
->
pid_t
;
fn
getpid
()
->
pid_t
;
fn
getppid
()
->
pid_t
;
...
...
@@ -1168,13 +1080,10 @@ fn read(fd: c_int, buf: *mut c_void,
#[cfg(target_os
=
"linux"
)]
#[cfg(target_os
=
"macos"
)]
#[cfg(target_os
=
"freebsd"
)]
mod
posix01
{
#[legacy_exports]
;
pub
mod
posix01
{
#[nolink]
#[abi
=
"cdecl"
]
extern
mod
unistd
{
#[legacy_exports]
;
pub
extern
mod
unistd
{
fn
readlink
(
path
:
*
c_char
,
buf
:
*
mut
c_char
,
bufsz
:
size_t
)
->
ssize_t
;
...
...
@@ -1191,19 +1100,17 @@ fn setenv(name: *c_char, val: *c_char,
#[nolink]
#[abi
=
"cdecl"
]
extern
mod
wait
{
#[legacy_exports]
;
pub
extern
mod
wait
{
fn
waitpid
(
pid
:
pid_t
,
status
:
*
mut
c_int
,
options
:
c_int
)
->
pid_t
;
}
}
#[cfg(target_os
=
"win32"
)]
mod
posix01
{
#[legacy_exports]
;
pub
mod
posix01
{
#[nolink]
extern
mod
unistd
{
#[legacy_exports]
;
}
pub
extern
mod
unistd
{
}
}
...
...
@@ -1211,11 +1118,10 @@ mod posix01 {
#[cfg(target_os
=
"linux"
)]
#[cfg(target_os
=
"macos"
)]
#[cfg(target_os
=
"freebsd"
)]
mod
posix08
{
#[legacy_exports]
;
pub
mod
posix08
{
#[nolink]
extern
mod
unistd
{
#[legacy_exports]
;
}
pub
extern
mod
unistd
{
}
}
...
...
@@ -1223,9 +1129,7 @@ mod posix08 {
#[cfg(target_os
=
"freebsd"
)]
#[nolink]
#[abi
=
"cdecl"
]
extern
mod
bsd44
{
#[legacy_exports]
;
pub
extern
mod
bsd44
{
fn
sysctl
(
name
:
*
c_int
,
namelen
:
c_uint
,
oldp
:
*
mut
c_void
,
oldlenp
:
*
mut
size_t
,
newp
:
*
c_void
,
newlen
:
size_t
)
->
c_int
;
...
...
@@ -1241,37 +1145,35 @@ fn sysctlnametomib(name: *c_char, mibp: *mut c_int,
#[cfg(target_os
=
"linux"
)]
#[cfg(target_os
=
"win32"
)]
mod
bsd44
{
#[legacy_exports]
;
pub
mod
bsd44
{
}
#[cfg(target_os
=
"macos"
)]
#[nolink]
#[abi
=
"cdecl"
]
extern
mod
extra
{
#[legacy_exports]
;
pub
extern
mod
extra
{
fn
_
NSGetExecutablePath
(
buf
:
*
mut
c_char
,
bufsize
:
*
mut
u32
)
->
c_int
;
}
#[cfg(target_os
=
"freebsd"
)]
mod
extra
{
#[legacy_exports]
;
}
pub
mod
extra
{
}
#[cfg(target_os
=
"linux"
)]
mod
extra
{
#[legacy_exports]
;
}
pub
mod
extra
{
}
#[cfg(target_os
=
"win32"
)]
mod
extra
{
#[legacy_exports]
;
pub
mod
extra
{
use
types
::
os
::
arch
::
extra
::
*
;
pub
use
kernel32
::
*
;
pub
use
msvcrt
::
*
;
#[abi
=
"stdcall"
]
extern
mod
kernel32
{
#[legacy_exports]
;
pub
extern
mod
kernel32
{
fn
GetEnvironmentVariableW
(
n
:
LPCWSTR
,
v
:
LPWSTR
,
nsize
:
DWORD
)
->
DWORD
;
...
...
@@ -1295,8 +1197,7 @@ fn CopyFileW(lpExistingFileName: LPCWSTR,
#[abi
=
"cdecl"
]
#[nolink]
extern
mod
msvcrt
{
#[legacy_exports]
;
pub
extern
mod
msvcrt
{
#[link_name
=
"_commit"
]
fn
commit
(
fd
:
c_int
)
->
c_int
;
}
...
...
src/libcore/os.rs
浏览文件 @
b41d5146
...
...
@@ -21,30 +21,17 @@
*/
use
libc
::{
c_char
,
c_void
,
c_int
,
c_uint
,
size_t
,
ssize_t
,
mode_t
,
pid_t
,
FILE
};
mode_t
,
pid_t
,
FILE
};
use
libc
::{
close
,
fclose
};
use
option
::{
Some
,
None
};
use
consts
::
*
;
pub
use
consts
::
*
;
use
task
::
TaskBuilder
;
export
close
,
fclose
,
fsync_fd
,
waitpid
;
export
env
,
getenv
,
setenv
,
fdopen
,
pipe
;
export
getcwd
,
dll_filename
,
self_exe_path
;
export
exe_suffix
,
dll_suffix
,
sysname
,
arch
,
family
;
export
homedir
,
tmpdir
,
list_dir
,
list_dir_path
,
path_is_dir
,
path_exists
,
make_absolute
,
make_dir
,
remove_dir
,
change_dir
,
remove_file
,
copy_file
;
export
last_os_error
;
export
set_exit_status
;
export
walk_dir
;
// FIXME: move these to str perhaps? #2620
export
as_c_charp
,
fill_charp_buf
;
extern
mod
rustrt
{
#[legacy_exports]
;
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
;
...
...
@@ -57,15 +44,15 @@
const
tmpbuf_sz
:
uint
=
1000u
;
fn
getcwd
()
->
Path
{
pub
fn
getcwd
()
->
Path
{
Path
(
rustrt
::
rust_getcwd
())
}
fn
as_c_charp
<
T
>
(
s
:
&
str
,
f
:
fn
(
*
c_char
)
->
T
)
->
T
{
pub
fn
as_c_charp
<
T
>
(
s
:
&
str
,
f
:
fn
(
*
c_char
)
->
T
)
->
T
{
str
::
as_c_str
(
s
,
|
b
|
f
(
b
as
*
c_char
))
}
fn
fill_charp_buf
(
f
:
fn
(
*
mut
c_char
,
size_t
)
->
bool
)
pub
fn
fill_charp_buf
(
f
:
fn
(
*
mut
c_char
,
size_t
)
->
bool
)
->
Option
<~
str
>
{
let
buf
=
vec
::
to_mut
(
vec
::
from_elem
(
tmpbuf_sz
,
0u8
as
c_char
));
do
vec
::
as_mut_buf
(
buf
)
|
b
,
sz
|
{
...
...
@@ -79,16 +66,11 @@ fn fill_charp_buf(f: fn(*mut c_char, size_t) -> bool)
#[cfg(windows)]
mod
win32
{
#[legacy_exports]
;
use
dword
=
libc
::
types
::
os
::
arch
::
extra
::
DWORD
;
use
dword
=
libc
::
DWORD
;
fn
fill_utf16_buf_and_decode
(
f
:
fn
(
*
mut
u16
,
dword
)
->
dword
)
->
Option
<~
str
>
{
// FIXME: remove these when export globs work properly. #1238
use
libc
::
funcs
::
extra
::
kernel32
::
*
;
use
libc
::
consts
::
os
::
extra
::
*
;
use
libc
::
dword
;
let
mut
n
=
tmpbuf_sz
as
dword
;
let
mut
res
=
None
;
let
mut
done
=
false
;
...
...
@@ -99,8 +81,8 @@ fn fill_utf16_buf_and_decode(f: fn(*mut u16, dword) -> dword)
if
k
==
(
0
as
dword
)
{
done
=
true
;
}
else
if
(
k
==
n
&&
GetLastError
()
==
ERROR_INSUFFICIENT_BUFFER
as
dword
)
{
libc
::
GetLastError
()
==
libc
::
ERROR_INSUFFICIENT_BUFFER
as
dword
)
{
n
*=
(
2
as
dword
);
}
else
{
let
sub
=
vec
::
slice
(
buf
,
0u
,
k
as
uint
);
...
...
@@ -120,28 +102,22 @@ fn as_utf16_p<T>(s: &str, f: fn(*u16) -> T) -> T {
}
}
fn
getenv
(
n
:
&
str
)
->
Option
<~
str
>
{
pub
fn
getenv
(
n
:
&
str
)
->
Option
<~
str
>
{
global_env
::
getenv
(
n
)
}
fn
setenv
(
n
:
&
str
,
v
:
&
str
)
{
pub
fn
setenv
(
n
:
&
str
,
v
:
&
str
)
{
global_env
::
setenv
(
n
,
v
)
}
fn
env
()
->
~
[(
~
str
,
~
str
)]
{
pub
fn
env
()
->
~
[(
~
str
,
~
str
)]
{
global_env
::
env
()
}
mod
global_env
{
#[legacy_exports]
;
//! Internal module for serializing access to getenv/setenv
export
getenv
;
export
setenv
;
export
env
;
extern
mod
rustrt
{
#[legacy_exports]
;
fn
rust_global_env_chan_ptr
()
->
*
libc
::
uintptr_t
;
}
...
...
@@ -151,7 +127,7 @@ enum Msg {
MsgEnv
(
comm
::
Chan
<~
[(
~
str
,
~
str
)]
>
)
}
fn
getenv
(
n
:
&
str
)
->
Option
<~
str
>
{
pub
fn
getenv
(
n
:
&
str
)
->
Option
<~
str
>
{
let
env_ch
=
get_global_env_chan
();
let
po
=
comm
::
Port
();
comm
::
send
(
env_ch
,
MsgGetEnv
(
str
::
from_slice
(
n
),
...
...
@@ -159,7 +135,7 @@ fn getenv(n: &str) -> Option<~str> {
comm
::
recv
(
po
)
}
fn
setenv
(
n
:
&
str
,
v
:
&
str
)
{
pub
fn
setenv
(
n
:
&
str
,
v
:
&
str
)
{
let
env_ch
=
get_global_env_chan
();
let
po
=
comm
::
Port
();
comm
::
send
(
env_ch
,
MsgSetEnv
(
str
::
from_slice
(
n
),
...
...
@@ -168,7 +144,7 @@ fn setenv(n: &str, v: &str) {
comm
::
recv
(
po
)
}
fn
env
()
->
~
[(
~
str
,
~
str
)]
{
pub
fn
env
()
->
~
[(
~
str
,
~
str
)]
{
let
env_ch
=
get_global_env_chan
();
let
po
=
comm
::
Port
();
comm
::
send
(
env_ch
,
MsgEnv
(
comm
::
Chan
(
po
)));
...
...
@@ -208,13 +184,11 @@ fn global_env_task(msg_po: comm::Port<Msg>) {
}
mod
impl_
{
#[legacy_exports]
;
extern
mod
rustrt
{
#[legacy_exports]
;
fn
rust_env_pairs
()
->
~
[
~
str
];
}
fn
env
()
->
~
[(
~
str
,
~
str
)]
{
pub
fn
env
()
->
~
[(
~
str
,
~
str
)]
{
let
mut
pairs
=
~
[];
for
vec
::
each
(
rustrt
::
rust_env_pairs
())
|
p
|
{
let
vs
=
str
::
splitn_char
(
*
p
,
'='
,
1u
);
...
...
@@ -225,7 +199,7 @@ fn env() -> ~[(~str,~str)] {
}
#[cfg(unix)]
fn
getenv
(
n
:
&
str
)
->
Option
<~
str
>
{
pub
fn
getenv
(
n
:
&
str
)
->
Option
<~
str
>
{
unsafe
{
let
s
=
str
::
as_c_str
(
n
,
libc
::
getenv
);
return
if
ptr
::
null
::
<
u8
>
()
==
cast
::
reinterpret_cast
(
&
s
)
{
...
...
@@ -238,39 +212,32 @@ fn getenv(n: &str) -> Option<~str> {
}
#[cfg(windows)]
fn
getenv
(
n
:
&
str
)
->
Option
<~
str
>
{
use
libc
::
types
::
os
::
arch
::
extra
::
*
;
use
libc
::
funcs
::
extra
::
kernel32
::
*
;
pub
fn
getenv
(
n
:
&
str
)
->
Option
<~
str
>
{
use
win32
::
*
;
do
as_utf16_p
(
n
)
|
u
|
{
do
fill_utf16_buf_and_decode
()
|
buf
,
sz
|
{
GetEnvironmentVariableW
(
u
,
buf
,
sz
)
libc
::
GetEnvironmentVariableW
(
u
,
buf
,
sz
)
}
}
}
#[cfg(unix)]
fn
setenv
(
n
:
&
str
,
v
:
&
str
)
{
// FIXME: remove this when export globs work properly. #1238
use
libc
::
funcs
::
posix01
::
unistd
::
setenv
;
pub
fn
setenv
(
n
:
&
str
,
v
:
&
str
)
{
do
str
::
as_c_str
(
n
)
|
nbuf
|
{
do
str
::
as_c_str
(
v
)
|
vbuf
|
{
setenv
(
nbuf
,
vbuf
,
1i32
);
libc
::
setenv
(
nbuf
,
vbuf
,
1i32
);
}
}
}
#[cfg(windows)]
fn
setenv
(
n
:
&
str
,
v
:
&
str
)
{
// FIXME: remove imports when export globs work properly. #1238
use
libc
::
funcs
::
extra
::
kernel32
::
*
;
pub
fn
setenv
(
n
:
&
str
,
v
:
&
str
)
{
use
win32
::
*
;
do
as_utf16_p
(
n
)
|
nbuf
|
{
do
as_utf16_p
(
v
)
|
vbuf
|
{
SetEnvironmentVariableW
(
nbuf
,
vbuf
);
libc
::
SetEnvironmentVariableW
(
nbuf
,
vbuf
);
}
}
}
...
...
@@ -278,7 +245,7 @@ fn setenv(n: &str, v: &str) {
}
}
fn
fdopen
(
fd
:
c_int
)
->
*
FILE
{
pub
fn
fdopen
(
fd
:
c_int
)
->
*
FILE
{
return
do
as_c_charp
(
"r"
)
|
modebuf
|
{
libc
::
fdopen
(
fd
,
modebuf
)
};
...
...
@@ -288,13 +255,13 @@ fn fdopen(fd: c_int) -> *FILE {
// fsync related
#[cfg(windows)]
fn
fsync_fd
(
fd
:
c_int
,
_
level
:
io
::
fsync
::
Level
)
->
c_int
{
pub
fn
fsync_fd
(
fd
:
c_int
,
_
level
:
io
::
fsync
::
Level
)
->
c_int
{
use
libc
::
funcs
::
extra
::
msvcrt
::
*
;
return
commit
(
fd
);
}
#[cfg(target_os
=
"linux"
)]
fn
fsync_fd
(
fd
:
c_int
,
level
:
io
::
fsync
::
Level
)
->
c_int
{
pub
fn
fsync_fd
(
fd
:
c_int
,
level
:
io
::
fsync
::
Level
)
->
c_int
{
use
libc
::
funcs
::
posix01
::
unistd
::
*
;
match
level
{
io
::
fsync
::
FSync
...
...
@@ -304,7 +271,7 @@ fn fsync_fd(fd: c_int, level: io::fsync::Level) -> c_int {
}
#[cfg(target_os
=
"macos"
)]
fn
fsync_fd
(
fd
:
c_int
,
level
:
io
::
fsync
::
Level
)
->
c_int
{
pub
fn
fsync_fd
(
fd
:
c_int
,
level
:
io
::
fsync
::
Level
)
->
c_int
{
use
libc
::
consts
::
os
::
extra
::
*
;
use
libc
::
funcs
::
posix88
::
fcntl
::
*
;
use
libc
::
funcs
::
posix01
::
unistd
::
*
;
...
...
@@ -321,19 +288,19 @@ fn fsync_fd(fd: c_int, level: io::fsync::Level) -> c_int {
}
#[cfg(target_os
=
"freebsd"
)]
fn
fsync_fd
(
fd
:
c_int
,
_
l
:
io
::
fsync
::
Level
)
->
c_int
{
pub
fn
fsync_fd
(
fd
:
c_int
,
_
l
:
io
::
fsync
::
Level
)
->
c_int
{
use
libc
::
funcs
::
posix01
::
unistd
::
*
;
return
fsync
(
fd
);
}
#[cfg(windows)]
fn
waitpid
(
pid
:
pid_t
)
->
c_int
{
pub
fn
waitpid
(
pid
:
pid_t
)
->
c_int
{
return
rustrt
::
rust_process_wait
(
pid
);
}
#[cfg(unix)]
fn
waitpid
(
pid
:
pid_t
)
->
c_int
{
pub
fn
waitpid
(
pid
:
pid_t
)
->
c_int
{
use
libc
::
funcs
::
posix01
::
wait
::
*
;
let
status
=
0
as
c_int
;
...
...
@@ -344,7 +311,7 @@ fn waitpid(pid: pid_t) -> c_int {
#[cfg(unix)]
fn
pipe
()
->
{
in
:
c_int
,
out
:
c_int
}
{
pub
fn
pipe
()
->
{
in
:
c_int
,
out
:
c_int
}
{
let
fds
=
{
mut
in
:
0
as
c_int
,
mut
out
:
0
as
c_int
};
assert
(
libc
::
pipe
(
ptr
::
mut_addr_of
(
fds
.in
))
==
(
0
as
c_int
));
...
...
@@ -354,19 +321,17 @@ fn pipe() -> {in: c_int, out: c_int} {
#[cfg(windows)]
fn
pipe
()
->
{
in
:
c_int
,
out
:
c_int
}
{
// FIXME: remove this when export globs work properly. #1238
use
libc
::
consts
::
os
::
extra
::
*
;
pub
fn
pipe
()
->
{
in
:
c_int
,
out
:
c_int
}
{
// Windows pipes work subtly differently than unix pipes, and their
// inheritance has to be handled in a different way that I do not fully
// understand. Here we explicitly make the pipe non-inheritable, which
// means to pass it to a subprocess they need to be duplicated first, as
// in rust_run_program.
let
fds
=
{
mut
in
:
0
as
c_int
,
mut
out
:
0
as
c_int
};
mut
out
:
0
as
c_int
};
let
res
=
libc
::
pipe
(
ptr
::
mut_addr_of
(
fds
.in
),
1024
as
c_uint
,
(
O_BINARY
|
O_NOINHERIT
)
as
c_int
);
(
libc
::
O_BINARY
|
libc
::
O_NOINHERIT
)
as
c_int
);
assert
(
res
==
0
as
c_int
);
assert
(
fds
.in
!=
-
1
as
c_int
&&
fds
.in
!=
0
as
c_int
);
assert
(
fds
.out
!=
-
1
as
c_int
&&
fds
.in
!=
0
as
c_int
);
...
...
@@ -378,7 +343,7 @@ fn dup2(src: c_int, dst: c_int) -> c_int {
}
fn
dll_filename
(
base
:
&
str
)
->
~
str
{
pub
fn
dll_filename
(
base
:
&
str
)
->
~
str
{
return
pre
()
+
str
::
from_slice
(
base
)
+
dll_suffix
();
#[cfg(unix)]
...
...
@@ -389,7 +354,7 @@ fn pre() -> ~str { ~"" }
}
fn
self_exe_path
()
->
Option
<
Path
>
{
pub
fn
self_exe_path
()
->
Option
<
Path
>
{
#[cfg(target_os
=
"freebsd"
)]
fn
load_self
()
->
Option
<~
str
>
{
...
...
@@ -419,22 +384,17 @@ fn load_self() -> Option<~str> {
#[cfg(target_os
=
"macos"
)]
fn
load_self
()
->
Option
<~
str
>
{
// FIXME: remove imports when export globs work properly. #1238
use
libc
::
funcs
::
extra
::
*
;
do
fill_charp_buf
()
|
buf
,
sz
|
{
_
NSGetExecutablePath
(
buf
,
ptr
::
mut_addr_of
(
sz
as
u32
))
libc
::
_
NSGetExecutablePath
(
buf
,
ptr
::
mut_addr_of
(
sz
as
u32
))
==
(
0
as
c_int
)
}
}
#[cfg(windows)]
fn
load_self
()
->
Option
<~
str
>
{
// FIXME: remove imports when export globs work properly. #1238
use
libc
::
types
::
os
::
arch
::
extra
::
*
;
use
libc
::
funcs
::
extra
::
kernel32
::
*
;
use
win32
::
*
;
do
fill_utf16_buf_and_decode
()
|
buf
,
sz
|
{
GetModuleFileNameW
(
0u
as
dword
,
buf
,
sz
)
libc
::
GetModuleFileNameW
(
0u
as
libc
::
dword
,
buf
,
sz
)
}
}
...
...
@@ -457,7 +417,7 @@ fn load_self() -> Option<~str> {
*
* Otherwise, homedir returns option::none.
*/
fn
homedir
()
->
Option
<
Path
>
{
pub
fn
homedir
()
->
Option
<
Path
>
{
return
match
getenv
(
~
"HOME"
)
{
Some
(
p
)
=>
if
!
str
::
is_empty
(
p
)
{
Some
(
Path
(
p
))
...
...
@@ -494,7 +454,7 @@ fn secondary() -> Option<Path> {
* 'USERPROFILE' environment variable if any are set and not the empty
* string. Otherwise, tmpdir returns the path to the Windows directory.
*/
fn
tmpdir
()
->
Path
{
pub
fn
tmpdir
()
->
Path
{
return
lookup
();
fn
getenv_nonempty
(
v
:
&
str
)
->
Option
<
Path
>
{
...
...
@@ -528,7 +488,7 @@ fn lookup() -> Path {
}
}
/// Recursively walk a directory structure
fn
walk_dir
(
p
:
&
Path
,
f
:
fn
((
&
Path
))
->
bool
)
{
pub
fn
walk_dir
(
p
:
&
Path
,
f
:
fn
((
&
Path
))
->
bool
)
{
walk_dir_
(
p
,
f
);
...
...
@@ -557,21 +517,19 @@ fn walk_dir_(p: &Path, f: fn((&Path)) -> bool) -> bool {
}
/// Indicates whether a path represents a directory
fn
path_is_dir
(
p
:
&
Path
)
->
bool
{
pub
fn
path_is_dir
(
p
:
&
Path
)
->
bool
{
do
str
::
as_c_str
(
p
.to_str
())
|
buf
|
{
rustrt
::
rust_path_is_dir
(
buf
)
!=
0
as
c_int
}
}
/// Indicates whether a path exists
fn
path_exists
(
p
:
&
Path
)
->
bool
{
pub
fn
path_exists
(
p
:
&
Path
)
->
bool
{
do
str
::
as_c_str
(
p
.to_str
())
|
buf
|
{
rustrt
::
rust_path_exists
(
buf
)
!=
0
as
c_int
}
}
// FIXME (#2622): under Windows, we should prepend the current drive letter
// to paths that start with a slash.
/**
* Convert a relative path to an absolute path
*
...
...
@@ -582,7 +540,7 @@ fn path_exists(p: &Path) -> bool {
// NB: this is here rather than in path because it is a form of environment
// querying; what it does depends on the process working directory, not just
// the input paths.
fn
make_absolute
(
p
:
&
Path
)
->
Path
{
pub
fn
make_absolute
(
p
:
&
Path
)
->
Path
{
if
p
.is_absolute
{
copy
*
p
}
else
{
...
...
@@ -592,18 +550,16 @@ fn make_absolute(p: &Path) -> Path {
/// Creates a directory at the specified path
fn
make_dir
(
p
:
&
Path
,
mode
:
c_int
)
->
bool
{
pub
fn
make_dir
(
p
:
&
Path
,
mode
:
c_int
)
->
bool
{
return
mkdir
(
p
,
mode
);
#[cfg(windows)]
fn
mkdir
(
p
:
&
Path
,
_
mode
:
c_int
)
->
bool
{
// FIXME: remove imports when export globs work properly. #1238
use
libc
::
types
::
os
::
arch
::
extra
::
*
;
use
libc
::
funcs
::
extra
::
kernel32
::
*
;
use
win32
::
*
;
// FIXME: turn mode into something useful? #2623
do
as_utf16_p
(
p
.to_str
())
|
buf
|
{
CreateDirectoryW
(
buf
,
unsafe
{
cast
::
reinterpret_cast
(
&
0
)
})
libc
::
CreateDirectoryW
(
buf
,
unsafe
{
unsafe
::
reinterpret_cast
(
&
0
)
})
!=
(
0
as
BOOL
)
}
}
...
...
@@ -618,7 +574,7 @@ fn mkdir(p: &Path, mode: c_int) -> bool {
/// Lists the contents of a directory
#[allow(non_implicitly_copyable_typarams)]
fn
list_dir
(
p
:
&
Path
)
->
~
[
~
str
]
{
pub
fn
list_dir
(
p
:
&
Path
)
->
~
[
~
str
]
{
#[cfg(unix)]
fn
star
(
p
:
&
Path
)
->
Path
{
copy
*
p
}
...
...
@@ -636,22 +592,19 @@ fn star(p: &Path) -> Path { p.push("*") }
*
* This version prepends each entry with the directory.
*/
fn
list_dir_path
(
p
:
&
Path
)
->
~
[
~
Path
]
{
pub
fn
list_dir_path
(
p
:
&
Path
)
->
~
[
~
Path
]
{
os
::
list_dir
(
p
)
.map
(|
f
|
~
p
.push
(
*
f
))
}
/// Removes a directory at the specified path
fn
remove_dir
(
p
:
&
Path
)
->
bool
{
pub
fn
remove_dir
(
p
:
&
Path
)
->
bool
{
return
rmdir
(
p
);
#[cfg(windows)]
fn
rmdir
(
p
:
&
Path
)
->
bool
{
// FIXME: remove imports when export globs work properly. #1238
use
libc
::
funcs
::
extra
::
kernel32
::
*
;
use
libc
::
types
::
os
::
arch
::
extra
::
*
;
use
win32
::
*
;
return
do
as_utf16_p
(
p
.to_str
())
|
buf
|
{
RemoveDirectoryW
(
buf
)
!=
(
0
as
BOOL
)
libc
::
RemoveDirectoryW
(
buf
)
!=
(
0
as
libc
::
BOOL
)
};
}
...
...
@@ -663,17 +616,14 @@ fn rmdir(p: &Path) -> bool {
}
}
fn
change_dir
(
p
:
&
Path
)
->
bool
{
pub
fn
change_dir
(
p
:
&
Path
)
->
bool
{
return
chdir
(
p
);
#[cfg(windows)]
fn
chdir
(
p
:
&
Path
)
->
bool
{
// FIXME: remove imports when export globs work properly. #1238
use
libc
::
funcs
::
extra
::
kernel32
::
*
;
use
libc
::
types
::
os
::
arch
::
extra
::
*
;
use
win32
::
*
;
return
do
as_utf16_p
(
p
.to_str
())
|
buf
|
{
SetCurrentDirectoryW
(
buf
)
!=
(
0
as
BOOL
)
libc
::
SetCurrentDirectoryW
(
buf
)
!=
(
0
as
libc
::
BOOL
)
};
}
...
...
@@ -686,18 +636,16 @@ fn chdir(p: &Path) -> bool {
}
/// Copies a file from one location to another
fn
copy_file
(
from
:
&
Path
,
to
:
&
Path
)
->
bool
{
pub
fn
copy_file
(
from
:
&
Path
,
to
:
&
Path
)
->
bool
{
return
do_copy_file
(
from
,
to
);
#[cfg(windows)]
fn
do_copy_file
(
from
:
&
Path
,
to
:
&
Path
)
->
bool
{
// FIXME: remove imports when export globs work properly. #1238
use
libc
::
funcs
::
extra
::
kernel32
::
*
;
use
libc
::
types
::
os
::
arch
::
extra
::
*
;
use
win32
::
*
;
return
do
as_utf16_p
(
from
.to_str
())
|
fromp
|
{
do
as_utf16_p
(
to
.to_str
())
|
top
|
{
CopyFileW
(
fromp
,
top
,
(
0
as
BOOL
))
!=
(
0
as
BOOL
)
libc
::
CopyFileW
(
fromp
,
top
,
(
0
as
libc
::
BOOL
))
!=
(
0
as
libc
::
BOOL
)
}
}
}
...
...
@@ -748,18 +696,14 @@ fn do_copy_file(from: &Path, to: &Path) -> bool {
}
/// Deletes an existing file
fn
remove_file
(
p
:
&
Path
)
->
bool
{
pub
fn
remove_file
(
p
:
&
Path
)
->
bool
{
return
unlink
(
p
);
#[cfg(windows)]
fn
unlink
(
p
:
&
Path
)
->
bool
{
// FIXME (similar to Issue #2006): remove imports when export globs
// work properly.
use
libc
::
funcs
::
extra
::
kernel32
::
*
;
use
libc
::
types
::
os
::
arch
::
extra
::
*
;
use
win32
::
*
;
return
do
as_utf16_p
(
p
.to_str
())
|
buf
|
{
DeleteFileW
(
buf
)
!=
(
0
as
BOOL
)
libc
::
DeleteFileW
(
buf
)
!=
(
0
as
libc
::
BOOL
)
};
}
...
...
@@ -772,7 +716,7 @@ fn unlink(p: &Path) -> bool {
}
/// Get a string representing the platform-dependent last error
fn
last_os_error
()
->
~
str
{
pub
fn
last_os_error
()
->
~
str
{
rustrt
::
last_os_error
()
}
...
...
@@ -784,64 +728,59 @@ fn last_os_error() -> ~str {
* and is supervised by the scheduler then any user-specified exit status is
* ignored and the process exits with the default failure status
*/
fn
set_exit_status
(
code
:
int
)
{
pub
fn
set_exit_status
(
code
:
int
)
{
rustrt
::
rust_set_exit_status
(
code
as
libc
::
intptr_t
);
}
#[cfg(unix)]
fn
family
()
->
~
str
{
~
"unix"
}
pub
fn
family
()
->
~
str
{
~
"unix"
}
#[cfg(windows)]
fn
family
()
->
~
str
{
~
"windows"
}
pub
fn
family
()
->
~
str
{
~
"windows"
}
#[cfg(target_os
=
"macos"
)]
mod
consts
{
#[legacy_exports]
;
fn
sysname
()
->
~
str
{
~
"macos"
}
fn
exe_suffix
()
->
~
str
{
~
""
}
fn
dll_suffix
()
->
~
str
{
~
".dylib"
}
pub
fn
sysname
()
->
~
str
{
~
"macos"
}
pub
fn
exe_suffix
()
->
~
str
{
~
""
}
pub
fn
dll_suffix
()
->
~
str
{
~
".dylib"
}
}
#[cfg(target_os
=
"freebsd"
)]
mod
consts
{
#[legacy_exports]
;
fn
sysname
()
->
~
str
{
~
"freebsd"
}
fn
exe_suffix
()
->
~
str
{
~
""
}
fn
dll_suffix
()
->
~
str
{
~
".so"
}
pub
fn
sysname
()
->
~
str
{
~
"freebsd"
}
pub
fn
exe_suffix
()
->
~
str
{
~
""
}
pub
fn
dll_suffix
()
->
~
str
{
~
".so"
}
}
#[cfg(target_os
=
"linux"
)]
mod
consts
{
#[legacy_exports]
;
fn
sysname
()
->
~
str
{
~
"linux"
}
fn
exe_suffix
()
->
~
str
{
~
""
}
fn
dll_suffix
()
->
~
str
{
~
".so"
}
pub
fn
sysname
()
->
~
str
{
~
"linux"
}
pub
fn
exe_suffix
()
->
~
str
{
~
""
}
pub
fn
dll_suffix
()
->
~
str
{
~
".so"
}
}
#[cfg(target_os
=
"win32"
)]
mod
consts
{
#[legacy_exports]
;
fn
sysname
()
->
~
str
{
~
"win32"
}
fn
exe_suffix
()
->
~
str
{
~
".exe"
}
fn
dll_suffix
()
->
~
str
{
~
".dll"
}
pub
fn
sysname
()
->
~
str
{
~
"win32"
}
pub
fn
exe_suffix
()
->
~
str
{
~
".exe"
}
pub
fn
dll_suffix
()
->
~
str
{
~
".dll"
}
}
#[cfg(target_arch
=
"x86"
)]
fn
arch
()
->
~
str
{
~
"x86"
}
pub
fn
arch
()
->
~
str
{
~
"x86"
}
#[cfg(target_arch
=
"x86_64"
)]
fn
arch
()
->
~
str
{
~
"x86_64"
}
pub
fn
arch
()
->
~
str
{
~
"x86_64"
}
#[cfg(target_arch
=
"arm"
)]
fn
arch
()
->
str
{
~
"arm"
}
pub
fn
arch
()
->
str
{
~
"arm"
}
#[cfg(test)]
#[allow(non_implicitly_copyable_typarams)]
mod
tests
{
#[legacy_exports]
;
#[test]
fn
last_os_error
()
{
pub
fn
last_os_error
()
{
log
(
debug
,
last_os_error
());
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录