]>
git.proxmox.com Git - rustc.git/blob - src/vendor/libc/src/lib.rs
1 // Copyright 2012-2015 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
13 #![allow(bad_style, overflowing_literals, improper_ctypes)]
14 #![crate_type = "rlib"]
15 #![crate_name = "libc"]
16 #![cfg_attr(dox, feature(no_core, lang_items))]
17 #![cfg_attr(dox, no_core)]
18 #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
19 html_favicon_url
= "https://doc.rust-lang.org/favicon.ico")]
21 #![cfg_attr(all(target_os = "linux", target_arch = "x86_64"), doc(
22 html_root_url
= "https://doc.rust-lang.org/libc/x86_64-unknown-linux-gnu"
24 #![cfg_attr(all(target_os = "linux", target_arch = "x86"), doc(
25 html_root_url
= "https://doc.rust-lang.org/libc/i686-unknown-linux-gnu"
27 #![cfg_attr(all(target_os = "linux", target_arch = "arm"), doc(
28 html_root_url
= "https://doc.rust-lang.org/libc/arm-unknown-linux-gnueabihf"
30 #![cfg_attr(all(target_os = "linux", target_arch = "mips"), doc(
31 html_root_url
= "https://doc.rust-lang.org/libc/mips-unknown-linux-gnu"
33 #![cfg_attr(all(target_os = "linux", target_arch = "aarch64"), doc(
34 html_root_url
= "https://doc.rust-lang.org/libc/aarch64-unknown-linux-gnu"
36 #![cfg_attr(all(target_os = "linux", target_env = "musl"), doc(
37 html_root_url
= "https://doc.rust-lang.org/libc/x86_64-unknown-linux-musl"
39 #![cfg_attr(all(target_os = "macos", target_arch = "x86_64"), doc(
40 html_root_url
= "https://doc.rust-lang.org/libc/x86_64-apple-darwin"
42 #![cfg_attr(all(target_os = "macos", target_arch = "x86"), doc(
43 html_root_url
= "https://doc.rust-lang.org/libc/i686-apple-darwin"
45 #![cfg_attr(all(windows, target_arch = "x86_64", target_env = "gnu"), doc(
46 html_root_url
= "https://doc.rust-lang.org/libc/x86_64-pc-windows-gnu"
48 #![cfg_attr(all(windows, target_arch = "x86", target_env = "gnu"), doc(
49 html_root_url
= "https://doc.rust-lang.org/libc/i686-pc-windows-gnu"
51 #![cfg_attr(all(windows, target_arch = "x86_64", target_env = "msvc"), doc(
52 html_root_url
= "https://doc.rust-lang.org/libc/x86_64-pc-windows-msvc"
54 #![cfg_attr(all(windows, target_arch = "x86", target_env = "msvc"), doc(
55 html_root_url
= "https://doc.rust-lang.org/libc/i686-pc-windows-msvc"
57 #![cfg_attr(target_os = "android", doc(
58 html_root_url
= "https://doc.rust-lang.org/libc/arm-linux-androideabi"
60 #![cfg_attr(target_os = "freebsd", doc(
61 html_root_url
= "https://doc.rust-lang.org/libc/x86_64-unknown-freebsd"
63 #![cfg_attr(target_os = "openbsd", doc(
64 html_root_url
= "https://doc.rust-lang.org/libc/x86_64-unknown-openbsd"
66 #![cfg_attr(target_os = "bitrig", doc(
67 html_root_url
= "https://doc.rust-lang.org/libc/x86_64-unknown-bitrig"
69 #![cfg_attr(target_os = "netbsd", doc(
70 html_root_url
= "https://doc.rust-lang.org/libc/x86_64-unknown-netbsd"
72 #![cfg_attr(target_os = "dragonfly", doc(
73 html_root_url
= "https://doc.rust-lang.org/libc/x86_64-unknown-dragonfly"
76 // Attributes needed when building as part of the standard library
77 #![cfg_attr(stdbuild, feature(no_std, core, core_slice_ext, staged_api, custom_attribute, cfg_target_vendor))]
78 #![cfg_attr(stdbuild, feature(link_cfg))]
79 #![cfg_attr(stdbuild, no_std)]
80 #![cfg_attr(stdbuild, staged_api)]
81 #![cfg_attr(stdbuild, allow(warnings))]
82 #![cfg_attr(stdbuild, unstable(feature = "libc",
83 reason
= "use `libc` from crates.io",
86 #![cfg_attr(not(feature = "use_std"), no_std)]
88 #[cfg(all(not(stdbuild), not(dox), feature = "use_std"))]
89 extern crate std
as core
;
91 #[macro_use] mod macros;
94 // Use repr(u8) as LLVM expects `void*` to be the same as `i8*` to help enable
95 // more optimization opportunities around it recognizing things like
99 // Two dummy variants so the #[repr] attribute can be used.
106 pub type int8_t
= i8;
107 pub type int16_t
= i16;
108 pub type int32_t
= i32;
109 pub type int64_t
= i64;
110 pub type uint8_t
= u8;
111 pub type uint16_t
= u16;
112 pub type uint32_t
= u32;
113 pub type uint64_t
= u64;
115 pub type c_schar
= i8;
116 pub type c_uchar
= u8;
117 pub type c_short
= i16;
118 pub type c_ushort
= u16;
119 pub type c_int
= i32;
120 pub type c_uint
= u32;
121 pub type c_float
= f32;
122 pub type c_double
= f64;
123 pub type c_longlong
= i64;
124 pub type c_ulonglong
= u64;
125 pub type intmax_t
= i64;
126 pub type uintmax_t
= u64;
128 pub type size_t
= usize;
129 pub type ptrdiff_t
= isize;
130 pub type intptr_t
= isize;
131 pub type uintptr_t
= usize;
132 pub type ssize_t
= isize;
135 pub enum fpos_t {}
// TODO: fill this out with a struct
138 pub fn isalnum(c
: c_int
) -> c_int
;
139 pub fn isalpha(c
: c_int
) -> c_int
;
140 pub fn iscntrl(c
: c_int
) -> c_int
;
141 pub fn isdigit(c
: c_int
) -> c_int
;
142 pub fn isgraph(c
: c_int
) -> c_int
;
143 pub fn islower(c
: c_int
) -> c_int
;
144 pub fn isprint(c
: c_int
) -> c_int
;
145 pub fn ispunct(c
: c_int
) -> c_int
;
146 pub fn isspace(c
: c_int
) -> c_int
;
147 pub fn isupper(c
: c_int
) -> c_int
;
148 pub fn isxdigit(c
: c_int
) -> c_int
;
149 pub fn tolower(c
: c_int
) -> c_int
;
150 pub fn toupper(c
: c_int
) -> c_int
;
152 #[cfg_attr(all(target_os = "macos", target_arch = "x86"),
153 link_name
= "fopen$UNIX2003")]
154 pub fn fopen(filename
: *const c_char
,
155 mode
: *const c_char
) -> *mut FILE
;
156 #[cfg_attr(all(target_os = "macos", target_arch = "x86"),
157 link_name
= "freopen$UNIX2003")]
158 pub fn freopen(filename
: *const c_char
, mode
: *const c_char
,
159 file
: *mut FILE
) -> *mut FILE
;
160 pub fn fflush(file
: *mut FILE
) -> c_int
;
161 pub fn fclose(file
: *mut FILE
) -> c_int
;
162 pub fn remove(filename
: *const c_char
) -> c_int
;
163 pub fn rename(oldname
: *const c_char
, newname
: *const c_char
) -> c_int
;
164 pub fn tmpfile() -> *mut FILE
;
165 pub fn setvbuf(stream
: *mut FILE
,
168 size
: size_t
) -> c_int
;
169 pub fn setbuf(stream
: *mut FILE
, buf
: *mut c_char
);
170 pub fn getchar() -> c_int
;
171 pub fn putchar(c
: c_int
) -> c_int
;
172 pub fn fgetc(stream
: *mut FILE
) -> c_int
;
173 pub fn fgets(buf
: *mut c_char
, n
: c_int
, stream
: *mut FILE
) -> *mut c_char
;
174 pub fn fputc(c
: c_int
, stream
: *mut FILE
) -> c_int
;
175 #[cfg_attr(all(target_os = "macos", target_arch = "x86"),
176 link_name
= "fputs$UNIX2003")]
177 pub fn fputs(s
: *const c_char
, stream
: *mut FILE
)-> c_int
;
178 pub fn puts(s
: *const c_char
) -> c_int
;
179 pub fn ungetc(c
: c_int
, stream
: *mut FILE
) -> c_int
;
180 pub fn fread(ptr
: *mut c_void
,
185 #[cfg_attr(all(target_os = "macos", target_arch = "x86"),
186 link_name
= "fwrite$UNIX2003")]
187 pub fn fwrite(ptr
: *const c_void
,
192 pub fn fseek(stream
: *mut FILE
, offset
: c_long
, whence
: c_int
) -> c_int
;
193 pub fn ftell(stream
: *mut FILE
) -> c_long
;
194 pub fn rewind(stream
: *mut FILE
);
195 #[cfg_attr(target_os = "netbsd", link_name = "__fgetpos50")]
196 pub fn fgetpos(stream
: *mut FILE
, ptr
: *mut fpos_t
) -> c_int
;
197 #[cfg_attr(target_os = "netbsd", link_name = "__fsetpos50")]
198 pub fn fsetpos(stream
: *mut FILE
, ptr
: *const fpos_t
) -> c_int
;
199 pub fn feof(stream
: *mut FILE
) -> c_int
;
200 pub fn ferror(stream
: *mut FILE
) -> c_int
;
201 pub fn perror(s
: *const c_char
);
202 pub fn atoi(s
: *const c_char
) -> c_int
;
203 #[cfg_attr(all(target_os = "macos", target_arch = "x86"),
204 link_name
= "strtod$UNIX2003")]
205 pub fn strtod(s
: *const c_char
, endp
: *mut *mut c_char
) -> c_double
;
206 pub fn strtol(s
: *const c_char
,
207 endp
: *mut *mut c_char
, base
: c_int
) -> c_long
;
208 pub fn strtoul(s
: *const c_char
, endp
: *mut *mut c_char
,
209 base
: c_int
) -> c_ulong
;
210 pub fn calloc(nobj
: size_t
, size
: size_t
) -> *mut c_void
;
211 pub fn malloc(size
: size_t
) -> *mut c_void
;
212 pub fn realloc(p
: *mut c_void
, size
: size_t
) -> *mut c_void
;
213 pub fn free(p
: *mut c_void
);
215 pub fn exit(status
: c_int
) -> !;
216 pub fn _exit(status
: c_int
) -> !;
217 pub fn atexit(cb
: extern fn()) -> c_int
;
218 #[cfg_attr(all(target_os = "macos", target_arch = "x86"),
219 link_name
= "system$UNIX2003")]
220 pub fn system(s
: *const c_char
) -> c_int
;
221 pub fn getenv(s
: *const c_char
) -> *mut c_char
;
223 pub fn strcpy(dst
: *mut c_char
, src
: *const c_char
) -> *mut c_char
;
224 pub fn strncpy(dst
: *mut c_char
, src
: *const c_char
, n
: size_t
)
226 pub fn strcat(s
: *mut c_char
, ct
: *const c_char
) -> *mut c_char
;
227 pub fn strncat(s
: *mut c_char
, ct
: *const c_char
, n
: size_t
) -> *mut c_char
;
228 pub fn strcmp(cs
: *const c_char
, ct
: *const c_char
) -> c_int
;
229 pub fn strncmp(cs
: *const c_char
, ct
: *const c_char
, n
: size_t
) -> c_int
;
230 pub fn strcoll(cs
: *const c_char
, ct
: *const c_char
) -> c_int
;
231 pub fn strchr(cs
: *const c_char
, c
: c_int
) -> *mut c_char
;
232 pub fn strrchr(cs
: *const c_char
, c
: c_int
) -> *mut c_char
;
233 pub fn strspn(cs
: *const c_char
, ct
: *const c_char
) -> size_t
;
234 pub fn strcspn(cs
: *const c_char
, ct
: *const c_char
) -> size_t
;
235 pub fn strdup(cs
: *const c_char
) -> *mut c_char
;
236 pub fn strpbrk(cs
: *const c_char
, ct
: *const c_char
) -> *mut c_char
;
237 pub fn strstr(cs
: *const c_char
, ct
: *const c_char
) -> *mut c_char
;
238 pub fn strlen(cs
: *const c_char
) -> size_t
;
239 pub fn strnlen(cs
: *const c_char
, maxlen
: size_t
) -> size_t
;
240 #[cfg_attr(all(target_os = "macos", target_arch = "x86"),
241 link_name
= "strerror$UNIX2003")]
242 pub fn strerror(n
: c_int
) -> *mut c_char
;
243 pub fn strtok(s
: *mut c_char
, t
: *const c_char
) -> *mut c_char
;
244 pub fn strxfrm(s
: *mut c_char
, ct
: *const c_char
, n
: size_t
) -> size_t
;
245 pub fn wcslen(buf
: *const wchar_t
) -> size_t
;
246 pub fn wcstombs(dest
: *mut c_char
, src
: *const wchar_t
, n
: size_t
) -> ::size_t
;
248 pub fn memchr(cx
: *const c_void
, c
: c_int
, n
: size_t
) -> *mut c_void
;
249 pub fn memcmp(cx
: *const c_void
, ct
: *const c_void
, n
: size_t
) -> c_int
;
250 pub fn memcpy(dest
: *mut c_void
, src
: *const c_void
, n
: size_t
) -> *mut c_void
;
251 pub fn memmove(dest
: *mut c_void
, src
: *const c_void
, n
: size_t
) -> *mut c_void
;
252 pub fn memset(dest
: *mut c_void
, c
: c_int
, n
: size_t
) -> *mut c_void
;
255 // These are all inline functions on android, so they end up just being entirely
256 // missing on that platform.
257 #[cfg(not(target_os = "android"))]
259 pub fn abs(i
: c_int
) -> c_int
;
260 pub fn atof(s
: *const c_char
) -> c_double
;
261 pub fn labs(i
: c_long
) -> c_long
;
262 pub fn rand() -> c_int
;
263 pub fn srand(seed
: c_uint
);
270 } else if #[cfg(target_os = "redox")] {
273 } else if #[cfg(unix)] {
277 // Unknown target_family