From 8ddd5f5d8d3363f215d7779aaa9aee16c8ae62ae Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Mon, 24 Feb 2014 13:16:03 -0500 Subject: [PATCH 01/10] Remove libc from std These wrappers are bound to a specific libc, and they don't need to be part of libstd. --- src/{libstd/libc.rs => liblibc/lib.rs} | 517 +++++++++++++------------ src/libstd/lib.rs | 5 +- 2 files changed, 267 insertions(+), 255 deletions(-) rename src/{libstd/libc.rs => liblibc/lib.rs} (92%) diff --git a/src/libstd/libc.rs b/src/liblibc/lib.rs similarity index 92% rename from src/libstd/libc.rs rename to src/liblibc/lib.rs index 42221f074491d..ec147ac5228f4 100644 --- a/src/libstd/libc.rs +++ b/src/liblibc/lib.rs @@ -8,14 +8,18 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +#[feature(globs)]; +#[crate_id = "libc#0.10-pre"]; +#[experimental]; + /*! * Bindings for the C standard library and other platform libraries * * This module contains bindings to the C standard library, * organized into modules by their defining standard. * Additionally, it contains some assorted platform-specific definitions. -* For convenience, most functions and types are reexported from `std::libc`, -* so `pub use std::libc::*` will import the available +* For convenience, most functions and types are reexported from `libc`, +* so `pub use std::*` will import the available * C bindings as appropriate for the target platform. The exact * set of functions available are platform specific. * @@ -70,116 +74,123 @@ // Initial glob-exports mean that all the contents of all the modules // wind up exported, if you're interested in writing platform-specific code. -pub use libc::types::common::c95::*; -pub use libc::types::common::c99::*; -pub use libc::types::common::posix88::*; -pub use libc::types::common::posix01::*; -pub use libc::types::common::posix08::*; -pub use libc::types::common::bsd44::*; -pub use libc::types::os::common::posix01::*; -pub use libc::types::os::common::bsd44::*; -pub use libc::types::os::arch::c95::*; -pub use libc::types::os::arch::c99::*; -pub use libc::types::os::arch::posix88::*; -pub use libc::types::os::arch::posix01::*; -pub use libc::types::os::arch::posix08::*; -pub use libc::types::os::arch::bsd44::*; -pub use libc::types::os::arch::extra::*; - -pub use libc::consts::os::c95::*; -pub use libc::consts::os::c99::*; -pub use libc::consts::os::posix88::*; -pub use libc::consts::os::posix01::*; -pub use libc::consts::os::posix08::*; -pub use libc::consts::os::bsd44::*; -pub use libc::consts::os::extra::*; -pub use libc::consts::os::sysconf::*; - -pub use libc::funcs::c95::ctype::*; -pub use libc::funcs::c95::stdio::*; -pub use libc::funcs::c95::stdlib::*; -pub use libc::funcs::c95::string::*; - -pub use libc::funcs::posix88::stat_::*; -pub use libc::funcs::posix88::stdio::*; -pub use libc::funcs::posix88::fcntl::*; -pub use libc::funcs::posix88::dirent::*; -pub use libc::funcs::posix88::unistd::*; -pub use libc::funcs::posix88::mman::*; - -pub use libc::funcs::posix01::stat_::*; -pub use libc::funcs::posix01::unistd::*; -pub use libc::funcs::posix01::glob::*; -pub use libc::funcs::posix01::mman::*; -pub use libc::funcs::posix08::unistd::*; - -pub use libc::funcs::bsd43::*; -pub use libc::funcs::bsd44::*; -pub use libc::funcs::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::common::posix01::*; +pub use types::os::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::*; + +pub use consts::os::c95::*; +pub use consts::os::c99::*; +pub use consts::os::posix88::*; +pub use consts::os::posix01::*; +pub use consts::os::posix08::*; +pub use consts::os::bsd44::*; +pub use consts::os::extra::*; +pub use consts::os::sysconf::*; + +pub use funcs::c95::ctype::*; +pub use funcs::c95::stdio::*; +pub use funcs::c95::stdlib::*; +pub use funcs::c95::string::*; + +pub use funcs::posix88::stat_::*; +pub use funcs::posix88::stdio::*; +pub use funcs::posix88::fcntl::*; +pub use funcs::posix88::dirent::*; +pub use funcs::posix88::unistd::*; +pub use funcs::posix88::mman::*; + +pub use funcs::posix01::stat_::*; +pub use funcs::posix01::unistd::*; +pub use funcs::posix01::glob::*; +pub use funcs::posix01::mman::*; +pub use funcs::posix08::unistd::*; + +pub use funcs::bsd43::*; +pub use funcs::bsd44::*; +pub use funcs::extra::*; #[cfg(target_os = "win32")] -pub use libc::funcs::extra::kernel32::*; +pub use funcs::extra::kernel32::*; #[cfg(target_os = "win32")] -pub use libc::funcs::extra::msvcrt::*; +pub use funcs::extra::msvcrt::*; // Explicit export lists for the intersection (provided here) mean that // you can write more-platform-agnostic code if you stick to just these // symbols. -pub use libc::types::common::c95::{FILE, c_void, fpos_t}; -pub use libc::types::common::posix88::{DIR, dirent_t}; -pub use libc::types::os::arch::c95::{c_char, c_double, c_float, c_int}; -pub use libc::types::os::arch::c95::{c_long, c_short, c_uchar, c_ulong}; -pub use libc::types::os::arch::c95::{c_ushort, clock_t, ptrdiff_t}; -pub use libc::types::os::arch::c95::{size_t, time_t}; -pub use libc::types::os::arch::c99::{c_longlong, c_ulonglong, intptr_t}; -pub use libc::types::os::arch::c99::{uintptr_t}; -pub use libc::types::os::arch::posix88::{dev_t, dirent_t, ino_t, mode_t}; -pub use libc::types::os::arch::posix88::{off_t, pid_t, ssize_t}; - -pub use libc::consts::os::c95::{_IOFBF, _IOLBF, _IONBF, BUFSIZ, EOF}; -pub use libc::consts::os::c95::{EXIT_FAILURE, EXIT_SUCCESS}; -pub use libc::consts::os::c95::{FILENAME_MAX, FOPEN_MAX, L_tmpnam}; -pub use libc::consts::os::c95::{RAND_MAX, SEEK_CUR, SEEK_END}; -pub use libc::consts::os::c95::{SEEK_SET, TMP_MAX}; -pub use libc::consts::os::posix88::{F_OK, O_APPEND, O_CREAT, O_EXCL}; -pub use libc::consts::os::posix88::{O_RDONLY, O_RDWR, O_TRUNC, O_WRONLY}; -pub use libc::consts::os::posix88::{R_OK, S_IEXEC, S_IFBLK, S_IFCHR}; -pub use libc::consts::os::posix88::{S_IFDIR, S_IFIFO, S_IFMT, S_IFREG, S_IFLNK}; -pub use libc::consts::os::posix88::{S_IREAD, S_IRUSR, S_IRWXU, S_IWUSR}; -pub use libc::consts::os::posix88::{STDERR_FILENO, STDIN_FILENO}; -pub use libc::consts::os::posix88::{STDOUT_FILENO, W_OK, X_OK}; - -pub use libc::funcs::c95::ctype::{isalnum, isalpha, iscntrl, isdigit}; -pub use libc::funcs::c95::ctype::{islower, isprint, ispunct, isspace}; -pub use libc::funcs::c95::ctype::{isupper, isxdigit, tolower, toupper}; - -pub use libc::funcs::c95::stdio::{fclose, feof, ferror, fflush, fgetc}; -pub use libc::funcs::c95::stdio::{fgetpos, fgets, fopen, fputc, fputs}; -pub use libc::funcs::c95::stdio::{fread, freopen, fseek, fsetpos, ftell}; -pub use libc::funcs::c95::stdio::{fwrite, perror, puts, remove, rewind}; -pub use libc::funcs::c95::stdio::{setbuf, setvbuf, tmpfile, ungetc}; - -pub use libc::funcs::c95::stdlib::{abs, atof, atoi, calloc, exit, _exit}; -pub use libc::funcs::c95::stdlib::{free, getenv, labs, malloc, rand}; -pub use libc::funcs::c95::stdlib::{realloc, srand, strtod, strtol}; -pub use libc::funcs::c95::stdlib::{strtoul, system}; - -pub use libc::funcs::c95::string::{memchr, memcmp}; -pub use libc::funcs::c95::string::{strcat, strchr, strcmp}; -pub use libc::funcs::c95::string::{strcoll, strcpy, strcspn, strerror}; -pub use libc::funcs::c95::string::{strlen, strncat, strncmp, strncpy}; -pub use libc::funcs::c95::string::{strpbrk, strrchr, strspn, strstr}; -pub use libc::funcs::c95::string::{strtok, strxfrm}; - -pub use libc::funcs::posix88::fcntl::{open, creat}; -pub use libc::funcs::posix88::stat_::{chmod, fstat, mkdir, stat}; -pub use libc::funcs::posix88::stdio::{fdopen, fileno, pclose, popen}; -pub use libc::funcs::posix88::unistd::{access, chdir, close, dup, dup2}; -pub use libc::funcs::posix88::unistd::{execv, execve, execvp, getcwd}; -pub use libc::funcs::posix88::unistd::{getpid, isatty, lseek, pipe, read}; -pub use libc::funcs::posix88::unistd::{rmdir, unlink, write}; - +pub use types::common::c95::{FILE, c_void, fpos_t}; +pub use types::common::posix88::{DIR, dirent_t}; +pub use types::os::arch::c95::{c_char, c_double, c_float, c_int}; +pub use types::os::arch::c95::{c_long, c_short, c_uchar, c_ulong}; +pub use types::os::arch::c95::{c_ushort, clock_t, ptrdiff_t}; +pub use types::os::arch::c95::{size_t, time_t}; +pub use types::os::arch::c99::{c_longlong, c_ulonglong, intptr_t}; +pub use types::os::arch::c99::{uintptr_t}; +pub use types::os::arch::posix88::{dev_t, dirent_t, ino_t, mode_t}; +pub use types::os::arch::posix88::{off_t, pid_t, ssize_t}; + +pub use consts::os::c95::{_IOFBF, _IOLBF, _IONBF, BUFSIZ, EOF}; +pub use consts::os::c95::{EXIT_FAILURE, EXIT_SUCCESS}; +pub use consts::os::c95::{FILENAME_MAX, FOPEN_MAX, L_tmpnam}; +pub use consts::os::c95::{RAND_MAX, SEEK_CUR, SEEK_END}; +pub use consts::os::c95::{SEEK_SET, TMP_MAX}; +pub use consts::os::posix88::{F_OK, O_APPEND, O_CREAT, O_EXCL}; +pub use consts::os::posix88::{O_RDONLY, O_RDWR, O_TRUNC, O_WRONLY}; +pub use consts::os::posix88::{R_OK, S_IEXEC, S_IFBLK, S_IFCHR}; +pub use consts::os::posix88::{S_IFDIR, S_IFIFO, S_IFMT, S_IFREG, S_IFLNK}; +pub use consts::os::posix88::{S_IREAD, S_IRUSR, S_IRWXU, S_IWUSR}; +pub use consts::os::posix88::{STDERR_FILENO, STDIN_FILENO}; +pub use consts::os::posix88::{STDOUT_FILENO, W_OK, X_OK}; + +pub use funcs::c95::ctype::{isalnum, isalpha, iscntrl, isdigit}; +pub use funcs::c95::ctype::{islower, isprint, ispunct, isspace}; +pub use funcs::c95::ctype::{isupper, isxdigit, tolower, toupper}; + +pub use funcs::c95::stdio::{fclose, feof, ferror, fflush, fgetc}; +pub use funcs::c95::stdio::{fgetpos, fgets, fopen, fputc, fputs}; +pub use funcs::c95::stdio::{fread, freopen, fseek, fsetpos, ftell}; +pub use funcs::c95::stdio::{fwrite, perror, puts, remove, rewind}; +pub use funcs::c95::stdio::{setbuf, setvbuf, tmpfile, ungetc}; + +pub use funcs::c95::stdlib::{abs, atof, atoi, calloc, exit, _exit}; +pub use funcs::c95::stdlib::{free, getenv, labs, malloc, rand}; +pub use funcs::c95::stdlib::{realloc, srand, strtod, strtol}; +pub use funcs::c95::stdlib::{strtoul, system}; + +pub use funcs::c95::string::{memchr, memcmp}; +pub use funcs::c95::string::{strcat, strchr, strcmp}; +pub use funcs::c95::string::{strcoll, strcpy, strcspn, strerror}; +pub use funcs::c95::string::{strlen, strncat, strncmp, strncpy}; +pub use funcs::c95::string::{strpbrk, strrchr, strspn, strstr}; +pub use funcs::c95::string::{strtok, strxfrm}; + +pub use funcs::posix88::fcntl::{open, creat}; +pub use funcs::posix88::stat_::{chmod, fstat, mkdir, stat}; +pub use funcs::posix88::stdio::{fdopen, fileno, pclose, popen}; +pub use funcs::posix88::unistd::{access, chdir, close, dup, dup2}; +pub use funcs::posix88::unistd::{execv, execve, execvp, getcwd}; +pub use funcs::posix88::unistd::{getpid, isatty, lseek, pipe, read}; +pub use funcs::posix88::unistd::{rmdir, unlink, write}; + +/// A wrapper for a nullable pointer. Don't use this except for interacting +/// with libc. Basically Option, but without the dependance on libstd. +// If/when libprim happens, this can be removed in favor of that +pub enum Nullable { + Null, + Some(T) +} pub mod types { @@ -237,8 +248,8 @@ pub mod types { pub mod os { pub mod common { pub mod posix01 { - use libc::types::common::c95::{c_void}; - use libc::types::os::arch::c95::{c_char, c_ulong, size_t, + use types::common::c95::{c_void}; + use types::os::arch::c95::{c_char, c_ulong, size_t, time_t, suseconds_t, c_long}; pub type pthread_t = c_ulong; @@ -268,7 +279,7 @@ pub mod types { pub enum timezone {} } pub mod bsd44 { - use libc::types::os::arch::c95::{c_char, c_int, c_uint}; + use types::os::arch::c95::{c_char, c_int, c_uint}; pub type socklen_t = u32; pub type sa_family_t = u16; @@ -383,10 +394,10 @@ pub mod types { } #[cfg(target_arch = "x86")] pub mod posix01 { - use libc::types::os::arch::c95::{c_short, c_long, time_t}; - use libc::types::os::arch::posix88::{dev_t, gid_t, ino_t}; - use libc::types::os::arch::posix88::{mode_t, off_t}; - use libc::types::os::arch::posix88::{uid_t}; + use types::os::arch::c95::{c_short, c_long, time_t}; + use types::os::arch::posix88::{dev_t, gid_t, ino_t}; + use types::os::arch::posix88::{mode_t, off_t}; + use types::os::arch::posix88::{uid_t}; pub type nlink_t = u32; pub type blksize_t = i32; @@ -426,9 +437,9 @@ pub mod types { } #[cfg(target_arch = "arm")] pub mod posix01 { - use libc::types::os::arch::c95::{c_uchar, c_uint, c_ulong, time_t}; - use libc::types::os::arch::c99::{c_longlong, c_ulonglong}; - use libc::types::os::arch::posix88::{uid_t, gid_t, ino_t}; + use types::os::arch::c95::{c_uchar, c_uint, c_ulong, time_t}; + use types::os::arch::c99::{c_longlong, c_ulonglong}; + use types::os::arch::posix88::{uid_t, gid_t, ino_t}; pub type nlink_t = u16; pub type blksize_t = u32; @@ -467,10 +478,10 @@ pub mod types { } #[cfg(target_arch = "mips")] pub mod posix01 { - use libc::types::os::arch::c95::{c_long, c_ulong, time_t}; - use libc::types::os::arch::posix88::{gid_t, ino_t}; - use libc::types::os::arch::posix88::{mode_t, off_t}; - use libc::types::os::arch::posix88::{uid_t}; + use types::os::arch::c95::{c_long, c_ulong, time_t}; + use types::os::arch::posix88::{gid_t, ino_t}; + use types::os::arch::posix88::{mode_t, off_t}; + use types::os::arch::posix88::{uid_t}; pub type nlink_t = u32; pub type blksize_t = i32; @@ -552,10 +563,10 @@ pub mod types { pub type ssize_t = i64; } pub mod posix01 { - use libc::types::os::arch::c95::{c_int, c_long, time_t}; - use libc::types::os::arch::posix88::{dev_t, gid_t, ino_t}; - use libc::types::os::arch::posix88::{mode_t, off_t}; - use libc::types::os::arch::posix88::{uid_t}; + use types::os::arch::c95::{c_int, c_long, time_t}; + use types::os::arch::posix88::{dev_t, gid_t, ino_t}; + use types::os::arch::posix88::{mode_t, off_t}; + use types::os::arch::posix88::{uid_t}; pub type nlink_t = u64; pub type blksize_t = i64; @@ -603,10 +614,10 @@ pub mod types { pub mod os { pub mod common { pub mod posix01 { - use libc::types::common::c95::{c_void}; - use libc::types::os::arch::c95::{c_char, c_int, size_t, + use types::common::c95::{c_void}; + use types::os::arch::c95::{c_char, c_int, size_t, time_t, suseconds_t, c_long}; - use libc::types::os::arch::c99::{uintptr_t}; + use types::os::arch::c99::{uintptr_t}; pub type pthread_t = uintptr_t; @@ -639,7 +650,7 @@ pub mod types { pub enum timezone {} } pub mod bsd44 { - use libc::types::os::arch::c95::{c_char, c_int, c_uint}; + use types::os::arch::c95::{c_char, c_int, c_uint}; pub type socklen_t = u32; pub type sa_family_t = u8; @@ -743,12 +754,12 @@ pub mod types { pub type ssize_t = i64; } pub mod posix01 { - use libc::types::common::c95::{c_void}; - use libc::types::common::c99::{uint8_t, uint32_t, int32_t}; - use libc::types::os::arch::c95::{c_long, time_t}; - use libc::types::os::arch::posix88::{dev_t, gid_t, ino_t}; - use libc::types::os::arch::posix88::{mode_t, off_t}; - use libc::types::os::arch::posix88::{uid_t}; + use types::common::c95::{c_void}; + use types::common::c99::{uint8_t, uint32_t, int32_t}; + use types::os::arch::c95::{c_long, time_t}; + use types::os::arch::posix88::{dev_t, gid_t, ino_t}; + use types::os::arch::posix88::{mode_t, off_t}; + use types::os::arch::posix88::{uid_t}; pub type nlink_t = u16; pub type blksize_t = i64; @@ -799,11 +810,11 @@ pub mod types { pub mod os { pub mod common { pub mod posix01 { - use libc::types::os::arch::c95::{c_short, time_t, suseconds_t, + use types::os::arch::c95::{c_short, time_t, suseconds_t, c_long}; - use libc::types::os::arch::extra::{int64, time64_t}; - use libc::types::os::arch::posix88::{dev_t, ino_t}; - use libc::types::os::arch::posix88::mode_t; + use types::os::arch::extra::{int64, time64_t}; + use types::os::arch::posix88::{dev_t, ino_t}; + use types::os::arch::posix88::mode_t; // Note: this is the struct called stat64 in win32. Not stat, // nor stati64. @@ -841,7 +852,7 @@ pub mod types { } pub mod bsd44 { - use libc::types::os::arch::c95::{c_char, c_int, c_uint, size_t}; + use types::os::arch::c95::{c_char, c_int, c_uint, size_t}; pub type SOCKET = c_uint; pub type socklen_t = c_int; @@ -974,13 +985,13 @@ pub mod types { } pub mod extra { use ptr; - use libc::consts::os::extra::{MAX_PROTOCOL_CHAIN, + use consts::os::extra::{MAX_PROTOCOL_CHAIN, WSAPROTOCOL_LEN}; - use libc::types::common::c95::c_void; - use libc::types::os::arch::c95::{c_char, c_int, c_uint, size_t}; - use libc::types::os::arch::c95::{c_long, c_ulong}; - use libc::types::os::arch::c95::{wchar_t}; - use libc::types::os::arch::c99::{c_ulonglong, c_longlong}; + use types::common::c95::c_void; + use types::os::arch::c95::{c_char, c_int, c_uint, size_t}; + use types::os::arch::c95::{c_long, c_ulong}; + use types::os::arch::c95::{wchar_t}; + use types::os::arch::c99::{c_ulonglong, c_longlong}; pub type BOOL = c_int; pub type BYTE = u8; @@ -1172,10 +1183,10 @@ pub mod types { pub mod os { pub mod common { pub mod posix01 { - use libc::types::common::c95::c_void; - use libc::types::os::arch::c95::{c_char, c_int, size_t, + use types::common::c95::c_void; + use types::os::arch::c95::{c_char, c_int, size_t, time_t, suseconds_t, c_long}; - use libc::types::os::arch::c99::{uintptr_t}; + use types::os::arch::c99::{uintptr_t}; pub type pthread_t = uintptr_t; @@ -1209,7 +1220,7 @@ pub mod types { } pub mod bsd44 { - use libc::types::os::arch::c95::{c_char, c_int, c_uint}; + use types::os::arch::c95::{c_char, c_int, c_uint}; pub type socklen_t = c_int; pub type sa_family_t = u8; @@ -1314,9 +1325,9 @@ pub mod types { pub type ssize_t = i32; } pub mod posix01 { - use libc::types::common::c99::{int32_t, int64_t, uint32_t}; - use libc::types::os::arch::c95::{c_char, c_long, time_t}; - use libc::types::os::arch::posix88::{dev_t, gid_t, ino_t, + use types::common::c99::{int32_t, int64_t, uint32_t}; + use types::os::arch::c95::{c_char, c_long, time_t}; + use types::os::arch::posix88::{dev_t, gid_t, ino_t, mode_t, off_t, uid_t}; pub type nlink_t = u16; @@ -1411,11 +1422,11 @@ pub mod types { pub type ssize_t = i64; } pub mod posix01 { - use libc::types::common::c99::{int32_t, int64_t}; - use libc::types::common::c99::{uint32_t}; - use libc::types::os::arch::c95::{c_char, c_long, time_t}; - use libc::types::os::arch::posix88::{dev_t, gid_t, ino_t}; - use libc::types::os::arch::posix88::{mode_t, off_t, uid_t}; + use types::common::c99::{int32_t, int64_t}; + use types::common::c99::{uint32_t}; + use types::os::arch::c95::{c_char, c_long, time_t}; + use types::os::arch::posix88::{dev_t, gid_t, ino_t}; + use types::os::arch::posix88::{mode_t, off_t, uid_t}; pub type nlink_t = u16; pub type blksize_t = i64; @@ -1479,7 +1490,7 @@ pub mod consts { #[cfg(target_os = "win32")] pub mod os { pub mod c95 { - use libc::types::os::arch::c95::{c_int, c_uint}; + use types::os::arch::c95::{c_int, c_uint}; pub static EXIT_FAILURE : c_int = 1; pub static EXIT_SUCCESS : c_int = 0; @@ -1553,7 +1564,7 @@ pub mod consts { pub mod c99 { } pub mod posix88 { - use libc::types::os::arch::c95::c_int; + use types::os::arch::c95::c_int; pub static O_RDONLY : c_int = 0; pub static O_WRONLY : c_int = 1; @@ -1589,7 +1600,7 @@ pub mod consts { pub mod posix08 { } pub mod bsd44 { - use libc::types::os::arch::c95::c_int; + use types::os::arch::c95::c_int; pub static AF_INET: c_int = 2; pub static AF_INET6: c_int = 23; @@ -1617,8 +1628,8 @@ pub mod consts { pub static SHUT_RDWR: c_int = 2; } pub mod extra { - use libc::types::os::arch::c95::c_int; - use libc::types::os::arch::extra::{WORD, DWORD, BOOL}; + use types::os::arch::c95::c_int; + use types::os::arch::extra::{WORD, DWORD, BOOL}; pub static TRUE : BOOL = 1; pub static FALSE : BOOL = 0; @@ -1846,7 +1857,7 @@ pub mod consts { #[cfg(target_os = "android")] pub mod os { pub mod c95 { - use libc::types::os::arch::c95::{c_int, c_uint}; + use types::os::arch::c95::{c_int, c_uint}; pub static EXIT_FAILURE : c_int = 1; pub static EXIT_SUCCESS : c_int = 0; @@ -1870,8 +1881,8 @@ pub mod consts { #[cfg(target_arch = "x86_64")] #[cfg(target_arch = "arm")] pub mod posix88 { - use libc::types::os::arch::c95::c_int; - use libc::types::common::c95::c_void; + use types::os::arch::c95::c_int; + use types::common::c95::c_void; pub static O_RDONLY : c_int = 0; pub static O_WRONLY : c_int = 1; @@ -2081,8 +2092,8 @@ pub mod consts { #[cfg(target_arch = "mips")] pub mod posix88 { - use libc::types::os::arch::c95::c_int; - use libc::types::common::c95::c_void; + use types::os::arch::c95::c_int; + use types::common::c95::c_void; pub static O_RDONLY : c_int = 0; pub static O_WRONLY : c_int = 1; @@ -2289,7 +2300,7 @@ pub mod consts { pub static EDQUOT: c_int = 1133; } pub mod posix01 { - use libc::types::os::arch::c95::{c_int, size_t}; + use types::os::arch::c95::{c_int, size_t}; pub static SIGTRAP : c_int = 5; @@ -2360,7 +2371,7 @@ pub mod consts { pub mod posix08 { } pub mod bsd44 { - use libc::types::os::arch::c95::c_int; + use types::os::arch::c95::c_int; pub static MADV_NORMAL : c_int = 0; pub static MADV_RANDOM : c_int = 1; @@ -2404,7 +2415,7 @@ pub mod consts { #[cfg(target_arch = "x86_64")] #[cfg(target_arch = "arm")] pub mod extra { - use libc::types::os::arch::c95::c_int; + use types::os::arch::c95::c_int; pub static O_RSYNC : c_int = 1052672; pub static O_DSYNC : c_int = 4096; @@ -2427,7 +2438,7 @@ pub mod consts { } #[cfg(target_arch = "mips")] pub mod extra { - use libc::types::os::arch::c95::c_int; + use types::os::arch::c95::c_int; pub static O_RSYNC : c_int = 16400; pub static O_DSYNC : c_int = 16; @@ -2449,7 +2460,7 @@ pub mod consts { } #[cfg(target_os = "linux")] pub mod sysconf { - use libc::types::os::arch::c95::c_int; + use types::os::arch::c95::c_int; pub static _SC_ARG_MAX : c_int = 0; pub static _SC_CHILD_MAX : c_int = 1; @@ -2510,7 +2521,7 @@ pub mod consts { } #[cfg(target_os = "android")] pub mod sysconf { - use libc::types::os::arch::c95::c_int; + use types::os::arch::c95::c_int; pub static _SC_ARG_MAX : c_int = 0; pub static _SC_BC_BASE_MAX : c_int = 1; @@ -2547,7 +2558,7 @@ pub mod consts { #[cfg(target_os = "freebsd")] pub mod os { pub mod c95 { - use libc::types::os::arch::c95::{c_int, c_uint}; + use types::os::arch::c95::{c_int, c_uint}; pub static EXIT_FAILURE : c_int = 1; pub static EXIT_SUCCESS : c_int = 0; @@ -2568,8 +2579,8 @@ pub mod consts { pub mod c99 { } pub mod posix88 { - use libc::types::common::c95::c_void; - use libc::types::os::arch::c95::c_int; + use types::common::c95::c_void; + use types::os::arch::c95::c_int; pub static O_RDONLY : c_int = 0; pub static O_WRONLY : c_int = 1; @@ -2738,7 +2749,7 @@ pub mod consts { pub static ELAST : c_int = 99; } pub mod posix01 { - use libc::types::os::arch::c95::{c_int, size_t}; + use types::os::arch::c95::{c_int, size_t}; pub static SIGTRAP : c_int = 5; @@ -2806,7 +2817,7 @@ pub mod consts { pub mod posix08 { } pub mod bsd44 { - use libc::types::os::arch::c95::c_int; + use types::os::arch::c95::c_int; pub static MADV_NORMAL : c_int = 0; pub static MADV_RANDOM : c_int = 1; @@ -2855,7 +2866,7 @@ pub mod consts { pub static SHUT_RDWR: c_int = 2; } pub mod extra { - use libc::types::os::arch::c95::c_int; + use types::os::arch::c95::c_int; pub static O_SYNC : c_int = 128; pub static CTL_KERN: c_int = 1; @@ -2871,7 +2882,7 @@ pub mod consts { pub static MAP_NOCORE : c_int = 0x020000; } pub mod sysconf { - use libc::types::os::arch::c95::c_int; + use types::os::arch::c95::c_int; pub static _SC_ARG_MAX : c_int = 1; pub static _SC_CHILD_MAX : c_int = 2; @@ -2931,7 +2942,7 @@ pub mod consts { #[cfg(target_os = "macos")] pub mod os { pub mod c95 { - use libc::types::os::arch::c95::{c_int, c_uint}; + use types::os::arch::c95::{c_int, c_uint}; pub static EXIT_FAILURE : c_int = 1; pub static EXIT_SUCCESS : c_int = 0; @@ -2952,8 +2963,8 @@ pub mod consts { pub mod c99 { } pub mod posix88 { - use libc::types::common::c95::c_void; - use libc::types::os::arch::c95::c_int; + use types::common::c95::c_void; + use types::os::arch::c95::c_int; pub static O_RDONLY : c_int = 0; pub static O_WRONLY : c_int = 1; @@ -3133,7 +3144,7 @@ pub mod consts { pub static ELAST : c_int = 106; } pub mod posix01 { - use libc::types::os::arch::c95::{c_int, size_t}; + use types::os::arch::c95::{c_int, size_t}; pub static SIGTRAP : c_int = 5; @@ -3191,7 +3202,7 @@ pub mod consts { pub mod posix08 { } pub mod bsd44 { - use libc::types::os::arch::c95::c_int; + use types::os::arch::c95::c_int; pub static MADV_NORMAL : c_int = 0; pub static MADV_RANDOM : c_int = 1; @@ -3238,7 +3249,7 @@ pub mod consts { pub static SHUT_RDWR: c_int = 2; } pub mod extra { - use libc::types::os::arch::c95::c_int; + use types::os::arch::c95::c_int; pub static O_DSYNC : c_int = 4194304; pub static O_SYNC : c_int = 128; @@ -3253,7 +3264,7 @@ pub mod consts { pub static MAP_JIT : c_int = 0x0800; } pub mod sysconf { - use libc::types::os::arch::c95::c_int; + use types::os::arch::c95::c_int; pub static _SC_ARG_MAX : c_int = 1; pub static _SC_CHILD_MAX : c_int = 2; @@ -3322,7 +3333,7 @@ pub mod funcs { pub mod c95 { pub mod ctype { - use libc::types::os::arch::c95::{c_char, c_int}; + use types::os::arch::c95::{c_char, c_int}; extern { pub fn isalnum(c: c_int) -> c_int; @@ -3342,8 +3353,8 @@ pub mod funcs { } pub mod stdio { - use libc::types::common::c95::{FILE, c_void, fpos_t}; - use libc::types::os::arch::c95::{c_char, c_int, c_long, size_t}; + use types::common::c95::{FILE, c_void, fpos_t}; + use types::os::arch::c95::{c_char, c_int, c_long, size_t}; extern { pub fn fopen(filename: *c_char, mode: *c_char) -> *FILE; @@ -3397,10 +3408,10 @@ pub mod funcs { } pub mod stdlib { - use libc::types::common::c95::c_void; - use libc::types::os::arch::c95::{c_char, c_double, c_int}; - use libc::types::os::arch::c95::{c_long, c_uint, c_ulong}; - use libc::types::os::arch::c95::{size_t}; + use types::common::c95::c_void; + use types::os::arch::c95::{c_char, c_double, c_int}; + use types::os::arch::c95::{c_long, c_uint, c_ulong}; + use types::os::arch::c95::{size_t}; extern { pub fn abs(i: c_int) -> c_int; @@ -3429,9 +3440,9 @@ pub mod funcs { } pub mod string { - use libc::types::common::c95::c_void; - use libc::types::os::arch::c95::{c_char, c_int, size_t}; - use libc::types::os::arch::c95::{wchar_t}; + use types::common::c95::c_void; + use types::os::arch::c95::{c_char, c_int, size_t}; + use types::os::arch::c95::{wchar_t}; extern { pub fn strcpy(dst: *c_char, src: *c_char) -> *c_char; @@ -3473,8 +3484,8 @@ pub mod funcs { #[cfg(target_os = "win32")] pub mod posix88 { pub mod stat_ { - use libc::types::os::common::posix01::{stat, utimbuf}; - use libc::types::os::arch::c95::{c_int, c_char, wchar_t}; + use types::os::common::posix01::{stat, utimbuf}; + use types::os::arch::c95::{c_int, c_char, wchar_t}; extern { #[link_name = "_chmod"] @@ -3497,8 +3508,8 @@ pub mod funcs { } pub mod stdio { - use libc::types::common::c95::FILE; - use libc::types::os::arch::c95::{c_int, c_char}; + use types::common::c95::FILE; + use types::os::arch::c95::{c_int, c_char}; extern { #[link_name = "_popen"] @@ -3513,7 +3524,7 @@ pub mod funcs { } pub mod fcntl { - use libc::types::os::arch::c95::{c_int, c_char, wchar_t}; + use types::os::arch::c95::{c_int, c_char, wchar_t}; extern { #[link_name = "_open"] pub fn open(path: *c_char, oflag: c_int, mode: c_int) @@ -3531,10 +3542,10 @@ pub mod funcs { } pub mod unistd { - use libc::types::common::c95::c_void; - use libc::types::os::arch::c95::{c_int, c_uint, c_char, + use types::common::c95::c_void; + use types::os::arch::c95::{c_int, c_uint, c_char, c_long, size_t}; - use libc::types::os::arch::c99::intptr_t; + use types::os::arch::c99::intptr_t; extern { #[link_name = "_access"] @@ -3592,9 +3603,9 @@ pub mod funcs { #[cfg(target_os = "freebsd")] pub mod posix88 { pub mod stat_ { - use libc::types::os::arch::c95::{c_char, c_int}; - use libc::types::os::arch::posix01::stat; - use libc::types::os::arch::posix88::mode_t; + use types::os::arch::c95::{c_char, c_int}; + use types::os::arch::posix01::stat; + use types::os::arch::posix88::mode_t; extern { pub fn chmod(path: *c_char, mode: mode_t) -> c_int; @@ -3624,8 +3635,8 @@ pub mod funcs { } pub mod stdio { - use libc::types::common::c95::FILE; - use libc::types::os::arch::c95::{c_char, c_int}; + use types::common::c95::FILE; + use types::os::arch::c95::{c_char, c_int}; extern { pub fn popen(command: *c_char, mode: *c_char) -> *FILE; @@ -3636,8 +3647,8 @@ pub mod funcs { } pub mod fcntl { - use libc::types::os::arch::c95::{c_char, c_int}; - use libc::types::os::arch::posix88::mode_t; + use types::os::arch::c95::{c_char, c_int}; + use types::os::arch::posix88::mode_t; extern { pub fn open(path: *c_char, oflag: c_int, mode: c_int) @@ -3648,8 +3659,8 @@ pub mod funcs { } pub mod dirent { - use libc::types::common::posix88::{DIR, dirent_t}; - use libc::types::os::arch::c95::{c_char, c_int, c_long}; + use types::common::posix88::{DIR, dirent_t}; + use types::os::arch::c95::{c_char, c_int, c_long}; // NB: On OS X opendir and readdir have two versions, // one for 32-bit kernelspace and one for 64. @@ -3681,13 +3692,13 @@ pub mod funcs { } pub mod unistd { - use libc::types::common::c95::c_void; - use libc::types::os::arch::c95::{c_char, c_int, c_long, c_uint}; - use libc::types::os::arch::c95::{size_t}; - use libc::types::os::common::posix01::timespec; - use libc::types::os::arch::posix01::utimbuf; - use libc::types::os::arch::posix88::{gid_t, off_t, pid_t}; - use libc::types::os::arch::posix88::{ssize_t, uid_t}; + use types::common::c95::c_void; + use types::os::arch::c95::{c_char, c_int, c_long, c_uint}; + use types::os::arch::c95::{size_t}; + use types::os::common::posix01::timespec; + use types::os::arch::posix01::utimbuf; + use types::os::arch::posix88::{gid_t, off_t, pid_t}; + use types::os::arch::posix88::{ssize_t, uid_t}; pub static _PC_NAME_MAX: c_int = 4; @@ -3750,8 +3761,8 @@ pub mod funcs { } pub mod signal { - use libc::types::os::arch::c95::{c_int}; - use libc::types::os::arch::posix88::{pid_t}; + use types::os::arch::c95::{c_int}; + use types::os::arch::posix88::{pid_t}; extern { pub fn kill(pid: pid_t, sig: c_int) -> c_int; @@ -3759,9 +3770,9 @@ pub mod funcs { } pub mod mman { - use libc::types::common::c95::{c_void}; - use libc::types::os::arch::c95::{size_t, c_int, c_char}; - use libc::types::os::arch::posix88::{mode_t, off_t}; + use types::common::c95::{c_void}; + use types::os::arch::c95::{size_t, c_int, c_char}; + use types::os::arch::posix88::{mode_t, off_t}; extern { pub fn mlock(addr: *c_void, len: size_t) -> c_int; @@ -3796,8 +3807,8 @@ pub mod funcs { #[cfg(target_os = "freebsd")] pub mod posix01 { pub mod stat_ { - use libc::types::os::arch::c95::{c_char, c_int}; - use libc::types::os::arch::posix01::stat; + use types::os::arch::c95::{c_char, c_int}; + use types::os::arch::posix01::stat; extern { #[cfg(target_os = "linux")] @@ -3812,8 +3823,8 @@ pub mod funcs { } pub mod unistd { - use libc::types::os::arch::c95::{c_char, c_int, size_t}; - use libc::types::os::arch::posix88::{ssize_t, off_t}; + use types::os::arch::c95::{c_char, c_int, size_t}; + use types::os::arch::posix88::{ssize_t, off_t}; extern { pub fn readlink(path: *c_char, @@ -3839,8 +3850,8 @@ pub mod funcs { } pub mod wait { - use libc::types::os::arch::c95::{c_int}; - use libc::types::os::arch::posix88::{pid_t}; + use types::os::arch::c95::{c_int}; + use types::os::arch::posix88::{pid_t}; extern { pub fn waitpid(pid: pid_t, status: *mut c_int, options: c_int) @@ -3849,22 +3860,22 @@ pub mod funcs { } pub mod glob { - use libc::types::os::arch::c95::{c_char, c_int}; - use libc::types::os::common::posix01::{glob_t}; - use option::Option; + use types::os::arch::c95::{c_char, c_int}; + use types::os::common::posix01::{glob_t}; + use Nullable; extern { pub fn glob(pattern: *c_char, flags: c_int, - errfunc: Option int>, + errfunc: Nullable int>, pglob: *mut glob_t); pub fn globfree(pglob: *mut glob_t); } } pub mod mman { - use libc::types::common::c95::{c_void}; - use libc::types::os::arch::c95::{c_int, size_t}; + use types::common::c95::{c_void}; + use types::os::arch::c95::{c_int, size_t}; extern { pub fn posix_madvise(addr: *c_void, @@ -3903,10 +3914,10 @@ pub mod funcs { #[cfg(not(windows))] pub mod bsd43 { - use libc::types::common::c95::{c_void}; - use libc::types::os::common::bsd44::{socklen_t, sockaddr}; - use libc::types::os::arch::c95::{c_int, size_t}; - use libc::types::os::arch::posix88::ssize_t; + use types::common::c95::{c_void}; + use types::os::common::bsd44::{socklen_t, sockaddr}; + use types::os::arch::c95::{c_int, size_t}; + use types::os::arch::posix88::ssize_t; extern "system" { pub fn socket(domain: c_int, ty: c_int, protocol: c_int) -> c_int; @@ -3939,10 +3950,10 @@ pub mod funcs { #[cfg(windows)] pub mod bsd43 { - use libc::types::common::c95::{c_void}; - use libc::types::os::common::bsd44::{socklen_t, sockaddr, SOCKET}; - use libc::types::os::arch::c95::c_int; - use libc::types::os::arch::posix88::ssize_t; + use types::common::c95::{c_void}; + use types::os::common::bsd44::{socklen_t, sockaddr, SOCKET}; + use types::os::arch::c95::c_int; + use types::os::arch::posix88::ssize_t; extern "system" { pub fn socket(domain: c_int, ty: c_int, protocol: c_int) -> SOCKET; @@ -3977,8 +3988,8 @@ pub mod funcs { #[cfg(target_os = "macos")] #[cfg(target_os = "freebsd")] pub mod bsd44 { - use libc::types::common::c95::{c_void}; - use libc::types::os::arch::c95::{c_char, c_uchar, c_int, c_uint, size_t}; + use types::common::c95::{c_void}; + use types::os::arch::c95::{c_char, c_uchar, c_int, c_uint, size_t}; extern { pub fn sysctl(name: *c_int, @@ -4010,8 +4021,8 @@ pub mod funcs { #[cfg(target_os = "linux")] #[cfg(target_os = "android")] pub mod bsd44 { - use libc::types::common::c95::{c_void}; - use libc::types::os::arch::c95::{c_uchar, c_int, size_t}; + use types::common::c95::{c_void}; + use types::os::arch::c95::{c_uchar, c_int, size_t}; extern { pub fn getdtablesize() -> c_int; @@ -4029,7 +4040,7 @@ pub mod funcs { #[cfg(target_os = "macos")] pub mod extra { - use libc::types::os::arch::c95::{c_char, c_int}; + use types::os::arch::c95::{c_char, c_int}; extern { pub fn _NSGetExecutablePath(buf: *mut c_char, bufsize: *mut u32) @@ -4051,8 +4062,8 @@ pub mod funcs { pub mod extra { pub mod kernel32 { - use libc::types::os::arch::c95::{c_uint}; - use libc::types::os::arch::extra::{BOOL, DWORD, SIZE_T, HMODULE, + use types::os::arch::c95::{c_uint}; + use types::os::arch::extra::{BOOL, DWORD, SIZE_T, HMODULE, LPCWSTR, LPWSTR, LPCSTR, LPSTR, LPCH, LPDWORD, LPVOID, LPCVOID, LPOVERLAPPED, @@ -4248,8 +4259,8 @@ pub mod funcs { } pub mod msvcrt { - use libc::types::os::arch::c95::{c_int, c_long}; - use libc::types::os::arch::c99::intptr_t; + use types::os::arch::c95::{c_int, c_long}; + use types::os::arch::c99::intptr_t; extern { #[link_name = "_commit"] diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs index 9e13d70b0ce18..25b687602b003 100644 --- a/src/libstd/lib.rs +++ b/src/libstd/lib.rs @@ -70,6 +70,9 @@ // Make and rand accessible for benchmarking/testcases #[cfg(test)] extern crate rand; +// we wrap some libc stuff +extern crate libc; + // Make std testable by not duplicating lang items. See #2912 #[cfg(test)] extern crate realstd = "std"; #[cfg(test)] pub use kinds = realstd::kinds; @@ -173,8 +176,6 @@ pub mod sync; /* Runtime and platform support */ -#[unstable] -pub mod libc; pub mod c_str; pub mod c_vec; pub mod os; From 301dd7ab6ae04623081fbac890821cc6b83e1fa7 Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Wed, 26 Feb 2014 12:58:41 -0500 Subject: [PATCH 02/10] fix fallout from std::libc separation --- mk/crates.mk | 4 +- src/doc/guide-ffi.md | 98 ++++++++++++++++++- src/doc/index.md | 1 + src/doc/rust.md | 4 +- src/etc/zsh/_rust | 2 +- src/libflate/lib.rs | 9 +- src/libgreen/lib.rs | 1 + src/libgreen/macros.rs | 2 +- src/libgreen/sched.rs | 2 +- src/libgreen/stack.rs | 2 +- src/liblibc/lib.rs | 55 ++++++----- src/libnative/io/addrinfo.rs | 4 +- src/libnative/io/file_unix.rs | 10 +- src/libnative/io/file_win32.rs | 4 +- src/libnative/io/mod.rs | 4 +- src/libnative/io/net.rs | 2 +- src/libnative/io/pipe_unix.rs | 2 +- src/libnative/io/pipe_win32.rs | 2 +- src/libnative/io/process.rs | 26 ++--- src/libnative/io/timer_helper.rs | 6 +- src/libnative/io/timer_other.rs | 6 +- src/libnative/io/timer_timerfd.rs | 4 +- src/libnative/io/timer_win32.rs | 4 +- src/libnative/lib.rs | 2 + src/librustc/back/archive.rs | 2 +- src/librustc/back/link.rs | 2 +- src/librustc/back/lto.rs | 2 +- src/librustc/lib.rs | 2 + src/librustc/lib/llvm.rs | 4 +- src/librustc/middle/astencode.rs | 2 +- src/librustc/middle/lint.rs | 2 +- src/librustc/middle/trans/adt.rs | 2 +- src/librustc/middle/trans/base.rs | 2 +- src/librustc/middle/trans/build.rs | 2 +- src/librustc/middle/trans/builder.rs | 4 +- src/librustc/middle/trans/cabi_mips.rs | 2 +- src/librustc/middle/trans/common.rs | 3 +- src/librustc/middle/trans/consts.rs | 2 +- src/librustc/middle/trans/context.rs | 3 +- src/librustc/middle/trans/debuginfo.rs | 2 +- src/librustc/middle/trans/foreign.rs | 3 +- src/librustc/middle/trans/glue.rs | 2 +- src/librustc/middle/trans/reflect.rs | 3 +- src/librustc/middle/trans/type_.rs | 2 +- src/librustc/middle/trans/value.rs | 2 +- src/librustdoc/html/markdown.rs | 4 +- src/librustuv/addrinfo.rs | 4 +- src/librustuv/async.rs | 2 +- src/librustuv/file.rs | 12 +-- src/librustuv/idle.rs | 2 +- src/librustuv/lib.rs | 3 +- src/librustuv/macros.rs | 2 +- src/librustuv/net.rs | 4 +- src/librustuv/pipe.rs | 2 +- src/librustuv/process.rs | 4 +- src/librustuv/queue.rs | 2 +- src/librustuv/signal.rs | 2 +- src/librustuv/stream.rs | 2 +- src/librustuv/timer.rs | 2 +- src/librustuv/tty.rs | 2 +- src/librustuv/uvio.rs | 6 +- src/librustuv/uvll.rs | 14 +-- src/libstd/c_str.rs | 43 ++++---- src/libstd/io/pipe.rs | 9 +- src/libsyntax/diagnostic.rs | 2 + src/libtime/lib.rs | 8 +- .../anon-extern-mod-cross-crate-1.rs | 2 +- .../auxiliary/extern-crosscrate-source.rs | 4 +- src/test/auxiliary/foreign_lib.rs | 2 +- src/test/auxiliary/issue-3012-1.rs | 2 +- src/test/auxiliary/issue_5844_aux.rs | 2 +- .../compile-fail/attrs-after-extern-mod.rs | 2 +- src/test/compile-fail/lint-ctypes.rs | 2 +- src/test/compile-fail/lint-dead-code-3.rs | 4 +- src/test/compile-fail/non-copyable-void.rs | 2 +- .../static-mut-foreign-requires-unsafe.rs | 2 +- src/test/compile-fail/unsupported-cast.rs | 2 +- src/test/run-fail/extern-fail.rs | 4 +- src/test/run-fail/morestack2.rs | 4 +- src/test/run-pass/anon-extern-mod.rs | 2 +- src/test/run-pass/c-stack-as-value.rs | 2 +- src/test/run-pass/c-stack-returning-int64.rs | 10 +- src/test/run-pass/const-cast.rs | 2 +- src/test/run-pass/core-run-destroy.rs | 5 +- src/test/run-pass/extern-call-deep.rs | 4 +- src/test/run-pass/extern-call-deep2.rs | 4 +- src/test/run-pass/extern-call-indirect.rs | 4 +- src/test/run-pass/extern-call-scrub.rs | 4 +- src/test/run-pass/extern-stress.rs | 4 +- src/test/run-pass/extern-yield.rs | 4 +- src/test/run-pass/foreign-call-no-runtime.rs | 3 +- src/test/run-pass/foreign-dupe.rs | 4 +- src/test/run-pass/foreign-fn-linkname.rs | 7 +- src/test/run-pass/foreign-mod-unused-const.rs | 4 +- src/test/run-pass/foreign-no-abi.rs | 2 +- src/test/run-pass/foreign2.rs | 6 +- src/test/run-pass/issue-1251.rs | 2 +- src/test/run-pass/issue-2214.rs | 6 +- src/test/run-pass/issue-3012-2.rs | 2 +- src/test/run-pass/issue-3656.rs | 3 +- src/test/run-pass/issue-4735.rs | 3 +- src/test/run-pass/issue-5791.rs | 2 +- src/test/run-pass/item-attributes.rs | 2 +- src/test/run-pass/lint-cstack.rs | 2 +- src/test/run-pass/morestack6.rs | 2 +- src/test/run-pass/newtype-struct-with-dtor.rs | 4 +- src/test/run-pass/osx-frameworks.rs | 2 +- src/test/run-pass/process-detach.rs | 2 +- src/test/run-pass/regions-mock-tcx.rs | 2 +- src/test/run-pass/regions-mock-trans.rs | 2 +- src/test/run-pass/rename-directory.rs | 3 +- src/test/run-pass/static-mut-foreign.rs | 2 +- src/test/run-pass/supported-cast.rs | 2 +- src/test/run-pass/variadic-ffi.rs | 3 +- 114 files changed, 364 insertions(+), 224 deletions(-) diff --git a/mk/crates.mk b/mk/crates.mk index 89ea98e801419..28330010dc2ac 100644 --- a/mk/crates.mk +++ b/mk/crates.mk @@ -49,14 +49,14 @@ # automatically generated for all stage/host/target combinations. ################################################################################ -TARGET_CRATES := std green rustuv native flate arena glob term semver \ +TARGET_CRATES := libc std green rustuv native flate arena glob term semver \ uuid serialize sync getopts collections num test time rand \ workcache url log HOST_CRATES := syntax rustc rustdoc fourcc hexfloat CRATES := $(TARGET_CRATES) $(HOST_CRATES) TOOLS := compiletest rustdoc rustc -DEPS_std := native:rustrt native:compiler-rt native:backtrace +DEPS_std := libc native:rustrt native:compiler-rt native:backtrace DEPS_green := std rand native:context_switch DEPS_rustuv := std native:uv native:uv_support DEPS_native := std diff --git a/src/doc/guide-ffi.md b/src/doc/guide-ffi.md index ee7c4064dd4d4..9355a4cf25830 100644 --- a/src/doc/guide-ffi.md +++ b/src/doc/guide-ffi.md @@ -12,7 +12,8 @@ The following is a minimal example of calling a foreign function which will compile if snappy is installed: ~~~~ {.ignore} -use std::libc::size_t; +extern crate libc; +use libc::size_t; #[link(name = "snappy")] extern { @@ -44,7 +45,8 @@ keeping the binding correct at runtime. The `extern` block can be extended to cover the entire snappy API: ~~~~ {.ignore} -use std::libc::{c_int, size_t}; +extern crate libc; +use libc::{c_int, size_t}; #[link(name = "snappy")] extern { @@ -170,6 +172,88 @@ Foreign libraries often hand off ownership of resources to the calling code. When this occurs, we must use Rust's destructors to provide safety and guarantee the release of these resources (especially in the case of failure). +As an example, we give a reimplementation of owned boxes by wrapping `malloc` +and `free`: + +~~~~ +extern crate libc; + +use std::cast; +use libc::{c_void, size_t, malloc, free}; +use std::mem; +use std::ptr; + +// Define a wrapper around the handle returned by the foreign code. +// Unique has the same semantics as ~T +pub struct Unique { + // It contains a single raw, mutable pointer to the object in question. + priv ptr: *mut T +} + +// Implement methods for creating and using the values in the box. +// NB: For simplicity and correctness, we require that T has kind Send +// (owned boxes relax this restriction, and can contain managed (GC) boxes). +// This is because, as implemented, the garbage collector would not know +// about any shared boxes stored in the malloc'd region of memory. +impl Unique { + pub fn new(value: T) -> Unique { + unsafe { + let ptr = malloc(std::mem::size_of::() as size_t) as *mut T; + assert!(!ptr.is_null()); + // `*ptr` is uninitialized, and `*ptr = value` would attempt to destroy it + // move_val_init moves a value into this memory without + // attempting to drop the original value. + mem::move_val_init(&mut *ptr, value); + Unique{ptr: ptr} + } + } + + // the 'r lifetime results in the same semantics as `&*x` with ~T + pub fn borrow<'r>(&'r self) -> &'r T { + unsafe { cast::copy_lifetime(self, &*self.ptr) } + } + + // the 'r lifetime results in the same semantics as `&mut *x` with ~T + pub fn borrow_mut<'r>(&'r mut self) -> &'r mut T { + unsafe { cast::copy_mut_lifetime(self, &mut *self.ptr) } + } +} + +// The key ingredient for safety, we associate a destructor with +// Unique, making the struct manage the raw pointer: when the +// struct goes out of scope, it will automatically free the raw pointer. +// NB: This is an unsafe destructor, because rustc will not normally +// allow destructors to be associated with parametrized types, due to +// bad interaction with managed boxes. (With the Send restriction, +// we don't have this problem.) +#[unsafe_destructor] +impl Drop for Unique { + fn drop(&mut self) { + unsafe { + let x = mem::uninit(); // dummy value to swap in + // We need to move the object out of the box, so that + // the destructor is called (at the end of this scope.) + ptr::replace(self.ptr, x); + free(self.ptr as *mut c_void) + } + } +} + +// A comparison between the built-in ~ and this reimplementation +fn main() { + { + let mut x = ~5; + *x = 10; + } // `x` is freed here + + { + let mut y = Unique::new(5); + *y.borrow_mut() = 10; + } // `y` is freed here +} +~~~~ + +>>>>>>> 854a01b... fix fallout from std::libc separation # Callbacks from C code to Rust functions Some external libraries require the usage of callbacks to report back their @@ -402,7 +486,7 @@ global state. In order to access these variables, you declare them in `extern` blocks with the `static` keyword: ~~~{.ignore} -use std::libc; +extern crate libc; #[link(name = "readline")] extern { @@ -420,7 +504,7 @@ interface. To do this, statics can be declared with `mut` so rust can mutate them. ~~~{.ignore} -use std::libc; +extern crate libc; use std::ptr; #[link(name = "readline")] @@ -444,11 +528,15 @@ calling foreign functions. Some foreign functions, most notably the Windows API, conventions. Rust provides a way to tell the compiler which convention to use: ~~~~ +extern crate libc; + #[cfg(target_os = "win32", target_arch = "x86")] #[link(name = "kernel32")] extern "stdcall" { - fn SetEnvironmentVariableA(n: *u8, v: *u8) -> std::libc::c_int; + fn SetEnvironmentVariableA(n: *u8, v: *u8) -> libc::c_int; } + +# fn main() { } ~~~~ This applies to the entire `extern` block. The list of supported ABI constraints diff --git a/src/doc/index.md b/src/doc/index.md index 5bcfd8e830533..efc1847e2c5e7 100644 --- a/src/doc/index.md +++ b/src/doc/index.md @@ -36,6 +36,7 @@ li {list-style-type: none; } * [The `glob` file path matching library](glob/index.html) * [The `green` M:N runtime library](green/index.html) * [The `hexfloat` library for hexadecimal floating-point literals](hexfloat/index.html) +* [The `libc` bindings](libc/index.html) * [The `native` 1:1 threading runtime](native/index.html) * [The `num` arbitrary precision numerics library](num/index.html) * [The `rand` library for random numbers and distributions](rand/index.html) diff --git a/src/doc/rust.md b/src/doc/rust.md index ef66fc7abe2e1..0dbe3045e7e90 100644 --- a/src/doc/rust.md +++ b/src/doc/rust.md @@ -1471,11 +1471,13 @@ with the exception that they may not have a body and are instead terminated by a semicolon. ~~~~ -# use std::libc::{c_char, FILE}; +extern crate libc; +use libc::{c_char, FILE}; extern { fn fopen(filename: *c_char, mode: *c_char) -> *FILE; } +# fn main() {} ~~~~ Functions within external blocks may be called by Rust code, diff --git a/src/etc/zsh/_rust b/src/etc/zsh/_rust index f1f9e88f7c926..44e2ecc4d3842 100644 --- a/src/etc/zsh/_rust +++ b/src/etc/zsh/_rust @@ -40,7 +40,7 @@ _rustc_opts_switches=( ) _rustc_opts_lint=( 'attribute-usage[detects bad use of attributes]' - 'ctypes[proper use of std::libc types in foreign modules]' + 'ctypes[proper use of libc types in foreign modules]' 'dead-assignment[detect assignments that will never be read]' 'dead-code[detect piece of code that will never be used]' 'default-type-param-usage[prevents explicitly setting a type parameter with a default]' diff --git a/src/libflate/lib.rs b/src/libflate/lib.rs index ca9475a0b233b..f1a4ffab0c3d9 100644 --- a/src/libflate/lib.rs +++ b/src/libflate/lib.rs @@ -26,13 +26,14 @@ Simple compression #[cfg(test)] #[phase(syntax, link)] extern crate log; -use std::libc::{c_void, size_t, c_int}; -use std::libc; +extern crate libc; + use std::c_vec::CVec; +use libc::{c_void, size_t, c_int}; -pub mod rustrt { - use std::libc::{c_int, c_void, size_t}; +pub mod rustrt { + use libc::{c_void, size_t, c_int}; #[link(name = "miniz", kind = "static")] extern { pub fn tdefl_compress_mem_to_heap(psrc_buf: *c_void, diff --git a/src/libgreen/lib.rs b/src/libgreen/lib.rs index 12f2839f32121..44c27f36fd15e 100644 --- a/src/libgreen/lib.rs +++ b/src/libgreen/lib.rs @@ -199,6 +199,7 @@ #[cfg(test)] #[phase(syntax, link)] extern crate log; #[cfg(test)] extern crate rustuv; extern crate rand; +extern crate libc; use std::mem::replace; use std::os; diff --git a/src/libgreen/macros.rs b/src/libgreen/macros.rs index ab106138ae108..9afa54cc26bb5 100644 --- a/src/libgreen/macros.rs +++ b/src/libgreen/macros.rs @@ -52,7 +52,7 @@ macro_rules! rtabort ( pub fn dumb_println(args: &fmt::Arguments) { use std::io; - use std::libc; + use libc; struct Stderr; impl io::Writer for Stderr { diff --git a/src/libgreen/sched.rs b/src/libgreen/sched.rs index 4308c05716c29..6ae6828d23add 100644 --- a/src/libgreen/sched.rs +++ b/src/libgreen/sched.rs @@ -970,7 +970,7 @@ fn new_sched_rng() -> XorShiftRng { } #[cfg(unix)] fn new_sched_rng() -> XorShiftRng { - use std::libc; + use libc; use std::mem; use rand::SeedableRng; diff --git a/src/libgreen/stack.rs b/src/libgreen/stack.rs index 053d73c010e39..8dfc4f45664b0 100644 --- a/src/libgreen/stack.rs +++ b/src/libgreen/stack.rs @@ -11,7 +11,7 @@ use std::rt::env::max_cached_stacks; use std::os::{errno, page_size, MemoryMap, MapReadable, MapWritable, MapNonStandardFlags, MapVirtual}; -use std::libc; +use libc; /// A task's stack. The name "Stack" is a vestige of segmented stacks. pub struct Stack { diff --git a/src/liblibc/lib.rs b/src/liblibc/lib.rs index ec147ac5228f4..1dd4598bc8786 100644 --- a/src/liblibc/lib.rs +++ b/src/liblibc/lib.rs @@ -11,23 +11,29 @@ #[feature(globs)]; #[crate_id = "libc#0.10-pre"]; #[experimental]; +#[no_std]; // we don't need std, and we can't have std, since it doesn't exist + // yet. std depends on us. +#[crate_type = "rlib"]; +#[crate_type = "dylib"]; /*! * Bindings for the C standard library and other platform libraries * -* This module contains bindings to the C standard library, -* organized into modules by their defining standard. -* Additionally, it contains some assorted platform-specific definitions. -* For convenience, most functions and types are reexported from `libc`, -* so `pub use std::*` will import the available -* C bindings as appropriate for the target platform. The exact -* set of functions available are platform specific. +* **NOTE:** These are *architecture and libc* specific. On Linux, these +* bindings are only correct for glibc. * -* *Note* Because these definitions are platform-specific, some may not appear in -* the generated documentation. +* This module contains bindings to the C standard library, organized into +* modules by their defining standard. Additionally, it contains some assorted +* platform-specific definitions. For convenience, most functions and types +* are reexported, so `use libc::*` will import the available C bindings as +* appropriate for the target platform. The exact set of functions available +* are platform specific. * -* We consider the following specs reasonably normative with respect -* to interoperating with the C standard library (libc/msvcrt): +* *Note:* Because these definitions are platform-specific, some may not appear +* in the generated documentation. +* +* 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'). @@ -35,10 +41,10 @@ * * ISO 9945:2001 / IEEE 1003.1-2001 ('POSIX:2001', 'SUSv3'). * * ISO 9945:2008 / IEEE 1003.1-2008 ('POSIX:2008', 'SUSv4'). * -* Note that any reference to the 1996 revision of POSIX, or any revs -* between 1990 (when '88 was approved at ISO) and 2001 (when the next -* actual revision-revision happened), are merely additions of other -* chapters (1b and 1c) outside the core interfaces. +* Note that any reference to the 1996 revision of POSIX, or any revs between +* 1990 (when '88 was approved at ISO) and 2001 (when the next actual +* revision-revision happened), are merely additions of other chapters (1b and +* 1c) outside the core interfaces. * * Despite having several names each, these are *reasonably* coherent * point-in-time, list-of-definition sorts of specs. You can get each under a @@ -55,15 +61,13 @@ * 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. +* '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. +* 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)]; @@ -71,6 +75,12 @@ #[allow(missing_doc)]; #[allow(uppercase_variables)]; +#[cfg(test)] extern crate std; +#[cfg(test)] extern crate extra; +// for lang="start" +#[cfg(test)] extern crate green; +#[cfg(test)] extern crate rustuv; + // Initial glob-exports mean that all the contents of all the modules // wind up exported, if you're interested in writing platform-specific code. @@ -3862,12 +3872,11 @@ pub mod funcs { pub mod glob { use types::os::arch::c95::{c_char, c_int}; use types::os::common::posix01::{glob_t}; - use Nullable; extern { pub fn glob(pattern: *c_char, flags: c_int, - errfunc: Nullable int>, + errfunc: ::Nullable int>, pglob: *mut glob_t); pub fn globfree(pglob: *mut glob_t); } diff --git a/src/libnative/io/addrinfo.rs b/src/libnative/io/addrinfo.rs index ff617e5a230ed..293e38caff547 100644 --- a/src/libnative/io/addrinfo.rs +++ b/src/libnative/io/addrinfo.rs @@ -12,8 +12,8 @@ use ai = std::io::net::addrinfo; use std::c_str::CString; use std::cast; use std::io::IoError; -use std::libc; -use std::libc::{c_char, c_int}; +use libc; +use libc::{c_char, c_int}; use std::ptr::{null, mut_null}; use super::net::sockaddr_to_addr; diff --git a/src/libnative/io/file_unix.rs b/src/libnative/io/file_unix.rs index 2e33110b7003a..96174e3a858aa 100644 --- a/src/libnative/io/file_unix.rs +++ b/src/libnative/io/file_unix.rs @@ -14,8 +14,8 @@ use std::sync::arc::UnsafeArc; use std::c_str::CString; use std::io::IoError; use std::io; -use std::libc::{c_int, c_void}; -use std::libc; +use libc::{c_int, c_void}; +use libc; use std::mem; use std::rt::rtio; use std::slice; @@ -341,8 +341,8 @@ pub fn mkdir(p: &CString, mode: io::FilePermission) -> IoResult<()> { } pub fn readdir(p: &CString) -> IoResult<~[Path]> { - use std::libc::{dirent_t}; - use std::libc::{opendir, readdir_r, closedir}; + use libc::{dirent_t}; + use libc::{opendir, readdir_r, closedir}; fn prune(root: &CString, dirs: ~[Path]) -> ~[Path] { let root = unsafe { CString::new(root.with_ref(|p| p), false) }; @@ -520,7 +520,7 @@ pub fn utime(p: &CString, atime: u64, mtime: u64) -> IoResult<()> { mod tests { use super::{CFile, FileDesc}; use std::io; - use std::libc; + use libc; use std::os; use std::rt::rtio::RtioFileStream; diff --git a/src/libnative/io/file_win32.rs b/src/libnative/io/file_win32.rs index d9d7fbbce9cac..5af7c944e3e3b 100644 --- a/src/libnative/io/file_win32.rs +++ b/src/libnative/io/file_win32.rs @@ -14,8 +14,8 @@ use std::c_str::CString; use std::cast; use std::io::IoError; use std::io; -use std::libc::{c_int, c_void}; -use std::libc; +use libc::{c_int, c_void}; +use libc; use std::mem; use std::os::win32::{as_utf16_p, fill_utf16_buf_and_decode}; use std::ptr; diff --git a/src/libnative/io/mod.rs b/src/libnative/io/mod.rs index 3536ec7dec6f2..f6a8cefdc1008 100644 --- a/src/libnative/io/mod.rs +++ b/src/libnative/io/mod.rs @@ -27,8 +27,8 @@ use std::io::IoError; use std::io::net::ip::SocketAddr; use std::io::process::ProcessConfig; use std::io::signal::Signum; -use std::libc::c_int; -use std::libc; +use libc::c_int; +use libc; use std::os; use std::rt::rtio; use std::rt::rtio::{RtioTcpStream, RtioTcpListener, RtioUdpSocket, diff --git a/src/libnative/io/net.rs b/src/libnative/io/net.rs index 6f6ddeec86bff..09c44d162d651 100644 --- a/src/libnative/io/net.rs +++ b/src/libnative/io/net.rs @@ -11,7 +11,7 @@ use std::cast; use std::io::net::ip; use std::io; -use std::libc; +use libc; use std::mem; use std::rt::rtio; use std::sync::arc::UnsafeArc; diff --git a/src/libnative/io/pipe_unix.rs b/src/libnative/io/pipe_unix.rs index e25571d02c92d..2a4cb8cabe17c 100644 --- a/src/libnative/io/pipe_unix.rs +++ b/src/libnative/io/pipe_unix.rs @@ -11,7 +11,7 @@ use std::c_str::CString; use std::cast; use std::io; -use std::libc; +use libc; use std::mem; use std::rt::rtio; use std::sync::arc::UnsafeArc; diff --git a/src/libnative/io/pipe_win32.rs b/src/libnative/io/pipe_win32.rs index d629e5867c983..2f51fab9167c1 100644 --- a/src/libnative/io/pipe_win32.rs +++ b/src/libnative/io/pipe_win32.rs @@ -85,7 +85,7 @@ //! me! use std::c_str::CString; -use std::libc; +use libc; use std::os::win32::as_utf16_p; use std::ptr; use std::rt::rtio; diff --git a/src/libnative/io/process.rs b/src/libnative/io/process.rs index 28f0817670b8f..fc016e6880335 100644 --- a/src/libnative/io/process.rs +++ b/src/libnative/io/process.rs @@ -9,8 +9,8 @@ // except according to those terms. use std::io; -use std::libc::{pid_t, c_void, c_int}; -use std::libc; +use libc::{pid_t, c_void, c_int}; +use libc; use std::os; use std::ptr; use std::rt::rtio; @@ -211,20 +211,20 @@ fn spawn_process_os(config: p::ProcessConfig, dir: Option<&Path>, in_fd: c_int, out_fd: c_int, err_fd: c_int) -> IoResult { - use std::libc::types::os::arch::extra::{DWORD, HANDLE, STARTUPINFO}; - use std::libc::consts::os::extra::{ + use libc::types::os::arch::extra::{DWORD, HANDLE, STARTUPINFO}; + use libc::consts::os::extra::{ TRUE, FALSE, STARTF_USESTDHANDLES, INVALID_HANDLE_VALUE, DUPLICATE_SAME_ACCESS }; - use std::libc::funcs::extra::kernel32::{ + use libc::funcs::extra::kernel32::{ GetCurrentProcess, DuplicateHandle, CloseHandle, CreateProcessA }; - use std::libc::funcs::extra::msvcrt::get_osfhandle; + use libc::funcs::extra::msvcrt::get_osfhandle; use std::mem; @@ -410,9 +410,9 @@ fn spawn_process_os(config: p::ProcessConfig, dir: Option<&Path>, in_fd: c_int, out_fd: c_int, err_fd: c_int) -> IoResult { - use std::libc::funcs::posix88::unistd::{fork, dup2, close, chdir, execvp}; - use std::libc::funcs::bsd44::getdtablesize; - use std::libc::c_ulong; + use libc::funcs::posix88::unistd::{fork, dup2, close, chdir, execvp}; + use libc::funcs::bsd44::getdtablesize; + use libc::c_ulong; mod rustrt { extern { @@ -677,8 +677,8 @@ fn waitpid(pid: pid_t) -> p::ProcessExit { #[cfg(windows)] fn waitpid_os(pid: pid_t) -> p::ProcessExit { - use std::libc::types::os::arch::extra::DWORD; - use std::libc::consts::os::extra::{ + use libc::types::os::arch::extra::DWORD; + use libc::consts::os::extra::{ SYNCHRONIZE, PROCESS_QUERY_INFORMATION, FALSE, @@ -686,7 +686,7 @@ fn waitpid(pid: pid_t) -> p::ProcessExit { INFINITE, WAIT_FAILED }; - use std::libc::funcs::extra::kernel32::{ + use libc::funcs::extra::kernel32::{ OpenProcess, GetExitCodeProcess, CloseHandle, @@ -722,7 +722,7 @@ fn waitpid(pid: pid_t) -> p::ProcessExit { #[cfg(unix)] fn waitpid_os(pid: pid_t) -> p::ProcessExit { - use std::libc::funcs::posix01::wait; + use libc::funcs::posix01::wait; #[cfg(target_os = "linux")] #[cfg(target_os = "android")] diff --git a/src/libnative/io/timer_helper.rs b/src/libnative/io/timer_helper.rs index e5f70c4e4b31c..4b29feab84fd0 100644 --- a/src/libnative/io/timer_helper.rs +++ b/src/libnative/io/timer_helper.rs @@ -94,7 +94,7 @@ fn shutdown() { #[cfg(unix)] mod imp { - use std::libc; + use libc; use std::os; use io::file::FileDesc; @@ -117,9 +117,9 @@ mod imp { #[cfg(windows)] mod imp { - use std::libc::{BOOL, LPCSTR, HANDLE, LPSECURITY_ATTRIBUTES, CloseHandle}; + use libc::{BOOL, LPCSTR, HANDLE, LPSECURITY_ATTRIBUTES, CloseHandle}; use std::ptr; - use std::libc; + use libc; pub type signal = HANDLE; diff --git a/src/libnative/io/timer_other.rs b/src/libnative/io/timer_other.rs index edd7af312c802..7ae88b1aedc3f 100644 --- a/src/libnative/io/timer_other.rs +++ b/src/libnative/io/timer_other.rs @@ -47,7 +47,7 @@ //! Note that all time units in this file are in *milliseconds*. use std::comm::Data; -use std::libc; +use libc; use std::mem; use std::os; use std::ptr; @@ -287,7 +287,7 @@ impl Drop for Timer { #[cfg(target_os = "macos")] mod imp { - use std::libc; + use libc; pub static FD_SETSIZE: uint = 1024; @@ -314,7 +314,7 @@ mod imp { #[cfg(target_os = "android")] #[cfg(target_os = "freebsd")] mod imp { - use std::libc; + use libc; pub static FD_SETSIZE: uint = 1024; diff --git a/src/libnative/io/timer_timerfd.rs b/src/libnative/io/timer_timerfd.rs index a8018bec0a6e3..0e5bd377162d2 100644 --- a/src/libnative/io/timer_timerfd.rs +++ b/src/libnative/io/timer_timerfd.rs @@ -29,7 +29,7 @@ //! As with timer_other, all units in this file are in units of millseconds. use std::comm::Data; -use std::libc; +use libc; use std::ptr; use std::os; use std::rt::rtio; @@ -267,7 +267,7 @@ impl Drop for Timer { #[allow(dead_code)] mod imp { - use std::libc; + use libc; pub static CLOCK_MONOTONIC: libc::c_int = 1; pub static EPOLL_CTL_ADD: libc::c_int = 1; diff --git a/src/libnative/io/timer_win32.rs b/src/libnative/io/timer_win32.rs index cdfe2e0d03372..05a485dfddd27 100644 --- a/src/libnative/io/timer_win32.rs +++ b/src/libnative/io/timer_win32.rs @@ -21,7 +21,7 @@ //! the other two implementations of timers with nothing *that* new showing up. use std::comm::Data; -use std::libc; +use libc; use std::ptr; use std::rt::rtio; @@ -178,7 +178,7 @@ impl Drop for Timer { } mod imp { - use std::libc::{LPSECURITY_ATTRIBUTES, BOOL, LPCSTR, HANDLE, LARGE_INTEGER, + use libc::{LPSECURITY_ATTRIBUTES, BOOL, LPCSTR, HANDLE, LARGE_INTEGER, LONG, LPVOID, DWORD, c_void}; pub type PTIMERAPCROUTINE = *c_void; diff --git a/src/libnative/lib.rs b/src/libnative/lib.rs index 34e85a9819a9a..be12463e99a14 100644 --- a/src/libnative/lib.rs +++ b/src/libnative/lib.rs @@ -55,6 +55,8 @@ // consider whether they're needed before adding that feature here (the // answer is that you don't need them) +extern crate libc; + use std::os; use std::rt; use std::str; diff --git a/src/librustc/back/archive.rs b/src/librustc/back/archive.rs index 786be3798a1a0..7dd7ff74b404c 100644 --- a/src/librustc/back/archive.rs +++ b/src/librustc/back/archive.rs @@ -18,7 +18,7 @@ use lib::llvm::{ArchiveRef, llvm}; use std::cast; use std::io; use std::io::{fs, TempDir}; -use std::libc; +use libc; use std::os; use std::io::process::{ProcessConfig, Process, ProcessOutput}; use std::str; diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs index f198a41af6557..8232e92e27912 100644 --- a/src/librustc/back/link.rs +++ b/src/librustc/back/link.rs @@ -102,7 +102,7 @@ pub mod write { use std::c_str::ToCStr; use std::io::Process; - use std::libc::{c_uint, c_int}; + use libc::{c_uint, c_int}; use std::str; // On android, we by default compile for armv7 processors. This enables diff --git a/src/librustc/back/lto.rs b/src/librustc/back/lto.rs index ef3496f113b59..eaa770323f31e 100644 --- a/src/librustc/back/lto.rs +++ b/src/librustc/back/lto.rs @@ -15,7 +15,7 @@ use lib::llvm::{ModuleRef, TargetMachineRef, llvm, True, False}; use metadata::cstore; use util::common::time; -use std::libc; +use libc; use flate; pub fn run(sess: &session::Session, llmod: ModuleRef, diff --git a/src/librustc/lib.rs b/src/librustc/lib.rs index ea7db3db67f47..fcf64527bfbec 100644 --- a/src/librustc/lib.rs +++ b/src/librustc/lib.rs @@ -39,6 +39,8 @@ extern crate sync; extern crate getopts; extern crate collections; extern crate time; +extern crate libc; + #[phase(syntax, link)] extern crate log; diff --git a/src/librustc/lib/llvm.rs b/src/librustc/lib/llvm.rs index 36ebb3d513944..8776e1e2abfe1 100644 --- a/src/librustc/lib/llvm.rs +++ b/src/librustc/lib/llvm.rs @@ -14,7 +14,7 @@ use std::c_str::ToCStr; use std::cell::RefCell; use collections::HashMap; -use std::libc::{c_uint, c_ushort, c_void, free}; +use libc::{c_uint, c_ushort, c_void, free}; use std::str::raw::from_c_str; use middle::trans::type_::Type; @@ -305,7 +305,7 @@ pub mod llvm { use super::{ValueRef, TargetMachineRef, FileType, ArchiveRef}; use super::{CodeGenModel, RelocMode, CodeGenOptLevel}; use super::debuginfo::*; - use std::libc::{c_char, c_int, c_longlong, c_ushort, c_uint, c_ulonglong, + use libc::{c_char, c_int, c_longlong, c_ushort, c_uint, c_ulonglong, size_t}; // Link to our native llvm bindings (things that we need to use the C++ api diff --git a/src/librustc/middle/astencode.rs b/src/librustc/middle/astencode.rs index 94947b95cd38f..cf895b409d7e6 100644 --- a/src/librustc/middle/astencode.rs +++ b/src/librustc/middle/astencode.rs @@ -32,7 +32,7 @@ use syntax::fold::Folder; use syntax::parse::token; use syntax; -use std::libc; +use libc; use std::cast; use std::cell::RefCell; use std::io::Seek; diff --git a/src/librustc/middle/lint.rs b/src/librustc/middle/lint.rs index 8c20cf39b49fe..d7373e723c4e7 100644 --- a/src/librustc/middle/lint.rs +++ b/src/librustc/middle/lint.rs @@ -151,7 +151,7 @@ static lint_table: &'static [(&'static str, LintSpec)] = &[ ("ctypes", LintSpec { lint: CTypes, - desc: "proper use of std::libc types in foreign modules", + desc: "proper use of libc types in foreign modules", default: warn }), diff --git a/src/librustc/middle/trans/adt.rs b/src/librustc/middle/trans/adt.rs index 1215eba17d7bb..b14a6a9c45dd1 100644 --- a/src/librustc/middle/trans/adt.rs +++ b/src/librustc/middle/trans/adt.rs @@ -44,7 +44,7 @@ */ use std::container::Map; -use std::libc::c_ulonglong; +use libc::c_ulonglong; use std::option::{Option, Some, None}; use std::num::{Bitwise}; diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index a81301f4f3e6d..5e6b16fd635b6 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -72,9 +72,9 @@ use util::sha2::Sha256; use util::nodemap::NodeMap; use arena::TypedArena; +use libc::c_uint; use std::c_str::ToCStr; use std::cell::{Cell, RefCell}; -use std::libc::c_uint; use std::local_data; use syntax::abi::{X86, X86_64, Arm, Mips, Rust, RustIntrinsic}; use syntax::ast_map::PathName; diff --git a/src/librustc/middle/trans/build.rs b/src/librustc/middle/trans/build.rs index 79e22ea345529..8b7dcc715d154 100644 --- a/src/librustc/middle/trans/build.rs +++ b/src/librustc/middle/trans/build.rs @@ -20,7 +20,7 @@ use syntax::codemap::Span; use middle::trans::builder::Builder; use middle::trans::type_::Type; -use std::libc::{c_uint, c_ulonglong, c_char}; +use libc::{c_uint, c_ulonglong, c_char}; pub fn terminate(cx: &Block, _: &str) { debug!("terminate({})", cx.to_str()); diff --git a/src/librustc/middle/trans/builder.rs b/src/librustc/middle/trans/builder.rs index 4526f3505beeb..555f12378a899 100644 --- a/src/librustc/middle/trans/builder.rs +++ b/src/librustc/middle/trans/builder.rs @@ -17,9 +17,9 @@ use middle::trans::base; use middle::trans::common::*; use middle::trans::machine::llalign_of_pref; use middle::trans::type_::Type; - use collections::HashMap; -use std::libc::{c_uint, c_ulonglong, c_char}; +use std::vec::Vec; +use libc::{c_uint, c_ulonglong, c_char}; use syntax::codemap::Span; pub struct Builder<'a> { diff --git a/src/librustc/middle/trans/cabi_mips.rs b/src/librustc/middle/trans/cabi_mips.rs index a373207585595..50b2d95e790af 100644 --- a/src/librustc/middle/trans/cabi_mips.rs +++ b/src/librustc/middle/trans/cabi_mips.rs @@ -10,7 +10,7 @@ #[allow(non_uppercase_pattern_statics)]; -use std::libc::c_uint; +use libc::c_uint; use std::cmp; use lib::llvm::{llvm, Integer, Pointer, Float, Double, Struct, Array}; use lib::llvm::StructRetAttribute; diff --git a/src/librustc/middle/trans/common.rs b/src/librustc/middle/trans/common.rs index 78700bab3f24d..28bdbf0199d14 100644 --- a/src/librustc/middle/trans/common.rs +++ b/src/librustc/middle/trans/common.rs @@ -32,9 +32,10 @@ use util::nodemap::NodeMap; use arena::TypedArena; use collections::HashMap; +use libc::{c_uint, c_longlong, c_ulonglong, c_char}; use std::c_str::ToCStr; use std::cell::{Cell, RefCell}; -use std::libc::{c_uint, c_longlong, c_ulonglong, c_char}; +use std::vec::Vec; use syntax::ast::Ident; use syntax::ast; use syntax::ast_map::{PathElem, PathName}; diff --git a/src/librustc/middle/trans/consts.rs b/src/librustc/middle/trans/consts.rs index dc154206e7117..62d7914ca717a 100644 --- a/src/librustc/middle/trans/consts.rs +++ b/src/librustc/middle/trans/consts.rs @@ -32,9 +32,9 @@ use middle::ty; use util::ppaux::{Repr, ty_to_str}; use std::c_str::ToCStr; -use std::libc::c_uint; use std::slice; use std::vec::Vec; +use libc::c_uint; use std::vec; use syntax::{ast, ast_util}; diff --git a/src/librustc/middle/trans/context.rs b/src/librustc/middle/trans/context.rs index a8ff0760eaa4b..d03409b52e3b5 100644 --- a/src/librustc/middle/trans/context.rs +++ b/src/librustc/middle/trans/context.rs @@ -28,9 +28,10 @@ use middle::ty; use util::sha2::Sha256; use util::nodemap::{NodeMap, NodeSet, DefIdMap}; +use libc::c_uint; +use collections::{HashMap, HashSet}; use std::cell::{Cell, RefCell}; use std::c_str::ToCStr; -use std::libc::c_uint; use std::ptr; use collections::{HashMap, HashSet}; use syntax::ast; diff --git a/src/librustc/middle/trans/debuginfo.rs b/src/librustc/middle/trans/debuginfo.rs index 9f5959e05deec..60e7ed64f2b92 100644 --- a/src/librustc/middle/trans/debuginfo.rs +++ b/src/librustc/middle/trans/debuginfo.rs @@ -145,7 +145,7 @@ use std::c_str::{CString, ToCStr}; use std::cell::{Cell, RefCell}; use collections::HashMap; use collections::HashSet; -use std::libc::{c_uint, c_ulonglong, c_longlong}; +use libc::{c_uint, c_ulonglong, c_longlong}; use std::ptr; use std::sync::atomics; use std::slice; diff --git a/src/librustc/middle/trans/foreign.rs b/src/librustc/middle/trans/foreign.rs index 4aa272a63a3e7..8ca9584d7524e 100644 --- a/src/librustc/middle/trans/foreign.rs +++ b/src/librustc/middle/trans/foreign.rs @@ -26,7 +26,8 @@ use middle::trans::type_of; use middle::ty::FnSig; use middle::ty; use std::cmp; -use std::libc::c_uint; +use std::vec::Vec; +use libc::c_uint; use syntax::abi::{Cdecl, Aapcs, C, AbiSet, Win64}; use syntax::abi::{RustIntrinsic, Rust, Stdcall, Fastcall, System}; use syntax::codemap::Span; diff --git a/src/librustc/middle/trans/glue.rs b/src/librustc/middle/trans/glue.rs index da9d06b9a7526..957db75919947 100644 --- a/src/librustc/middle/trans/glue.rs +++ b/src/librustc/middle/trans/glue.rs @@ -38,7 +38,7 @@ use util::ppaux; use arena::TypedArena; use std::c_str::ToCStr; use std::cell::Cell; -use std::libc::c_uint; +use libc::c_uint; use syntax::ast; use syntax::parse::token; diff --git a/src/librustc/middle/trans/reflect.rs b/src/librustc/middle/trans/reflect.rs index a0c1b0c042abc..21d8ff57d2db9 100644 --- a/src/librustc/middle/trans/reflect.rs +++ b/src/librustc/middle/trans/reflect.rs @@ -26,7 +26,8 @@ use middle::ty; use util::ppaux::ty_to_str; use arena::TypedArena; -use std::libc::c_uint; +use libc::c_uint; +use std::vec::Vec; use std::vec; use syntax::ast::DefId; use syntax::ast; diff --git a/src/librustc/middle/trans/type_.rs b/src/librustc/middle/trans/type_.rs index 7155c73c0026e..01e08ad0df389 100644 --- a/src/librustc/middle/trans/type_.rs +++ b/src/librustc/middle/trans/type_.rs @@ -22,7 +22,7 @@ use std::c_str::ToCStr; use std::cast; use std::slice; -use std::libc::{c_uint}; +use libc::{c_uint}; #[deriving(Clone, Eq, Show)] pub struct Type { diff --git a/src/librustc/middle/trans/value.rs b/src/librustc/middle/trans/value.rs index 1930b4fa8b916..15b94636ad1f5 100644 --- a/src/librustc/middle/trans/value.rs +++ b/src/librustc/middle/trans/value.rs @@ -11,7 +11,7 @@ use lib::llvm::{llvm, UseRef, ValueRef}; use middle::trans::basic_block::BasicBlock; use middle::trans::common::Block; -use std::libc::c_uint; +use libc::c_uint; pub struct Value(ValueRef); diff --git a/src/librustdoc/html/markdown.rs b/src/librustdoc/html/markdown.rs index b162d9d4b7895..7cb43b9d470aa 100644 --- a/src/librustdoc/html/markdown.rs +++ b/src/librustdoc/html/markdown.rs @@ -26,10 +26,12 @@ #[allow(non_camel_case_types)]; +extern crate libc; + +use libc; use std::cast; use std::fmt; use std::io; -use std::libc; use std::local_data; use std::mem; use std::str; diff --git a/src/librustuv/addrinfo.rs b/src/librustuv/addrinfo.rs index 5d6af2969b8b3..7a23a3466da40 100644 --- a/src/librustuv/addrinfo.rs +++ b/src/librustuv/addrinfo.rs @@ -10,8 +10,8 @@ use ai = std::io::net::addrinfo; use std::cast; -use std::libc; -use std::libc::c_int; +use libc; +use libc::c_int; use std::ptr::null; use std::rt::task::BlockedTask; diff --git a/src/librustuv/async.rs b/src/librustuv/async.rs index 5caccb348cc79..c75f84de01e44 100644 --- a/src/librustuv/async.rs +++ b/src/librustuv/async.rs @@ -9,7 +9,7 @@ // except according to those terms. use std::cast; -use std::libc::c_int; +use libc::c_int; use std::rt::rtio::{Callback, RemoteCallback}; use std::unstable::sync::Exclusive; diff --git a/src/librustuv/file.rs b/src/librustuv/file.rs index d5235a9fe56b3..2f3daea818e8c 100644 --- a/src/librustuv/file.rs +++ b/src/librustuv/file.rs @@ -12,8 +12,8 @@ use std::c_str::CString; use std::c_str; use std::cast::transmute; use std::cast; -use std::libc::{c_int, c_char, c_void, size_t, ssize_t}; -use std::libc; +use libc::{c_int, c_char, c_void, size_t, ssize_t}; +use libc; use std::rt::task::BlockedTask; use std::io::{FileStat, IoError}; use std::io; @@ -434,7 +434,7 @@ impl rtio::RtioFileStream for FileWatcher { self.base_write(buf, offset as i64) } fn seek(&mut self, pos: i64, whence: io::SeekStyle) -> Result { - use std::libc::{SEEK_SET, SEEK_CUR, SEEK_END}; + use libc::{SEEK_SET, SEEK_CUR, SEEK_END}; let whence = match whence { io::SeekSet => SEEK_SET, io::SeekCur => SEEK_CUR, @@ -443,7 +443,7 @@ impl rtio::RtioFileStream for FileWatcher { self.seek_common(pos, whence) } fn tell(&self) -> Result { - use std::libc::SEEK_CUR; + use libc::SEEK_CUR; // this is temporary let self_ = unsafe { cast::transmute_mut(self) }; self_.seek_common(0, SEEK_CUR) @@ -465,8 +465,8 @@ impl rtio::RtioFileStream for FileWatcher { #[cfg(test)] mod test { - use std::libc::c_int; - use std::libc::{O_CREAT, O_RDWR, O_RDONLY, S_IWUSR, S_IRUSR}; + use libc::c_int; + use libc::{O_CREAT, O_RDWR, O_RDONLY, S_IWUSR, S_IRUSR}; use std::io; use std::str; use std::slice; diff --git a/src/librustuv/idle.rs b/src/librustuv/idle.rs index bbfacf870964c..0de6e479a8f7a 100644 --- a/src/librustuv/idle.rs +++ b/src/librustuv/idle.rs @@ -9,7 +9,7 @@ // except according to those terms. use std::cast; -use std::libc::{c_int, c_void}; +use libc::{c_int, c_void}; use uvll; use super::{Loop, UvHandle}; diff --git a/src/librustuv/lib.rs b/src/librustuv/lib.rs index 41a6651cc1cab..bc1c1feddaf58 100644 --- a/src/librustuv/lib.rs +++ b/src/librustuv/lib.rs @@ -45,12 +45,13 @@ via `close` and `delete` methods. #[cfg(test)] extern crate green; #[cfg(test)] extern crate realrustuv = "rustuv"; +extern crate libc; use std::cast; use std::fmt; use std::io::IoError; use std::io; -use std::libc::{c_int, c_void}; +use libc::{c_int, c_void}; use std::ptr::null; use std::ptr; use std::rt::local::Local; diff --git a/src/librustuv/macros.rs b/src/librustuv/macros.rs index 75b68e3a52885..e88976dad61c7 100644 --- a/src/librustuv/macros.rs +++ b/src/librustuv/macros.rs @@ -29,7 +29,7 @@ macro_rules! uvdebug ( pub fn dumb_println(args: &fmt::Arguments) { use std::io; - use std::libc; + use libc; struct Stderr; impl io::Writer for Stderr { diff --git a/src/librustuv/net.rs b/src/librustuv/net.rs index cfecdd929f38d..ebce60b992a95 100644 --- a/src/librustuv/net.rs +++ b/src/librustuv/net.rs @@ -11,8 +11,8 @@ use std::cast; use std::io::IoError; use std::io::net::ip; -use std::libc::{size_t, ssize_t, c_int, c_void, c_uint}; -use std::libc; +use libc::{size_t, ssize_t, c_int, c_void, c_uint}; +use libc; use std::mem; use std::ptr; use std::rt::rtio; diff --git a/src/librustuv/pipe.rs b/src/librustuv/pipe.rs index e1226f0b3a98c..a48c0ddf4fd49 100644 --- a/src/librustuv/pipe.rs +++ b/src/librustuv/pipe.rs @@ -10,7 +10,7 @@ use std::c_str::CString; use std::io::IoError; -use std::libc; +use libc; use std::rt::rtio::{RtioPipe, RtioUnixListener, RtioUnixAcceptor}; use std::rt::task::BlockedTask; diff --git a/src/librustuv/process.rs b/src/librustuv/process.rs index bd07bf18a72d0..c0db66cb913fd 100644 --- a/src/librustuv/process.rs +++ b/src/librustuv/process.rs @@ -10,8 +10,8 @@ use std::io::IoError; use std::io::process; -use std::libc::c_int; -use std::libc; +use libc::c_int; +use libc; use std::ptr; use std::rt::rtio::RtioProcess; use std::rt::task::BlockedTask; diff --git a/src/librustuv/queue.rs b/src/librustuv/queue.rs index e998b5ca20b30..f99bbda2eb087 100644 --- a/src/librustuv/queue.rs +++ b/src/librustuv/queue.rs @@ -21,7 +21,7 @@ #[allow(dead_code)]; use std::cast; -use std::libc::{c_void, c_int}; +use libc::{c_void, c_int}; use std::rt::task::BlockedTask; use std::unstable::mutex::NativeMutex; use std::sync::arc::UnsafeArc; diff --git a/src/librustuv/signal.rs b/src/librustuv/signal.rs index 25cc8b8a8fbe8..c38b4fdd96faf 100644 --- a/src/librustuv/signal.rs +++ b/src/librustuv/signal.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::libc::c_int; +use libc::c_int; use std::io::signal::Signum; use std::rt::rtio::RtioSignal; diff --git a/src/librustuv/stream.rs b/src/librustuv/stream.rs index f7bf2f051eb90..a49e41578015a 100644 --- a/src/librustuv/stream.rs +++ b/src/librustuv/stream.rs @@ -9,7 +9,7 @@ // except according to those terms. use std::cast; -use std::libc::{c_int, size_t, ssize_t}; +use libc::{c_int, size_t, ssize_t}; use std::ptr; use std::rt::task::BlockedTask; diff --git a/src/librustuv/timer.rs b/src/librustuv/timer.rs index 6cbba8e6fd452..3d323382ad536 100644 --- a/src/librustuv/timer.rs +++ b/src/librustuv/timer.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::libc::c_int; +use libc::c_int; use std::mem; use std::rt::rtio::RtioTimer; use std::rt::task::BlockedTask; diff --git a/src/librustuv/tty.rs b/src/librustuv/tty.rs index 19c98c79b6abd..95ecaa09a43ae 100644 --- a/src/librustuv/tty.rs +++ b/src/librustuv/tty.rs @@ -8,8 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +use libc; use std::io::IoError; -use std::libc; use std::ptr; use std::rt::rtio::RtioTTY; diff --git a/src/librustuv/uvio.rs b/src/librustuv/uvio.rs index 1621ccfbf454c..9c4c9237bd0a1 100644 --- a/src/librustuv/uvio.rs +++ b/src/librustuv/uvio.rs @@ -17,10 +17,10 @@ use std::io::signal::Signum; use std::io::{FileMode, FileAccess, Open, Append, Truncate, Read, Write, ReadWrite, FileStat}; use std::io; -use std::libc::c_int; -use std::libc::{O_CREAT, O_APPEND, O_TRUNC, O_RDWR, O_RDONLY, O_WRONLY, S_IRUSR, +use libc::c_int; +use libc::{O_CREAT, O_APPEND, O_TRUNC, O_RDWR, O_RDONLY, O_WRONLY, S_IRUSR, S_IWUSR}; -use std::libc; +use libc; use std::path::Path; use std::rt::rtio; use std::rt::rtio::IoFactory; diff --git a/src/librustuv/uvll.rs b/src/librustuv/uvll.rs index 25f4fb0edf8f4..18b9419906842 100644 --- a/src/librustuv/uvll.rs +++ b/src/librustuv/uvll.rs @@ -29,13 +29,13 @@ #[allow(non_camel_case_types)]; // C types -use std::libc::{size_t, c_int, c_uint, c_void, c_char, c_double}; -use std::libc::{ssize_t, sockaddr, free, addrinfo}; -use std::libc; +use libc::{size_t, c_int, c_uint, c_void, c_char, c_double}; +use libc::{ssize_t, sockaddr, free, addrinfo}; +use libc; use std::rt::global_heap::malloc_raw; #[cfg(test)] -use std::libc::uintptr_t; +use libc::uintptr_t; pub use self::errors::{EACCES, ECONNREFUSED, ECONNRESET, EPIPE, ECONNABORTED, ECANCELED, EBADF, ENOTCONN, ENOENT, EADDRNOTAVAIL}; @@ -49,7 +49,7 @@ pub static UNKNOWN: c_int = -4094; #[cfg(windows)] pub mod errors { - use std::libc::c_int; + use libc::c_int; pub static EACCES: c_int = -4092; pub static ECONNREFUSED: c_int = -4078; @@ -64,8 +64,8 @@ pub mod errors { } #[cfg(not(windows))] pub mod errors { - use std::libc; - use std::libc::c_int; + use libc; + use libc::c_int; pub static EACCES: c_int = -libc::EACCES; pub static ECONNREFUSED: c_int = -libc::ECONNREFUSED; diff --git a/src/libstd/c_str.rs b/src/libstd/c_str.rs index 96c7c21812720..89d635355ad1a 100644 --- a/src/libstd/c_str.rs +++ b/src/libstd/c_str.rs @@ -39,25 +39,28 @@ unnecessary amounts of allocations. An example of creating and using a C string would be: ```rust -use std::libc; +extern crate libc; + extern { fn puts(s: *libc::c_char); } -let my_string = "Hello, world!"; - -// Allocate the C string with an explicit local that owns the string. The -// `c_buffer` pointer will be deallocated when `my_c_string` goes out of scope. -let my_c_string = my_string.to_c_str(); -my_c_string.with_ref(|c_buffer| { - unsafe { puts(c_buffer); } -}); - -// Don't save off the allocation of the C string, the `c_buffer` will be -// deallocated when this block returns! -my_string.with_c_str(|c_buffer| { - unsafe { puts(c_buffer); } -}); +fn main() { + let my_string = "Hello, world!"; + + // Allocate the C string with an explicit local that owns the string. The + // `c_buffer` pointer will be deallocated when `my_c_string` goes out of scope. + let my_c_string = my_string.to_c_str(); + my_c_string.with_ref(|c_buffer| { + unsafe { puts(c_buffer); } + }); + + // Don't save off the allocation of the C string, the `c_buffer` will be + // deallocated when this block returns! + my_string.with_c_str(|c_buffer| { + unsafe { puts(c_buffer); } + }); +} ``` */ @@ -266,11 +269,13 @@ pub trait ToCStr { /// # Example /// /// ```rust - /// use std::libc; + /// extern crate libc; /// - /// let s = "PATH".with_c_str(|path| unsafe { - /// libc::getenv(path) - /// }); + /// fn main() { + /// let s = "PATH".with_c_str(|path| unsafe { + /// libc::getenv(path) + /// }); + /// } /// ``` /// /// # Failure diff --git a/src/libstd/io/pipe.rs b/src/libstd/io/pipe.rs index fbf79b194456a..8a23e07e3eaf9 100644 --- a/src/libstd/io/pipe.rs +++ b/src/libstd/io/pipe.rs @@ -38,11 +38,14 @@ impl PipeStream { /// /// ```rust /// # #[allow(unused_must_use)]; - /// use std::libc; + /// extern crate libc; + /// /// use std::io::pipe::PipeStream; /// - /// let mut pipe = PipeStream::open(libc::STDERR_FILENO); - /// pipe.write(bytes!("Hello, stderr!")); + /// fn main() { + /// let mut pipe = PipeStream::open(libc::STDERR_FILENO); + /// pipe.write(bytes!("Hello, stderr!")); + /// } /// ``` pub fn open(fd: libc::c_int) -> IoResult { LocalIo::maybe_raise(|io| { diff --git a/src/libsyntax/diagnostic.rs b/src/libsyntax/diagnostic.rs index faeb7b4e0f24d..217929caec30f 100644 --- a/src/libsyntax/diagnostic.rs +++ b/src/libsyntax/diagnostic.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +extern crate libc; + use codemap::{Pos, Span}; use codemap; diff --git a/src/libtime/lib.rs b/src/libtime/lib.rs index 8b496964bc0f2..17c5d1f6a56b3 100644 --- a/src/libtime/lib.rs +++ b/src/libtime/lib.rs @@ -20,9 +20,9 @@ #[cfg(test)] #[phase(syntax, link)] extern crate log; extern crate serialize; +extern crate libc; use std::io::BufReader; -use std::libc; use std::num; use std::str; @@ -42,7 +42,7 @@ mod rustrt { #[cfg(unix, not(target_os = "macos"))] mod imp { - use std::libc::{c_int, timespec}; + use libc::{c_int, timespec}; // Apparently android provides this in some other library? #[cfg(not(target_os = "android"))] @@ -56,7 +56,7 @@ mod imp { } #[cfg(target_os = "macos")] mod imp { - use std::libc::{timeval, timezone, c_int, mach_timebase_info}; + use libc::{timeval, timezone, c_int, mach_timebase_info}; extern { pub fn gettimeofday(tp: *mut timeval, tzp: *mut timezone) -> c_int; @@ -1076,7 +1076,7 @@ mod tests { #[cfg(windows)] fn set_time_zone() { - use std::libc; + use libc; // Windows crt doesn't see any environment variable set by // `SetEnvironmentVariable`, which `os::setenv` internally uses. // It is why we use `putenv` here. diff --git a/src/test/auxiliary/anon-extern-mod-cross-crate-1.rs b/src/test/auxiliary/anon-extern-mod-cross-crate-1.rs index aa6ee35a07792..fe4a397b786af 100644 --- a/src/test/auxiliary/anon-extern-mod-cross-crate-1.rs +++ b/src/test/auxiliary/anon-extern-mod-cross-crate-1.rs @@ -10,7 +10,7 @@ #[crate_id="anonexternmod#0.1"]; -use std::libc; +extern crate libc; #[link(name="rustrt")] extern { diff --git a/src/test/auxiliary/extern-crosscrate-source.rs b/src/test/auxiliary/extern-crosscrate-source.rs index d2c79bbe9cb2d..7185ac413c5d1 100644 --- a/src/test/auxiliary/extern-crosscrate-source.rs +++ b/src/test/auxiliary/extern-crosscrate-source.rs @@ -11,10 +11,10 @@ #[crate_id="externcallback#0.1"]; #[crate_type = "lib"]; -use std::libc; +extern crate libc; pub mod rustrt { - use std::libc; + extern crate libc; #[link(name = "rustrt")] extern { diff --git a/src/test/auxiliary/foreign_lib.rs b/src/test/auxiliary/foreign_lib.rs index e59fae346368b..396e136f6f030 100644 --- a/src/test/auxiliary/foreign_lib.rs +++ b/src/test/auxiliary/foreign_lib.rs @@ -11,7 +11,7 @@ #[crate_id="foreign_lib"]; pub mod rustrt { - use std::libc; + extern crate libc; #[link(name = "rustrt")] extern { diff --git a/src/test/auxiliary/issue-3012-1.rs b/src/test/auxiliary/issue-3012-1.rs index af83c5561db8e..9bb47fcfad3b4 100644 --- a/src/test/auxiliary/issue-3012-1.rs +++ b/src/test/auxiliary/issue-3012-1.rs @@ -12,7 +12,7 @@ #[crate_type = "lib"]; pub mod socket { - use std::libc; + extern crate libc; pub struct socket_handle { sockfd: libc::c_int, diff --git a/src/test/auxiliary/issue_5844_aux.rs b/src/test/auxiliary/issue_5844_aux.rs index 78e87f32b79b3..0f898ae83859f 100644 --- a/src/test/auxiliary/issue_5844_aux.rs +++ b/src/test/auxiliary/issue_5844_aux.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::libc; +extern crate libc; extern "C" { pub fn rand() -> libc::c_int; diff --git a/src/test/compile-fail/attrs-after-extern-mod.rs b/src/test/compile-fail/attrs-after-extern-mod.rs index 44b6ecdee7073..df74761869608 100644 --- a/src/test/compile-fail/attrs-after-extern-mod.rs +++ b/src/test/compile-fail/attrs-after-extern-mod.rs @@ -12,7 +12,7 @@ // statics cannot. This ensures that there's some form of error if this is // attempted. -use std::libc; +extern crate libc; extern { static mut rust_dbg_static_mut: libc::c_int; diff --git a/src/test/compile-fail/lint-ctypes.rs b/src/test/compile-fail/lint-ctypes.rs index 0a1b78c8d5d0a..54c9789329c34 100644 --- a/src/test/compile-fail/lint-ctypes.rs +++ b/src/test/compile-fail/lint-ctypes.rs @@ -10,7 +10,7 @@ #[deny(ctypes)]; -use std::libc; +extern crate libc; extern { pub fn bare_type1(size: int); //~ ERROR: found rust type diff --git a/src/test/compile-fail/lint-dead-code-3.rs b/src/test/compile-fail/lint-dead-code-3.rs index e07fc96a1f312..f38308b77118b 100644 --- a/src/test/compile-fail/lint-dead-code-3.rs +++ b/src/test/compile-fail/lint-dead-code-3.rs @@ -14,6 +14,8 @@ #[crate_type="lib"]; +extern crate libc; + struct Foo; //~ ERROR: code is never used impl Foo { fn foo(&self) { //~ ERROR: code is never used @@ -46,7 +48,7 @@ pub fn pub_fn() { } mod blah { - use std::libc::size_t; + use libc::size_t; // not warned because it's used in the parameter of `free` and return of // `malloc` below, which are also used. enum c_void {} diff --git a/src/test/compile-fail/non-copyable-void.rs b/src/test/compile-fail/non-copyable-void.rs index bd9547d5e1c4a..5025e2e509b11 100644 --- a/src/test/compile-fail/non-copyable-void.rs +++ b/src/test/compile-fail/non-copyable-void.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::libc; +extern crate libc; fn main() { let x : *Vec = &vec!(1,2,3); diff --git a/src/test/compile-fail/static-mut-foreign-requires-unsafe.rs b/src/test/compile-fail/static-mut-foreign-requires-unsafe.rs index 7b371cf708dc1..0e44af19a7f62 100644 --- a/src/test/compile-fail/static-mut-foreign-requires-unsafe.rs +++ b/src/test/compile-fail/static-mut-foreign-requires-unsafe.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::libc; +extern crate libc; extern { static mut a: libc::c_int; diff --git a/src/test/compile-fail/unsupported-cast.rs b/src/test/compile-fail/unsupported-cast.rs index be3f5ba7da86d..fbcad79ac46e7 100644 --- a/src/test/compile-fail/unsupported-cast.rs +++ b/src/test/compile-fail/unsupported-cast.rs @@ -10,7 +10,7 @@ // error-pattern:unsupported cast -use std::libc; +extern crate libc; fn main() { println!("{:?}", 1.0 as *libc::FILE); // Can't cast float to foreign. diff --git a/src/test/run-fail/extern-fail.rs b/src/test/run-fail/extern-fail.rs index 93f55261574ea..c11d269a89755 100644 --- a/src/test/run-fail/extern-fail.rs +++ b/src/test/run-fail/extern-fail.rs @@ -13,11 +13,11 @@ // Testing that runtime failure doesn't cause callbacks to abort abnormally. // Instead the failure will be delivered after the callbacks return. -use std::libc; +extern crate libc; use std::task; mod rustrt { - use std::libc; + extern crate libc; extern { pub fn rust_dbg_call(cb: *u8, data: libc::uintptr_t) diff --git a/src/test/run-fail/morestack2.rs b/src/test/run-fail/morestack2.rs index 2430c5bb666b5..671530425908a 100644 --- a/src/test/run-fail/morestack2.rs +++ b/src/test/run-fail/morestack2.rs @@ -16,11 +16,11 @@ // See the hack in upcall_call_shim_on_c_stack where it messes // with the stack limit. -use std::libc; +extern crate libc; use std::task; mod rustrt { - use std::libc; + extern crate libc; extern { pub fn rust_get_argc() -> libc::c_int; diff --git a/src/test/run-pass/anon-extern-mod.rs b/src/test/run-pass/anon-extern-mod.rs index 7e05bcc1fd226..9ee1b85d85672 100644 --- a/src/test/run-pass/anon-extern-mod.rs +++ b/src/test/run-pass/anon-extern-mod.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::libc; +extern crate libc; #[link(name = "rustrt")] extern { diff --git a/src/test/run-pass/c-stack-as-value.rs b/src/test/run-pass/c-stack-as-value.rs index d590c35d9e218..89cbbc2447588 100644 --- a/src/test/run-pass/c-stack-as-value.rs +++ b/src/test/run-pass/c-stack-as-value.rs @@ -9,7 +9,7 @@ // except according to those terms. mod rustrt { - use std::libc; + extern crate libc; #[link(name = "rustrt")] extern { diff --git a/src/test/run-pass/c-stack-returning-int64.rs b/src/test/run-pass/c-stack-returning-int64.rs index 9a02768faebe1..efa744c340722 100644 --- a/src/test/run-pass/c-stack-returning-int64.rs +++ b/src/test/run-pass/c-stack-returning-int64.rs @@ -8,8 +8,10 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -mod libc { - use std::libc::{c_char, c_long, c_longlong}; +extern crate libc; + +mod mlibc { + use libc::{c_char, c_long, c_longlong}; extern { pub fn atol(x: *c_char) -> c_long; @@ -18,11 +20,11 @@ mod libc { } fn atol(s: ~str) -> int { - s.with_c_str(|x| unsafe { libc::atol(x) as int }) + s.with_c_str(|x| unsafe { mlibc::atol(x) as int }) } fn atoll(s: ~str) -> i64 { - s.with_c_str(|x| unsafe { libc::atoll(x) as i64 }) + s.with_c_str(|x| unsafe { mlibc::atoll(x) as i64 }) } pub fn main() { diff --git a/src/test/run-pass/const-cast.rs b/src/test/run-pass/const-cast.rs index d511930c70fa7..7b17b578b82b7 100644 --- a/src/test/run-pass/const-cast.rs +++ b/src/test/run-pass/const-cast.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::libc; +extern crate libc; extern fn foo() {} diff --git a/src/test/run-pass/core-run-destroy.rs b/src/test/run-pass/core-run-destroy.rs index 87d3c337bddb0..86e5ab9a715af 100644 --- a/src/test/run-pass/core-run-destroy.rs +++ b/src/test/run-pass/core-run-destroy.rs @@ -17,6 +17,7 @@ // instead of in std. #[feature(macro_rules)]; +extern crate libc; extern crate native; extern crate green; @@ -28,7 +29,7 @@ macro_rules! iotest ( #[allow(unused_imports)]; use std::io::timer; - use std::libc; + use libc; use std::str; use std::io::process::{Process, ProcessOutput}; use native; @@ -80,7 +81,7 @@ iotest!(fn test_destroy_twice() { pub fn test_destroy_actually_kills(force: bool) { use std::io::process::{Process, ProcessOutput, ExitStatus, ExitSignal}; use std::io::timer; - use std::libc; + use libc; use std::str; #[cfg(unix,not(target_os="android"))] diff --git a/src/test/run-pass/extern-call-deep.rs b/src/test/run-pass/extern-call-deep.rs index 67f2d750cc024..84574fb6787d2 100644 --- a/src/test/run-pass/extern-call-deep.rs +++ b/src/test/run-pass/extern-call-deep.rs @@ -8,10 +8,10 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::libc; +extern crate libc; mod rustrt { - use std::libc; + extern crate libc; #[link(name = "rustrt")] extern { diff --git a/src/test/run-pass/extern-call-deep2.rs b/src/test/run-pass/extern-call-deep2.rs index 701ae33132dc3..60b80356d9faa 100644 --- a/src/test/run-pass/extern-call-deep2.rs +++ b/src/test/run-pass/extern-call-deep2.rs @@ -8,11 +8,11 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::libc; +extern crate libc; use std::task; mod rustrt { - use std::libc; + extern crate libc; #[link(name = "rustrt")] extern { diff --git a/src/test/run-pass/extern-call-indirect.rs b/src/test/run-pass/extern-call-indirect.rs index 16142b2f8967c..391fdc616dc2e 100644 --- a/src/test/run-pass/extern-call-indirect.rs +++ b/src/test/run-pass/extern-call-indirect.rs @@ -8,10 +8,10 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::libc; +extern crate libc; mod rustrt { - use std::libc; + extern crate libc; #[link(name = "rustrt")] extern { diff --git a/src/test/run-pass/extern-call-scrub.rs b/src/test/run-pass/extern-call-scrub.rs index c67810bb17a8d..a1aa2adc4310a 100644 --- a/src/test/run-pass/extern-call-scrub.rs +++ b/src/test/run-pass/extern-call-scrub.rs @@ -12,11 +12,11 @@ // make sure the stack pointers are maintained properly in both // directions -use std::libc; +extern crate libc; use std::task; mod rustrt { - use std::libc; + extern crate libc; #[link(name = "rustrt")] extern { diff --git a/src/test/run-pass/extern-stress.rs b/src/test/run-pass/extern-stress.rs index ef1b26fc1af05..26fc334026f48 100644 --- a/src/test/run-pass/extern-stress.rs +++ b/src/test/run-pass/extern-stress.rs @@ -11,11 +11,11 @@ // This creates a bunch of descheduling tasks that run concurrently // while holding onto C stacks -use std::libc; +extern crate libc; use std::task; mod rustrt { - use std::libc; + extern crate libc; #[link(name = "rustrt")] extern { diff --git a/src/test/run-pass/extern-yield.rs b/src/test/run-pass/extern-yield.rs index ba4f0ccfe6485..aec7ee4341241 100644 --- a/src/test/run-pass/extern-yield.rs +++ b/src/test/run-pass/extern-yield.rs @@ -8,11 +8,11 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::libc; +extern crate libc; use std::task; mod rustrt { - use std::libc; + extern crate libc; #[link(name = "rustrt")] extern { diff --git a/src/test/run-pass/foreign-call-no-runtime.rs b/src/test/run-pass/foreign-call-no-runtime.rs index 130f04b3fb2ad..147cfb16fa2fd 100644 --- a/src/test/run-pass/foreign-call-no-runtime.rs +++ b/src/test/run-pass/foreign-call-no-runtime.rs @@ -8,8 +8,9 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +extern crate libc; + use std::cast; -use std::libc; use std::unstable::run_in_bare_thread; #[link(name = "rustrt")] diff --git a/src/test/run-pass/foreign-dupe.rs b/src/test/run-pass/foreign-dupe.rs index 8a6c0e4abcef4..a36083e829319 100644 --- a/src/test/run-pass/foreign-dupe.rs +++ b/src/test/run-pass/foreign-dupe.rs @@ -12,7 +12,7 @@ // calling pin_task and that's having wierd side-effects. mod rustrt1 { - use std::libc; + extern crate libc; #[link(name = "rustrt")] extern { @@ -21,7 +21,7 @@ mod rustrt1 { } mod rustrt2 { - use std::libc; + extern crate libc; #[link(name = "rustrt")] extern { diff --git a/src/test/run-pass/foreign-fn-linkname.rs b/src/test/run-pass/foreign-fn-linkname.rs index 7e6a362cabebb..7ea7c0f4f4b61 100644 --- a/src/test/run-pass/foreign-fn-linkname.rs +++ b/src/test/run-pass/foreign-fn-linkname.rs @@ -8,8 +8,9 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -mod libc { - use std::libc::{c_char, size_t}; +mod mlibc { + extern crate libc; + use self::libc::{c_char, size_t}; extern { #[link_name = "strlen"] @@ -21,7 +22,7 @@ fn strlen(str: ~str) -> uint { // C string is terminated with a zero str.with_c_str(|buf| { unsafe { - libc::my_strlen(buf) as uint + mlibc::my_strlen(buf) as uint } }) } diff --git a/src/test/run-pass/foreign-mod-unused-const.rs b/src/test/run-pass/foreign-mod-unused-const.rs index 2f58765394131..8e4f90d53c3fe 100644 --- a/src/test/run-pass/foreign-mod-unused-const.rs +++ b/src/test/run-pass/foreign-mod-unused-const.rs @@ -8,8 +8,10 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +extern crate libc; + mod foo { - use std::libc::c_int; + use libc::c_int; extern { pub static errno: c_int; diff --git a/src/test/run-pass/foreign-no-abi.rs b/src/test/run-pass/foreign-no-abi.rs index eef45532265a3..0bf97a7d9b48c 100644 --- a/src/test/run-pass/foreign-no-abi.rs +++ b/src/test/run-pass/foreign-no-abi.rs @@ -11,7 +11,7 @@ // ABI is cdecl by default mod rustrt { - use std::libc; + extern crate libc; #[link(name = "rustrt")] extern { diff --git a/src/test/run-pass/foreign2.rs b/src/test/run-pass/foreign2.rs index 7c9d2dfa87cd1..4f05fbcb598c8 100644 --- a/src/test/run-pass/foreign2.rs +++ b/src/test/run-pass/foreign2.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +extern crate libc; + mod bar { extern {} } @@ -16,8 +18,8 @@ mod zed { extern {} } -mod libc { - use std::libc::{c_int, c_void, size_t, ssize_t}; +mod mlibc { + use libc::{c_int, c_void, size_t, ssize_t}; extern { pub fn write(fd: c_int, buf: *c_void, count: size_t) -> ssize_t; diff --git a/src/test/run-pass/issue-1251.rs b/src/test/run-pass/issue-1251.rs index 70d2c58a631e3..3befa4e7fb43a 100644 --- a/src/test/run-pass/issue-1251.rs +++ b/src/test/run-pass/issue-1251.rs @@ -11,7 +11,7 @@ #[crate_id="rust_get_test_int"]; mod rustrt { - use std::libc; + extern crate libc; extern { pub fn rust_get_test_int() -> libc::intptr_t; diff --git a/src/test/run-pass/issue-2214.rs b/src/test/run-pass/issue-2214.rs index f482790ef4c45..b6ff31269c7bd 100644 --- a/src/test/run-pass/issue-2214.rs +++ b/src/test/run-pass/issue-2214.rs @@ -10,8 +10,10 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +extern crate libc; + use std::cast; -use std::libc::{c_double, c_int}; +use libc::{c_double, c_int}; fn to_c_int(v: &mut int) -> &mut c_int { unsafe { @@ -26,7 +28,7 @@ fn lgamma(n: c_double, value: &mut int) -> c_double { } mod m { - use std::libc::{c_double, c_int}; + use libc::{c_double, c_int}; #[link_name = "m"] extern { diff --git a/src/test/run-pass/issue-3012-2.rs b/src/test/run-pass/issue-3012-2.rs index 0ffbdc3c5b897..a301aa6baa4c4 100644 --- a/src/test/run-pass/issue-3012-2.rs +++ b/src/test/run-pass/issue-3012-2.rs @@ -14,9 +14,9 @@ #[feature(managed_boxes)]; extern crate socketlib; +extern crate libc; use socketlib::socket; -use std::libc; pub fn main() { let fd: libc::c_int = 1 as libc::c_int; diff --git a/src/test/run-pass/issue-3656.rs b/src/test/run-pass/issue-3656.rs index 404d29fb93ee2..5823c473caa4c 100644 --- a/src/test/run-pass/issue-3656.rs +++ b/src/test/run-pass/issue-3656.rs @@ -13,7 +13,8 @@ // Incorrect struct size computation in the FFI, because of not taking // the alignment of elements into account. -use std::libc::{c_uint, uint32_t, c_void}; +extern crate libc; +use libc::{c_uint, uint32_t, c_void}; struct KEYGEN { hash_algorithm: [c_uint, ..2], diff --git a/src/test/run-pass/issue-4735.rs b/src/test/run-pass/issue-4735.rs index b8205d9635b45..2a5a739cef075 100644 --- a/src/test/run-pass/issue-4735.rs +++ b/src/test/run-pass/issue-4735.rs @@ -8,9 +8,10 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +extern crate libc; use std::cast::transmute; -use std::libc::c_void; +use libc::c_void; struct NonCopyable(*c_void); diff --git a/src/test/run-pass/issue-5791.rs b/src/test/run-pass/issue-5791.rs index 251ae2f319494..1bda73a16c9eb 100644 --- a/src/test/run-pass/issue-5791.rs +++ b/src/test/run-pass/issue-5791.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::libc; +extern crate libc; extern { #[link_name = "malloc"] diff --git a/src/test/run-pass/item-attributes.rs b/src/test/run-pass/item-attributes.rs index 2235676441047..b9e174ee86b67 100644 --- a/src/test/run-pass/item-attributes.rs +++ b/src/test/run-pass/item-attributes.rs @@ -157,7 +157,7 @@ mod test_other_forms { mod test_foreign_items { pub mod rustrt { - use std::libc; + extern crate libc; extern { #[attr]; diff --git a/src/test/run-pass/lint-cstack.rs b/src/test/run-pass/lint-cstack.rs index 5d89a2d5b3c8d..2194453aac29a 100644 --- a/src/test/run-pass/lint-cstack.rs +++ b/src/test/run-pass/lint-cstack.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::libc; +extern crate libc; extern { fn rust_get_test_int() -> libc::intptr_t; diff --git a/src/test/run-pass/morestack6.rs b/src/test/run-pass/morestack6.rs index 440acbcf4da6b..f1ba95b5efe90 100644 --- a/src/test/run-pass/morestack6.rs +++ b/src/test/run-pass/morestack6.rs @@ -18,7 +18,7 @@ extern crate rand; use std::task; mod rustrt { - use std::libc; + extern crate libc; extern { pub fn debug_get_stk_seg() -> *u8; diff --git a/src/test/run-pass/newtype-struct-with-dtor.rs b/src/test/run-pass/newtype-struct-with-dtor.rs index ca79c304802bd..73b4f5146f4cf 100644 --- a/src/test/run-pass/newtype-struct-with-dtor.rs +++ b/src/test/run-pass/newtype-struct-with-dtor.rs @@ -8,8 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::libc::c_int; -use std::libc; +extern crate libc; +use libc::c_int; pub struct Fd(c_int); diff --git a/src/test/run-pass/osx-frameworks.rs b/src/test/run-pass/osx-frameworks.rs index 5e45386353b2b..aa4e91320f755 100644 --- a/src/test/run-pass/osx-frameworks.rs +++ b/src/test/run-pass/osx-frameworks.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::libc; +extern crate libc; #[cfg(target_os = "macos")] #[link(name = "CoreFoundation", kind = "framework")] diff --git a/src/test/run-pass/process-detach.rs b/src/test/run-pass/process-detach.rs index 3b80d9ce491cc..45445ed84f9ed 100644 --- a/src/test/run-pass/process-detach.rs +++ b/src/test/run-pass/process-detach.rs @@ -22,8 +22,8 @@ extern crate green; extern crate rustuv; +extern crate libc; -use std::libc; use std::io::process; use std::io::signal::{Listener, Interrupt}; diff --git a/src/test/run-pass/regions-mock-tcx.rs b/src/test/run-pass/regions-mock-tcx.rs index c38df0f7a225a..2c5245d5b3858 100644 --- a/src/test/run-pass/regions-mock-tcx.rs +++ b/src/test/run-pass/regions-mock-tcx.rs @@ -18,11 +18,11 @@ extern crate arena; extern crate collections; +extern crate libc; use arena::Arena; use collections::HashMap; use std::cast; -use std::libc; use std::mem; type Type<'tcx> = &'tcx TypeStructure<'tcx>; diff --git a/src/test/run-pass/regions-mock-trans.rs b/src/test/run-pass/regions-mock-trans.rs index 8cac6e8558f31..b0198d56e05a5 100644 --- a/src/test/run-pass/regions-mock-trans.rs +++ b/src/test/run-pass/regions-mock-trans.rs @@ -8,8 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +extern crate libc; use std::cast; -use std::libc; use std::mem; struct arena(()); diff --git a/src/test/run-pass/rename-directory.rs b/src/test/run-pass/rename-directory.rs index ef43dad2c68ea..2f059c3531d1e 100644 --- a/src/test/run-pass/rename-directory.rs +++ b/src/test/run-pass/rename-directory.rs @@ -13,9 +13,10 @@ // ignore-fast +extern crate libc; + use std::io::TempDir; use std::os; -use std::libc; use std::io; use std::io::fs; diff --git a/src/test/run-pass/static-mut-foreign.rs b/src/test/run-pass/static-mut-foreign.rs index 0afe01bf7edc8..4c88caa1d2c19 100644 --- a/src/test/run-pass/static-mut-foreign.rs +++ b/src/test/run-pass/static-mut-foreign.rs @@ -12,7 +12,7 @@ // statics cannot. This ensures that there's some form of error if this is // attempted. -use std::libc; +extern crate libc; #[link(name = "rustrt")] extern { diff --git a/src/test/run-pass/supported-cast.rs b/src/test/run-pass/supported-cast.rs index e3f2456c4c442..b87535713a76d 100644 --- a/src/test/run-pass/supported-cast.rs +++ b/src/test/run-pass/supported-cast.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::libc; +extern crate libc; pub fn main() { let f = 1 as *libc::FILE; diff --git a/src/test/run-pass/variadic-ffi.rs b/src/test/run-pass/variadic-ffi.rs index 9cb2f22d38e94..e8a293b3d12d9 100644 --- a/src/test/run-pass/variadic-ffi.rs +++ b/src/test/run-pass/variadic-ffi.rs @@ -8,8 +8,9 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +extern crate libc; use std::c_str::CString; -use std::libc::{c_char, c_int}; +use libc::{c_char, c_int}; extern { fn sprintf(s: *mut c_char, format: *c_char, ...) -> c_int; From c258f5c2493b91312546d169f8964e3d44ee84fa Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Mon, 10 Mar 2014 15:42:44 -0400 Subject: [PATCH 03/10] Add unrecognized_lint --- src/liblibc/lib.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/liblibc/lib.rs b/src/liblibc/lib.rs index 1dd4598bc8786..151ea34e41327 100644 --- a/src/liblibc/lib.rs +++ b/src/liblibc/lib.rs @@ -70,6 +70,9 @@ * one from Berkeley after the lawsuits died down and the CSRG dissolved. */ +// NOTE: remove after uppercase_variables is snapshotted +#[allow(unrecognized_lint)]; + #[allow(non_camel_case_types)]; #[allow(non_uppercase_statics)]; #[allow(missing_doc)]; From dad9656fea50081650c934d7f56ad0488942880c Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Thu, 13 Mar 2014 20:36:27 -0400 Subject: [PATCH 04/10] fix more fallout libc: remove stray impl in win32 --- src/doc/guide-ffi.md | 82 ------------------- src/doc/guide-unsafe.md | 3 +- src/libcollections/hashmap.rs | 3 +- src/liblibc/lib.rs | 20 +---- src/librustdoc/html/markdown.rs | 1 - src/libstd/os.rs | 6 +- src/test/run-pass/c-stack-returning-int64.rs | 2 + src/test/run-pass/foreign-fn-linkname.rs | 4 + src/test/run-pass/foreign-mod-unused-const.rs | 2 + src/test/run-pass/foreign2.rs | 2 + src/test/run-pass/issue-4735.rs | 2 + src/test/run-pass/newtype-struct-with-dtor.rs | 2 + src/test/run-pass/variadic-ffi.rs | 2 + 13 files changed, 25 insertions(+), 106 deletions(-) diff --git a/src/doc/guide-ffi.md b/src/doc/guide-ffi.md index 9355a4cf25830..449c3ca6941dc 100644 --- a/src/doc/guide-ffi.md +++ b/src/doc/guide-ffi.md @@ -172,88 +172,6 @@ Foreign libraries often hand off ownership of resources to the calling code. When this occurs, we must use Rust's destructors to provide safety and guarantee the release of these resources (especially in the case of failure). -As an example, we give a reimplementation of owned boxes by wrapping `malloc` -and `free`: - -~~~~ -extern crate libc; - -use std::cast; -use libc::{c_void, size_t, malloc, free}; -use std::mem; -use std::ptr; - -// Define a wrapper around the handle returned by the foreign code. -// Unique has the same semantics as ~T -pub struct Unique { - // It contains a single raw, mutable pointer to the object in question. - priv ptr: *mut T -} - -// Implement methods for creating and using the values in the box. -// NB: For simplicity and correctness, we require that T has kind Send -// (owned boxes relax this restriction, and can contain managed (GC) boxes). -// This is because, as implemented, the garbage collector would not know -// about any shared boxes stored in the malloc'd region of memory. -impl Unique { - pub fn new(value: T) -> Unique { - unsafe { - let ptr = malloc(std::mem::size_of::() as size_t) as *mut T; - assert!(!ptr.is_null()); - // `*ptr` is uninitialized, and `*ptr = value` would attempt to destroy it - // move_val_init moves a value into this memory without - // attempting to drop the original value. - mem::move_val_init(&mut *ptr, value); - Unique{ptr: ptr} - } - } - - // the 'r lifetime results in the same semantics as `&*x` with ~T - pub fn borrow<'r>(&'r self) -> &'r T { - unsafe { cast::copy_lifetime(self, &*self.ptr) } - } - - // the 'r lifetime results in the same semantics as `&mut *x` with ~T - pub fn borrow_mut<'r>(&'r mut self) -> &'r mut T { - unsafe { cast::copy_mut_lifetime(self, &mut *self.ptr) } - } -} - -// The key ingredient for safety, we associate a destructor with -// Unique, making the struct manage the raw pointer: when the -// struct goes out of scope, it will automatically free the raw pointer. -// NB: This is an unsafe destructor, because rustc will not normally -// allow destructors to be associated with parametrized types, due to -// bad interaction with managed boxes. (With the Send restriction, -// we don't have this problem.) -#[unsafe_destructor] -impl Drop for Unique { - fn drop(&mut self) { - unsafe { - let x = mem::uninit(); // dummy value to swap in - // We need to move the object out of the box, so that - // the destructor is called (at the end of this scope.) - ptr::replace(self.ptr, x); - free(self.ptr as *mut c_void) - } - } -} - -// A comparison between the built-in ~ and this reimplementation -fn main() { - { - let mut x = ~5; - *x = 10; - } // `x` is freed here - - { - let mut y = Unique::new(5); - *y.borrow_mut() = 10; - } // `y` is freed here -} -~~~~ - ->>>>>>> 854a01b... fix fallout from std::libc separation # Callbacks from C code to Rust functions Some external libraries require the usage of callbacks to report back their diff --git a/src/doc/guide-unsafe.md b/src/doc/guide-unsafe.md index 9835e50d54765..4c3955b73b75c 100644 --- a/src/doc/guide-unsafe.md +++ b/src/doc/guide-unsafe.md @@ -192,7 +192,8 @@ As an example, we give a reimplementation of owned boxes by wrapping reimplementation is as safe as the built-in `~` type. ``` -use std::libc::{c_void, size_t, malloc, free}; +extern crate libc; +use libc::{c_void, size_t, malloc, free}; use std::mem; use std::ptr; diff --git a/src/libcollections/hashmap.rs b/src/libcollections/hashmap.rs index b03cfced7cdbe..27a8e160edb1f 100644 --- a/src/libcollections/hashmap.rs +++ b/src/libcollections/hashmap.rs @@ -30,11 +30,12 @@ use std::result::{Ok, Err}; use std::slice::ImmutableVector; mod table { + extern crate libc; + use std::clone::Clone; use std::cmp::Eq; use std::hash::{Hash, Hasher}; use std::kinds::marker; - use std::libc; use std::num::CheckedMul; use std::option::{Option, Some, None}; use std::prelude::Drop; diff --git a/src/liblibc/lib.rs b/src/liblibc/lib.rs index 151ea34e41327..8087f2223b06a 100644 --- a/src/liblibc/lib.rs +++ b/src/liblibc/lib.rs @@ -79,7 +79,7 @@ #[allow(uppercase_variables)]; #[cfg(test)] extern crate std; -#[cfg(test)] extern crate extra; +#[cfg(test)] extern crate test; // for lang="start" #[cfg(test)] extern crate green; #[cfg(test)] extern crate rustuv; @@ -1102,24 +1102,6 @@ pub mod types { } pub type LPSYSTEM_INFO = *mut SYSTEM_INFO; - impl SYSTEM_INFO { - pub fn new() -> SYSTEM_INFO { - SYSTEM_INFO { - wProcessorArchitecture: 0, - wReserved: 0, - dwPageSize: 0, - lpMinimumApplicationAddress: ptr::mut_null(), - lpMaximumApplicationAddress: ptr::mut_null(), - dwActiveProcessorMask: 0, - dwNumberOfProcessors: 0, - dwProcessorType: 0, - dwAllocationGranularity: 0, - wProcessorLevel: 0, - wProcessorRevision: 0 - } - } - } - pub struct MEMORY_BASIC_INFORMATION { BaseAddress: LPVOID, AllocationBase: LPVOID, diff --git a/src/librustdoc/html/markdown.rs b/src/librustdoc/html/markdown.rs index 7cb43b9d470aa..84d474fe113a8 100644 --- a/src/librustdoc/html/markdown.rs +++ b/src/librustdoc/html/markdown.rs @@ -28,7 +28,6 @@ extern crate libc; -use libc; use std::cast; use std::fmt; use std::io; diff --git a/src/libstd/os.rs b/src/libstd/os.rs index eeebede6c5833..816b433848239 100644 --- a/src/libstd/os.rs +++ b/src/libstd/os.rs @@ -928,8 +928,9 @@ pub fn page_size() -> uint { /// Returns the page size of the current architecture in bytes. #[cfg(windows)] pub fn page_size() -> uint { + use mem; unsafe { - let mut info = libc::SYSTEM_INFO::new(); + let mut info = mem::uninit(); libc::GetSystemInfo(&mut info); return info.dwPageSize as uint; @@ -1246,8 +1247,9 @@ impl MemoryMap { /// Granularity of MapAddr() and MapOffset() parameter values. /// This may be greater than the value returned by page_size(). pub fn granularity() -> uint { + use mem; unsafe { - let mut info = libc::SYSTEM_INFO::new(); + let mut info = mem::uninit(); libc::GetSystemInfo(&mut info); return info.dwAllocationGranularity as uint; diff --git a/src/test/run-pass/c-stack-returning-int64.rs b/src/test/run-pass/c-stack-returning-int64.rs index efa744c340722..c02a24c3f0847 100644 --- a/src/test/run-pass/c-stack-returning-int64.rs +++ b/src/test/run-pass/c-stack-returning-int64.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// ignore-fast doesn't like extern crate + extern crate libc; mod mlibc { diff --git a/src/test/run-pass/foreign-fn-linkname.rs b/src/test/run-pass/foreign-fn-linkname.rs index 7ea7c0f4f4b61..e35aaaf7f76d8 100644 --- a/src/test/run-pass/foreign-fn-linkname.rs +++ b/src/test/run-pass/foreign-fn-linkname.rs @@ -8,6 +8,10 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// ignore-fast doesn't like extern crate + +extern crate libc; + mod mlibc { extern crate libc; use self::libc::{c_char, size_t}; diff --git a/src/test/run-pass/foreign-mod-unused-const.rs b/src/test/run-pass/foreign-mod-unused-const.rs index 8e4f90d53c3fe..e1ed0b8ea3b0c 100644 --- a/src/test/run-pass/foreign-mod-unused-const.rs +++ b/src/test/run-pass/foreign-mod-unused-const.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// ignore-fast doesn't like extern crate + extern crate libc; mod foo { diff --git a/src/test/run-pass/foreign2.rs b/src/test/run-pass/foreign2.rs index 4f05fbcb598c8..3c7e878c31890 100644 --- a/src/test/run-pass/foreign2.rs +++ b/src/test/run-pass/foreign2.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// ignore-fast doesn't like extern crate + extern crate libc; mod bar { diff --git a/src/test/run-pass/issue-4735.rs b/src/test/run-pass/issue-4735.rs index 2a5a739cef075..b23158522a308 100644 --- a/src/test/run-pass/issue-4735.rs +++ b/src/test/run-pass/issue-4735.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// ignore-fast doesn't like extern crate + extern crate libc; use std::cast::transmute; diff --git a/src/test/run-pass/newtype-struct-with-dtor.rs b/src/test/run-pass/newtype-struct-with-dtor.rs index 73b4f5146f4cf..8631755f37fd9 100644 --- a/src/test/run-pass/newtype-struct-with-dtor.rs +++ b/src/test/run-pass/newtype-struct-with-dtor.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// ignore-fast doesn't like extern crate + extern crate libc; use libc::c_int; diff --git a/src/test/run-pass/variadic-ffi.rs b/src/test/run-pass/variadic-ffi.rs index e8a293b3d12d9..903b76a29ceab 100644 --- a/src/test/run-pass/variadic-ffi.rs +++ b/src/test/run-pass/variadic-ffi.rs @@ -12,6 +12,8 @@ extern crate libc; use std::c_str::CString; use libc::{c_char, c_int}; +// ignore-fast doesn't like extern crate + extern { fn sprintf(s: *mut c_char, format: *c_char, ...) -> c_int; } From c6fb8c1003c8401d555c073bbc5dc14bfc455618 Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Mon, 17 Mar 2014 12:39:13 -0400 Subject: [PATCH 05/10] rand: fix libc fallout --- src/librand/os.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/librand/os.rs b/src/librand/os.rs index 0f4169bfe28cd..56c4103971aa7 100644 --- a/src/librand/os.rs +++ b/src/librand/os.rs @@ -59,9 +59,11 @@ mod imp { #[cfg(windows)] mod imp { + extern crate libc; + use Rng; use std::cast; - use std::libc::{c_ulong, DWORD, BYTE, LPCSTR, BOOL}; + use self::libc::{c_ulong, DWORD, BYTE, LPCSTR, BOOL}; use std::os; use std::rt::stack; From ca406fa64643e68adcb47b509b3152b99ccab72b Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Tue, 18 Mar 2014 11:18:58 -0400 Subject: [PATCH 06/10] libc: make windows happy --- src/liblibc/lib.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/liblibc/lib.rs b/src/liblibc/lib.rs index 8087f2223b06a..73f6c99d19df2 100644 --- a/src/liblibc/lib.rs +++ b/src/liblibc/lib.rs @@ -4270,3 +4270,5 @@ pub mod funcs { } } } + +#[test] fn work_on_windows() { } // this is needed to make rustc happy on windows From 8959aded2c5158792f03474d33f13e44266e4db7 Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Mon, 3 Mar 2014 12:27:51 -0500 Subject: [PATCH 07/10] Change how the readdir/opendir hack works --- src/liblibc/lib.rs | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/liblibc/lib.rs b/src/liblibc/lib.rs index 73f6c99d19df2..ef80bff76bf16 100644 --- a/src/liblibc/lib.rs +++ b/src/liblibc/lib.rs @@ -3663,18 +3663,12 @@ pub mod funcs { // opendir$INODE64, etc. but for some reason rustc // doesn't link it correctly on i686, so we're going // through a C function that mysteriously does work. - pub unsafe fn opendir(dirname: *c_char) -> *DIR { - rust_opendir(dirname) - } - pub unsafe fn readdir_r(dirp: *DIR, - entry: *mut dirent_t, - result: *mut *mut dirent_t) -> c_int { - rust_readdir_r(dirp, entry, result) - } extern { - fn rust_opendir(dirname: *c_char) -> *DIR; - fn rust_readdir_r(dirp: *DIR, entry: *mut dirent_t, + #[link_name="rust_opendir"] + pub fn opendir(dirname: *c_char) -> *DIR; + #[link_name="rust_readdir_r"] + pub fn readdir_r(dirp: *DIR, entry: *mut dirent_t, result: *mut *mut dirent_t) -> c_int; } @@ -4271,4 +4265,4 @@ pub mod funcs { } } -#[test] fn work_on_windows() { } // this is needed to make rustc happy on windows +#[test] fn work_on_windows() { } // FIXME #10872 needed for a happy windows From 97063727d791fc75c4704e5838a1b7513691031f Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Wed, 19 Mar 2014 15:57:07 -0400 Subject: [PATCH 08/10] ever more fallout --- src/liblibc/lib.rs | 1 - src/librustdoc/flock.rs | 11 ++++++----- src/librustdoc/html/markdown.rs | 3 +-- src/librustdoc/lib.rs | 1 + src/test/run-pass/tcp-stress.rs | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/liblibc/lib.rs b/src/liblibc/lib.rs index ef80bff76bf16..128be93a87598 100644 --- a/src/liblibc/lib.rs +++ b/src/liblibc/lib.rs @@ -997,7 +997,6 @@ pub mod types { pub mod bsd44 { } pub mod extra { - use ptr; use consts::os::extra::{MAX_PROTOCOL_CHAIN, WSAPROTOCOL_LEN}; use types::common::c95::c_void; diff --git a/src/librustdoc/flock.rs b/src/librustdoc/flock.rs index c1e5d66b1d214..b18640f3c53a0 100644 --- a/src/librustdoc/flock.rs +++ b/src/librustdoc/flock.rs @@ -18,13 +18,14 @@ pub use self::imp::Lock; + #[cfg(unix)] mod imp { - use std::libc; + use libc; #[cfg(target_os = "linux")] mod os { - use std::libc; + use libc; pub struct flock { l_type: libc::c_short, @@ -45,7 +46,7 @@ mod imp { #[cfg(target_os = "freebsd")] mod os { - use std::libc; + use libc; pub struct flock { l_start: libc::off_t, @@ -64,7 +65,7 @@ mod imp { #[cfg(target_os = "macos")] mod os { - use std::libc; + use libc; pub struct flock { l_start: libc::off_t, @@ -132,7 +133,7 @@ mod imp { #[cfg(windows)] mod imp { - use std::libc; + use libc; use std::mem; use std::os::win32::as_utf16_p; use std::os; diff --git a/src/librustdoc/html/markdown.rs b/src/librustdoc/html/markdown.rs index 84d474fe113a8..f6e57d442b7dc 100644 --- a/src/librustdoc/html/markdown.rs +++ b/src/librustdoc/html/markdown.rs @@ -26,8 +26,7 @@ #[allow(non_camel_case_types)]; -extern crate libc; - +use libc; use std::cast; use std::fmt; use std::io; diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs index 6fcd1f83cf41c..d8a1cf62f33d9 100644 --- a/src/librustdoc/lib.rs +++ b/src/librustdoc/lib.rs @@ -26,6 +26,7 @@ extern crate testing = "test"; extern crate time; #[phase(syntax, link)] extern crate log; +extern crate libc; use std::local_data; use std::io; diff --git a/src/test/run-pass/tcp-stress.rs b/src/test/run-pass/tcp-stress.rs index 61478e3fdb49a..73a24ee43e688 100644 --- a/src/test/run-pass/tcp-stress.rs +++ b/src/test/run-pass/tcp-stress.rs @@ -16,8 +16,8 @@ #[feature(phase)]; #[phase(syntax, link)] extern crate log; +extern crate libc; -use std::libc; use std::io::net::ip::{Ipv4Addr, SocketAddr}; use std::io::net::tcp::{TcpListener, TcpStream}; use std::io::{Acceptor, Listener}; From 9ed82c72cadca269d8ec3fa15513cb5593a8a38e Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Thu, 20 Mar 2014 02:55:16 -0400 Subject: [PATCH 09/10] libc: link to libc and libm --- src/liblibc/lib.rs | 5 +++++ src/librustc/middle/trans/context.rs | 1 - src/libstd/rtdeps.rs | 4 ---- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/liblibc/lib.rs b/src/liblibc/lib.rs index 128be93a87598..b096c309dde6c 100644 --- a/src/liblibc/lib.rs +++ b/src/liblibc/lib.rs @@ -197,6 +197,11 @@ pub use funcs::posix88::unistd::{execv, execve, execvp, getcwd}; pub use funcs::posix88::unistd::{getpid, isatty, lseek, pipe, read}; pub use funcs::posix88::unistd::{rmdir, unlink, write}; +#[cfg(not(windows))] +#[link(name = "c")] +#[link(name = "m")] +extern {} + /// A wrapper for a nullable pointer. Don't use this except for interacting /// with libc. Basically Option, but without the dependance on libstd. // If/when libprim happens, this can be removed in favor of that diff --git a/src/librustc/middle/trans/context.rs b/src/librustc/middle/trans/context.rs index d03409b52e3b5..69dfc0b89a9bb 100644 --- a/src/librustc/middle/trans/context.rs +++ b/src/librustc/middle/trans/context.rs @@ -29,7 +29,6 @@ use util::sha2::Sha256; use util::nodemap::{NodeMap, NodeSet, DefIdMap}; use libc::c_uint; -use collections::{HashMap, HashSet}; use std::cell::{Cell, RefCell}; use std::c_str::ToCStr; use std::ptr; diff --git a/src/libstd/rtdeps.rs b/src/libstd/rtdeps.rs index 65824b8f79f83..4c2f0e89dcf77 100644 --- a/src/libstd/rtdeps.rs +++ b/src/libstd/rtdeps.rs @@ -22,17 +22,13 @@ extern {} // On linux librt and libdl are indirect dependencies via rustrt, // and binutils 2.22+ won't add them automatically #[cfg(target_os = "linux")] -#[link(name = "c")] #[link(name = "dl")] -#[link(name = "m")] #[link(name = "pthread")] extern {} #[cfg(target_os = "android")] #[link(name = "dl")] #[link(name = "log")] -#[link(name = "m")] -#[link(name = "c")] extern {} #[cfg(target_os = "freebsd")] From f64fdf524a434f0e5cd0bc91d09c144723f3c90d Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Sat, 22 Mar 2014 11:48:18 -0400 Subject: [PATCH 10/10] switch to native for start lang item --- src/liblibc/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/liblibc/lib.rs b/src/liblibc/lib.rs index b096c309dde6c..a5799395c7c48 100644 --- a/src/liblibc/lib.rs +++ b/src/liblibc/lib.rs @@ -81,7 +81,7 @@ #[cfg(test)] extern crate std; #[cfg(test)] extern crate test; // for lang="start" -#[cfg(test)] extern crate green; +#[cfg(test)] extern crate native; #[cfg(test)] extern crate rustuv; // Initial glob-exports mean that all the contents of all the modules