]>
Commit | Line | Data |
---|---|---|
ea8adc8c XL |
1 | //! Definitions for uclibc on 64bit systems |
2 | //! | |
041b39d2 XL |
3 | pub type blkcnt_t = i64; |
4 | pub type blksize_t = i64; | |
5 | pub type clock_t = i64; | |
6 | pub type c_char = u8; | |
7 | pub type c_long = i64; | |
8 | pub type c_ulong = u64; | |
9 | pub type fsblkcnt_t = ::c_ulong; | |
10 | pub type fsfilcnt_t = ::c_ulong; | |
11 | pub type fsword_t = ::c_long; | |
12 | pub type ino_t = ::c_ulong; | |
13 | pub type nlink_t = ::c_uint; | |
14 | pub type off_t = ::c_long; | |
15 | pub type rlim_t = c_ulong; | |
16 | pub type rlim64_t = u64; | |
ea8adc8c XL |
17 | // [uClibc docs] Note stat64 has the same shape as stat for x86-64. |
18 | pub type stat64 = stat; | |
041b39d2 XL |
19 | pub type suseconds_t = ::c_long; |
20 | pub type time_t = ::c_int; | |
21 | pub type wchar_t = ::c_int; | |
22 | ||
041b39d2 XL |
23 | pub type nfds_t = ::c_ulong; |
24 | ||
25 | s! { | |
ea8adc8c XL |
26 | pub struct dirent { |
27 | pub d_ino: ::ino64_t, | |
28 | pub d_off: ::off64_t, | |
29 | pub d_reclen: u16, | |
30 | pub d_type: u8, | |
31 | pub d_name: [::c_char; 256], | |
32 | } | |
33 | ||
34 | pub struct dirent64 { | |
35 | pub d_ino: ::ino64_t, | |
36 | pub d_off: ::off64_t, | |
37 | pub d_reclen: u16, | |
38 | pub d_type: u8, | |
39 | pub d_name: [::c_char; 256], | |
40 | } | |
41 | ||
041b39d2 XL |
42 | pub struct ipc_perm { |
43 | pub __key: ::key_t, | |
44 | pub uid: ::uid_t, | |
45 | pub gid: ::gid_t, | |
46 | pub cuid: ::uid_t, | |
47 | pub cgid: ::gid_t, | |
48 | pub mode: ::c_ushort, // read / write | |
49 | __pad1: ::c_ushort, | |
50 | pub __seq: ::c_ushort, | |
51 | __pad2: ::c_ushort, | |
52 | __unused1: ::c_ulong, | |
53 | __unused2: ::c_ulong | |
54 | } | |
55 | ||
ea8adc8c XL |
56 | #[cfg(not(target_os = "l4re"))] |
57 | pub struct pthread_attr_t { | |
58 | __detachstate: ::c_int, | |
59 | __schedpolicy: ::c_int, | |
60 | __schedparam: __sched_param, | |
61 | __inheritsched: ::c_int, | |
62 | __scope: ::c_int, | |
63 | __guardsize: ::size_t, | |
64 | __stackaddr_set: ::c_int, | |
65 | __stackaddr: *mut ::c_void, // better don't use it | |
66 | __stacksize: ::size_t, | |
67 | } | |
68 | ||
69 | pub struct __sched_param { | |
70 | __sched_priority: ::c_int, | |
71 | } | |
72 | ||
041b39d2 XL |
73 | pub struct siginfo_t { |
74 | si_signo: ::c_int, // signal number | |
75 | si_errno: ::c_int, // if not zero: error value of signal, see errno.h | |
76 | si_code: ::c_int, // signal code | |
77 | pub _pad: [::c_int; 28], // unported union | |
78 | _align: [usize; 0], | |
79 | } | |
80 | ||
81 | pub struct shmid_ds { | |
82 | pub shm_perm: ::ipc_perm, | |
83 | pub shm_segsz: ::size_t, // segment size in bytes | |
84 | pub shm_atime: ::time_t, // time of last shmat() | |
85 | pub shm_dtime: ::time_t, | |
86 | pub shm_ctime: ::time_t, | |
87 | pub shm_cpid: ::pid_t, | |
88 | pub shm_lpid: ::pid_t, | |
89 | pub shm_nattch: ::shmatt_t, | |
90 | __unused1: ::c_ulong, | |
91 | __unused2: ::c_ulong | |
92 | } | |
93 | ||
94 | pub struct msqid_ds { | |
95 | pub msg_perm: ::ipc_perm, | |
96 | pub msg_stime: ::time_t, | |
97 | pub msg_rtime: ::time_t, | |
98 | pub msg_ctime: ::time_t, | |
99 | __msg_cbytes: ::c_ulong, | |
100 | pub msg_qnum: ::msgqnum_t, | |
101 | pub msg_qbytes: ::msglen_t, | |
102 | pub msg_lspid: ::pid_t, | |
103 | pub msg_lrpid: ::pid_t, | |
104 | __ignored1: ::c_ulong, | |
105 | __ignored2: ::c_ulong, | |
106 | } | |
107 | ||
108 | pub struct sockaddr { | |
109 | pub sa_family: ::sa_family_t, | |
110 | pub sa_data: [::c_char; 14], | |
111 | } | |
112 | ||
113 | pub struct sockaddr_in { | |
114 | pub sin_family: ::sa_family_t, | |
115 | pub sin_port: ::in_port_t, | |
116 | pub sin_addr: ::in_addr, | |
117 | pub sin_zero: [u8; 8], | |
118 | } | |
119 | ||
120 | pub struct sockaddr_in6 { | |
121 | pub sin6_family: ::sa_family_t, | |
122 | pub sin6_port: ::in_port_t, | |
123 | pub sin6_flowinfo: u32, | |
124 | pub sin6_addr: ::in6_addr, | |
125 | pub sin6_scope_id: u32, | |
126 | } | |
127 | ||
128 | // ------------------------------------------------------------ | |
129 | // definitions below are *unverified* and might **break** the software | |
130 | // pub struct in_addr { | |
131 | // pub s_addr: in_addr_t, | |
132 | // } | |
133 | // | |
134 | // pub struct in6_addr { | |
135 | // pub s6_addr: [u8; 16], | |
b7449926 | 136 | // #[cfg(not(feature = "align"))] |
041b39d2 XL |
137 | // __align: [u32; 0], |
138 | // } | |
139 | ||
ea8adc8c | 140 | pub struct stat { |
041b39d2 | 141 | pub st_dev: ::c_ulong, |
041b39d2 | 142 | pub st_ino: ::ino_t, |
ea8adc8c XL |
143 | // According to uclibc/libc/sysdeps/linux/x86_64/bits/stat.h, order of |
144 | // nlink and mode are swapped on 64 bit systems. | |
041b39d2 | 145 | pub st_nlink: ::nlink_t, |
ea8adc8c | 146 | pub st_mode: ::mode_t, |
041b39d2 XL |
147 | pub st_uid: ::uid_t, |
148 | pub st_gid: ::gid_t, | |
ea8adc8c XL |
149 | pub st_rdev: ::c_ulong, // dev_t |
150 | pub st_size: off_t, // file size | |
151 | pub st_blksize: ::blksize_t, | |
152 | pub st_blocks: ::blkcnt_t, | |
041b39d2 | 153 | pub st_atime: ::time_t, |
ea8adc8c | 154 | pub st_atime_nsec: ::c_ulong, |
041b39d2 | 155 | pub st_mtime: ::time_t, |
ea8adc8c | 156 | pub st_mtime_nsec: ::c_ulong, |
041b39d2 | 157 | pub st_ctime: ::time_t, |
ea8adc8c XL |
158 | pub st_ctime_nsec: ::c_ulong, |
159 | st_pad4: [::c_long; 3] | |
041b39d2 XL |
160 | } |
161 | ||
ea8adc8c XL |
162 | pub struct sigaction { |
163 | pub sa_handler: ::sighandler_t, | |
164 | pub sa_flags: ::c_ulong, | |
165 | pub sa_restorer: *mut ::c_void, | |
041b39d2 | 166 | pub sa_mask: ::sigset_t, |
041b39d2 XL |
167 | } |
168 | ||
169 | pub struct stack_t { // ToDo | |
170 | pub ss_sp: *mut ::c_void, | |
171 | pub ss_flags: ::c_int, | |
172 | pub ss_size: ::size_t | |
173 | } | |
174 | ||
175 | pub struct statfs { // ToDo | |
176 | pub f_type: fsword_t, | |
177 | pub f_bsize: fsword_t, | |
178 | pub f_blocks: ::fsblkcnt_t, | |
179 | pub f_bfree: ::fsblkcnt_t, | |
180 | pub f_bavail: ::fsblkcnt_t, | |
181 | pub f_files: ::fsfilcnt_t, | |
182 | pub f_ffree: ::fsfilcnt_t, | |
183 | pub f_fsid: ::fsid_t, | |
184 | pub f_namelen: fsword_t, | |
185 | pub f_frsize: fsword_t, | |
186 | f_spare: [fsword_t; 5], | |
187 | } | |
188 | ||
189 | pub struct msghdr { // ToDo | |
190 | pub msg_name: *mut ::c_void, | |
191 | pub msg_namelen: ::socklen_t, | |
192 | pub msg_iov: *mut ::iovec, | |
193 | pub msg_iovlen: ::size_t, | |
194 | pub msg_control: *mut ::c_void, | |
195 | pub msg_controllen: ::size_t, | |
196 | pub msg_flags: ::c_int, | |
197 | } | |
198 | ||
199 | pub struct termios { // ToDo | |
200 | pub c_iflag: ::tcflag_t, | |
201 | pub c_oflag: ::tcflag_t, | |
202 | pub c_cflag: ::tcflag_t, | |
203 | pub c_lflag: ::tcflag_t, | |
204 | pub c_line: ::cc_t, | |
205 | pub c_cc: [::cc_t; ::NCCS], | |
206 | } | |
207 | ||
b7449926 XL |
208 | #[cfg_attr(all(feature = "align", target_pointer_width = "32"), |
209 | repr(align(4)))] | |
210 | #[cfg_attr(all(feature = "align", target_pointer_width = "64"), | |
211 | repr(align(8)))] | |
041b39d2 XL |
212 | pub struct sem_t { // ToDo |
213 | #[cfg(target_pointer_width = "32")] | |
214 | __size: [::c_char; 16], | |
215 | #[cfg(target_pointer_width = "64")] | |
216 | __size: [::c_char; 32], | |
b7449926 | 217 | #[cfg(not(feature = "align"))] |
041b39d2 XL |
218 | __align: [::c_long; 0], |
219 | } | |
220 | ||
b7449926 XL |
221 | #[cfg_attr(all(feature = "align", |
222 | target_pointer_width = "32", | |
223 | any(target_arch = "mips", | |
224 | target_arch = "arm", | |
225 | target_arch = "powerpc")), | |
226 | repr(align(4)))] | |
227 | #[cfg_attr(all(feature = "align", | |
228 | any(target_pointer_width = "64", | |
229 | not(any(target_arch = "mips", | |
230 | target_arch = "arm", | |
231 | target_arch = "powerpc")))), | |
232 | repr(align(8)))] | |
041b39d2 | 233 | pub struct pthread_mutex_t { // ToDo |
b7449926 XL |
234 | #[cfg(all(not(feature = "align"), |
235 | any(target_arch = "mips", | |
236 | target_arch = "arm", | |
237 | target_arch = "powerpc")))] | |
041b39d2 | 238 | __align: [::c_long; 0], |
b7449926 XL |
239 | #[cfg(not(any(feature = "align", |
240 | target_arch = "mips", | |
241 | target_arch = "arm", | |
041b39d2 XL |
242 | target_arch = "powerpc")))] |
243 | __align: [::c_longlong; 0], | |
244 | size: [u8; __SIZEOF_PTHREAD_MUTEX_T], | |
245 | } | |
246 | ||
b7449926 XL |
247 | #[cfg_attr(all(feature = "align", |
248 | any(target_pointer_width = "32", | |
249 | target_arch = "x86_64", target_arch = "powerpc64", | |
250 | target_arch = "mips64", target_arch = "s390x", | |
251 | target_arch = "sparc64")), | |
252 | repr(align(4)))] | |
253 | #[cfg_attr(all(feature = "align", | |
254 | not(any(target_pointer_width = "32", | |
255 | target_arch = "x86_64", target_arch = "powerpc64", | |
256 | target_arch = "mips64", target_arch = "s390x", | |
257 | target_arch = "sparc64"))), | |
258 | repr(align(8)))] | |
041b39d2 | 259 | pub struct pthread_mutexattr_t { // ToDo |
b7449926 XL |
260 | #[cfg(all(not(feature = "align"), |
261 | any(target_arch = "x86_64", target_arch = "powerpc64", | |
041b39d2 XL |
262 | target_arch = "mips64", target_arch = "s390x", |
263 | target_arch = "sparc64")))] | |
b7449926 XL |
264 | __align: [::c_int; 0], |
265 | #[cfg(all(not(feature = "align"), | |
266 | not(any(target_arch = "x86_64", target_arch = "powerpc64", | |
267 | target_arch = "mips64", target_arch = "s390x", | |
268 | target_arch = "sparc64"))))] | |
041b39d2 XL |
269 | __align: [::c_long; 0], |
270 | size: [u8; __SIZEOF_PTHREAD_MUTEXATTR_T], | |
271 | } | |
272 | ||
b7449926 | 273 | #[cfg_attr(feature = "align", repr(align(8)))] |
041b39d2 | 274 | pub struct pthread_cond_t { // ToDo |
b7449926 | 275 | #[cfg(not(feature = "align"))] |
041b39d2 XL |
276 | __align: [::c_longlong; 0], |
277 | size: [u8; __SIZEOF_PTHREAD_COND_T], | |
278 | } | |
279 | ||
b7449926 | 280 | #[cfg_attr(feature = "align", repr(align(4)))] |
041b39d2 | 281 | pub struct pthread_condattr_t { // ToDo |
b7449926 | 282 | #[cfg(not(feature = "align"))] |
041b39d2 XL |
283 | __align: [::c_int; 0], |
284 | size: [u8; __SIZEOF_PTHREAD_CONDATTR_T], | |
285 | } | |
286 | ||
b7449926 XL |
287 | #[cfg_attr(all(feature = "align", |
288 | target_pointer_width = "32", | |
289 | any(target_arch = "mips", | |
290 | target_arch = "arm", | |
291 | target_arch = "powerpc")), | |
292 | repr(align(4)))] | |
293 | #[cfg_attr(all(feature = "align", | |
294 | any(target_pointer_width = "64", | |
295 | not(any(target_arch = "mips", | |
296 | target_arch = "arm", | |
297 | target_arch = "powerpc")))), | |
298 | repr(align(8)))] | |
041b39d2 | 299 | pub struct pthread_rwlock_t { // ToDo |
b7449926 XL |
300 | #[cfg(all(not(feature = "align"), |
301 | any(target_arch = "mips", | |
302 | target_arch = "arm", | |
303 | target_arch = "powerpc")))] | |
041b39d2 | 304 | __align: [::c_long; 0], |
b7449926 XL |
305 | #[cfg(not(any(feature = "align", |
306 | target_arch = "mips", | |
307 | target_arch = "arm", | |
041b39d2 XL |
308 | target_arch = "powerpc")))] |
309 | __align: [::c_longlong; 0], | |
310 | size: [u8; __SIZEOF_PTHREAD_RWLOCK_T], | |
311 | } | |
312 | ||
313 | pub struct sigset_t { // ToDo | |
314 | __val: [::c_ulong; 16], | |
315 | } | |
316 | ||
317 | pub struct sysinfo { // ToDo | |
318 | pub uptime: ::c_long, | |
319 | pub loads: [::c_ulong; 3], | |
320 | pub totalram: ::c_ulong, | |
321 | pub freeram: ::c_ulong, | |
322 | pub sharedram: ::c_ulong, | |
323 | pub bufferram: ::c_ulong, | |
324 | pub totalswap: ::c_ulong, | |
325 | pub freeswap: ::c_ulong, | |
326 | pub procs: ::c_ushort, | |
327 | pub pad: ::c_ushort, | |
328 | pub totalhigh: ::c_ulong, | |
329 | pub freehigh: ::c_ulong, | |
330 | pub mem_unit: ::c_uint, | |
331 | pub _f: [::c_char; 0], | |
332 | } | |
333 | ||
334 | pub struct glob_t { // ToDo | |
335 | pub gl_pathc: ::size_t, | |
336 | pub gl_pathv: *mut *mut c_char, | |
337 | pub gl_offs: ::size_t, | |
338 | pub gl_flags: ::c_int, | |
339 | __unused1: *mut ::c_void, | |
340 | __unused2: *mut ::c_void, | |
341 | __unused3: *mut ::c_void, | |
342 | __unused4: *mut ::c_void, | |
343 | __unused5: *mut ::c_void, | |
344 | } | |
345 | ||
041b39d2 XL |
346 | pub struct rlimit64 { // ToDo |
347 | pub rlim_cur: rlim64_t, | |
348 | pub rlim_max: rlim64_t, | |
349 | } | |
350 | ||
351 | pub struct cpu_set_t { // ToDo | |
352 | #[cfg(target_pointer_width = "32")] | |
353 | bits: [u32; 32], | |
354 | #[cfg(target_pointer_width = "64")] | |
355 | bits: [u64; 16], | |
356 | } | |
357 | ||
041b39d2 XL |
358 | pub struct fsid_t { // ToDo |
359 | __val: [::c_int; 2], | |
360 | } | |
361 | } | |
362 | ||
363 | // constants | |
ea8adc8c XL |
364 | pub const EADDRINUSE: ::c_int = 98; // Address already in use |
365 | pub const EADDRNOTAVAIL: ::c_int = 99; // Cannot assign requested address | |
366 | pub const ECONNABORTED: ::c_int = 103; // Software caused connection abort | |
367 | pub const ECONNREFUSED: ::c_int = 111; // Connection refused | |
368 | pub const ECONNRESET: ::c_int = 104; // Connection reset by peer | |
369 | pub const EDEADLK: ::c_int = 35; // Resource deadlock would occur | |
370 | pub const ENOSYS: ::c_int = 38; // Function not implemented | |
371 | pub const ENOTCONN: ::c_int = 107; // Transport endpoint is not connected | |
372 | pub const ETIMEDOUT: ::c_int = 110; // connection timed out | |
373 | pub const O_APPEND: ::c_int = 02000; | |
374 | pub const O_ACCMODE: ::c_int = 0003; | |
041b39d2 | 375 | pub const O_CLOEXEC: ::c_int = 0x80000; |
ea8adc8c | 376 | pub const O_CREAT: ::c_int = 0100; |
041b39d2 | 377 | pub const O_DIRECTORY: ::c_int = 0200000; |
ea8adc8c XL |
378 | pub const O_EXCL: ::c_int = 0200; |
379 | pub const O_NONBLOCK: ::c_int = 04000; | |
380 | pub const O_TRUNC: ::c_int = 01000; | |
041b39d2 | 381 | pub const NCCS: usize = 32; |
ea8adc8c XL |
382 | pub const SIG_SETMASK: ::c_int = 2; // Set the set of blocked signals |
383 | pub const PTHREAD_STACK_MIN: usize = 16384; | |
041b39d2 XL |
384 | pub const __SIZEOF_PTHREAD_MUTEX_T: usize = 40; |
385 | pub const __SIZEOF_PTHREAD_MUTEXATTR_T: usize = 4; | |
ea8adc8c XL |
386 | pub const SO_BROADCAST: ::c_int = 6; |
387 | pub const SOCK_DGRAM: ::c_int = 2; // connectionless, unreliable datagrams | |
388 | pub const SOCK_STREAM: ::c_int = 1; // …/common/bits/socket_type.h | |
389 | pub const SO_ERROR: ::c_int = 4; | |
390 | pub const SOL_SOCKET: ::c_int = 1; | |
391 | pub const SO_RCVTIMEO: ::c_int = 20; | |
392 | pub const SO_REUSEADDR: ::c_int = 2; | |
393 | pub const SO_SNDTIMEO: ::c_int = 21; | |
041b39d2 XL |
394 | pub const PTHREAD_MUTEX_NORMAL: ::c_int = 0; |
395 | pub const PTHREAD_MUTEX_RECURSIVE: ::c_int = 1; | |
396 | pub const PTHREAD_MUTEX_ERRORCHECK: ::c_int = 2; | |
397 | pub const PTHREAD_MUTEX_DEFAULT: ::c_int = PTHREAD_MUTEX_NORMAL; | |
398 | pub const RLIM_INFINITY: u64 = 0xffffffffffffffff; | |
399 | pub const __SIZEOF_PTHREAD_COND_T: usize = 48; | |
400 | pub const __SIZEOF_PTHREAD_CONDATTR_T: usize = 4; | |
401 | pub const __SIZEOF_PTHREAD_RWLOCK_T: usize = 56; | |
402 | ||
403 | extern { | |
404 | pub fn memalign(align: ::size_t, size: ::size_t) -> *mut ::c_void; | |
405 | } | |
ea8adc8c XL |
406 | |
407 | cfg_if! { | |
408 | if #[cfg(target_os = "l4re")] { | |
409 | mod l4re; | |
410 | pub use self::l4re::*; | |
0531ce1d XL |
411 | } else { |
412 | mod other; | |
413 | pub use other::*; | |
414 | } | |
ea8adc8c XL |
415 | } |
416 |