提交 b41d5146 编写于 作者: G Graydon Hoare

De-export os and libc. Close #2006.

上级 0bcb3bc5
......@@ -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;
......
......@@ -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};
......
......@@ -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;
}
......
......@@ -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.
先完成此消息的编辑!
想要评论请 注册