auto merge of #13315 : alexcrichton/rust/libc, r=alexcrichton,me

Rebasing of #12526 with a very obscure bug fixed on windows.
This commit is contained in:
bors 2014-04-06 02:56:39 -07:00
commit f1f50565a1
124 changed files with 612 additions and 511 deletions

View file

@ -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

View file

@ -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 {
@ -402,7 +404,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 +422,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 +446,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

View file

@ -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;

View file

@ -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)

View file

@ -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,

View file

@ -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]'

View file

@ -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;

View file

@ -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};
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,

View file

@ -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;

View file

@ -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 {

View file

@ -976,7 +976,7 @@ fn new_sched_rng() -> XorShiftRng {
}
#[cfg(unix)]
fn new_sched_rng() -> XorShiftRng {
use std::libc;
use libc;
use std::mem;
use rand::SeedableRng;

View file

@ -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 {

File diff suppressed because it is too large Load diff

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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,

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;
@ -223,20 +223,20 @@ fn spawn_process_os(config: p::ProcessConfig,
dir: Option<&Path>,
in_fd: c_int, out_fd: c_int,
err_fd: c_int) -> IoResult<SpawnProcessResult> {
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;
@ -422,9 +422,9 @@ fn spawn_process_os(config: p::ProcessConfig,
dir: Option<&Path>,
in_fd: c_int, out_fd: c_int,
err_fd: c_int) -> IoResult<SpawnProcessResult> {
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 {
@ -716,8 +716,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,
@ -725,7 +725,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,
@ -761,7 +761,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;
let mut status = 0 as c_int;
match retry(|| unsafe { wait::waitpid(pid, &mut status, 0) }) {
-1 => fail!("unknown waitpid error: {}", super::last_error()),
@ -779,7 +779,7 @@ fn waitpid_nowait(pid: pid_t) -> Option<p::ProcessExit> {
#[cfg(unix)]
fn waitpid_os(pid: pid_t) -> Option<p::ProcessExit> {
use std::libc::funcs::posix01::wait;
use libc::funcs::posix01::wait;
let mut status = 0 as c_int;
match retry(|| unsafe {
wait::waitpid(pid, &mut status, libc::WNOHANG)

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;
@ -107,8 +109,8 @@ pub fn start(argc: int, argv: **u8, main: proc()) -> int {
// prevent this problem.
#[cfg(windows)] fn ignore_sigpipe() {}
#[cfg(unix)] fn ignore_sigpipe() {
use std::libc;
use std::libc::funcs::posix01::signal::signal;
use libc;
use libc::funcs::posix01::signal::signal;
unsafe {
assert!(signal(libc::SIGPIPE, libc::SIG_IGN) != -1);
}

View file

@ -58,12 +58,14 @@ mod imp {
#[cfg(windows)]
mod imp {
extern crate libc;
use Rng;
use std::cast;
use std::io::{IoResult, IoError};
use std::libc::{c_ulong, DWORD, BYTE, LPCSTR, BOOL};
use std::os;
use std::rt::stack;
use self::libc::{c_ulong, DWORD, BYTE, LPCSTR, BOOL};
type HCRYPTPROV = c_ulong;

View file

@ -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;

View file

@ -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
@ -1127,6 +1127,33 @@ fn link_args(sess: &Session,
// DWARF stack unwinding will not work.
// This behavior may be overridden by --link-args "-static-libgcc"
args.push(~"-shared-libgcc");
// And here, we see obscure linker flags #45. On windows, it has been
// found to be necessary to have this flag to compile liblibc.
//
// First a bit of background. On Windows, the file format is not ELF,
// but COFF (at least according to LLVM). COFF doesn't officially allow
// for section names over 8 characters, apparently. Our metadata
// section, ".note.rustc", you'll note is over 8 characters.
//
// On more recent versions of gcc on mingw, apparently the section name
// is *not* truncated, but rather stored elsewhere in a separate lookup
// table. On older versions of gcc, they apparently always truncated the
// section names (at least in some cases). Truncating the section name
// actually creates "invalid" objects [1] [2], but only for some
// introspection tools, not in terms of whether it can be loaded.
//
// Long story shory, passing this flag forces the linker to *not*
// truncate section names (so we can find the metadata section after
// it's compiled). The real kicker is that rust compiled just fine on
// windows for quite a long time *without* this flag, so I have no idea
// why it suddenly started failing for liblibc. Regardless, we
// definitely don't want section name truncation, so we're keeping this
// flag for windows.
//
// [1] - https://sourceware.org/bugzilla/show_bug.cgi?id=13130
// [2] - https://code.google.com/p/go/issues/detail?id=2139
args.push(~"-Wl,--enable-long-section-names");
}
if sess.targ_cfg.os == abi::OsAndroid {

View file

@ -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,

View file

@ -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;

View file

@ -15,7 +15,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;
@ -307,7 +307,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

View file

@ -34,7 +34,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;

View file

@ -154,7 +154,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
}),

View file

@ -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};

View file

@ -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_util::{local_def, is_local};

View file

@ -21,7 +21,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());

View file

@ -19,9 +19,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> {

View file

@ -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;

View file

@ -31,9 +31,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};

View file

@ -33,9 +33,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 syntax::{ast, ast_util};
pub fn const_lit(cx: &CrateContext, e: &ast::Expr, lit: ast::Lit)

View file

@ -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;

View file

@ -26,7 +26,7 @@ use middle::trans::type_of;
use middle::ty::FnSig;
use middle::ty;
use std::cmp;
use std::libc::c_uint;
use libc::c_uint;
use syntax::abi::{Cdecl, Aapcs, C, Win64, Abi};
use syntax::abi::{RustIntrinsic, Rust, Stdcall, Fastcall, System};
use syntax::codemap::Span;

View file

@ -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;

View file

@ -26,7 +26,7 @@ use middle::ty;
use util::ppaux::ty_to_str;
use arena::TypedArena;
use std::libc::c_uint;
use libc::c_uint;
use syntax::ast::DefId;
use syntax::ast;
use syntax::ast_map;

View file

@ -21,7 +21,7 @@ use syntax::abi::{X86, X86_64, Arm, Mips};
use std::c_str::ToCStr;
use std::cast;
use std::libc::{c_uint};
use libc::{c_uint};
#[deriving(Clone, Eq, Show)]
pub struct Type {

View file

@ -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(pub ValueRef);

View file

@ -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 {
pub 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 {
pub 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 {
pub 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;

View file

@ -26,10 +26,10 @@
#![allow(non_camel_case_types)]
use libc;
use std::cast;
use std::fmt;
use std::io;
use std::libc;
use std::local_data;
use std::mem;
use std::str;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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<u64, IoError> {
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<u64, IoError> {
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;

View file

@ -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};

View file

@ -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;

View file

@ -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 {

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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!";
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); }
});
// 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); }
});
// 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

View file

@ -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<PipeStream> {
LocalIo::maybe_raise(|io| {

View file

@ -71,6 +71,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;
@ -174,8 +177,6 @@ pub mod sync;
/* Runtime and platform support */
#[unstable]
pub mod libc;
pub mod c_str;
pub mod c_vec;
pub mod os;

View file

@ -932,8 +932,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;
@ -1250,8 +1251,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;

View file

@ -22,23 +22,18 @@ 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")]
#[link(name = "execinfo")]
#[link(name = "pthread")]
#[link(name = "m")]
extern {}
#[cfg(target_os = "macos")]

View file

@ -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;

View file

@ -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.

View file

@ -10,7 +10,7 @@
#[crate_id="anonexternmod#0.1"];
use std::libc;
extern crate libc;
#[link(name="rustrt")]
extern {

View file

@ -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 {

View file

@ -11,7 +11,7 @@
#[crate_id="foreign_lib"];
pub mod rustrt {
use std::libc;
extern crate libc;
#[link(name = "rustrt")]
extern {

View file

@ -12,7 +12,7 @@
#[crate_type = "lib"];
pub mod socket {
use std::libc;
extern crate libc;
pub struct socket_handle {
sockfd: libc::c_int,

View file

@ -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;

View file

@ -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;

View file

@ -10,7 +10,7 @@
#![deny(ctypes)]
use std::libc;
extern crate libc;
extern {
pub fn bare_type1(size: int); //~ ERROR: found rust type

View file

@ -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 {}

View file

@ -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<int> = &vec!(1,2,3);

View file

@ -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;

View file

@ -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.

View file

@ -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)

View file

@ -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;

View file

@ -4,6 +4,9 @@ ifneq ($(shell uname),Darwin)
EXTRAFLAGS := -lm -lrt -ldl -lpthread
endif
# Apparently older versions of GCC segfault if -g is passed...
CC := $(CC:-g=)
all:
$(RUSTC) foo.rs -Z lto
ln -s $(call STATICLIB,foo-*) $(call STATICLIB,foo)

View file

@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#[crate_type = "staticlib"];
#![crate_type = "staticlib"]
#[no_mangle]
pub extern "C" fn foo() {}

View file

@ -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 {

View file

@ -9,7 +9,7 @@
// except according to those terms.
mod rustrt {
use std::libc;
extern crate libc;
#[link(name = "rustrt")]
extern {

View file

@ -8,8 +8,12 @@
// 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};
// ignore-fast doesn't like extern crate
extern crate libc;
mod mlibc {
use libc::{c_char, c_long, c_longlong};
extern {
pub fn atol(x: *c_char) -> c_long;
@ -18,11 +22,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() {

View file

@ -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() {}

View file

@ -17,6 +17,7 @@
// instead of in std.
#[feature(macro_rules)];
extern crate libc;
extern crate native;
extern crate green;
@ -34,7 +35,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;
@ -87,7 +88,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"))]

View file

@ -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 {

View file

@ -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 {

View file

@ -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 {

View file

@ -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 {

View file

@ -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 {

View file

@ -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 {

View file

@ -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")]

Some files were not shown because too many files have changed in this diff Show more