xref: /third_party/rust/crates/libc/src/vxworks/mod.rs (revision 2add0d91)
1//! Interface to VxWorks C library
2
3use core::mem::size_of;
4use core::ptr::null_mut;
5
6#[cfg_attr(feature = "extra_traits", derive(Debug))]
7pub enum DIR {}
8impl ::Copy for DIR {}
9impl ::Clone for DIR {
10    fn clone(&self) -> DIR {
11        *self
12    }
13}
14
15pub type c_schar = i8;
16pub type c_uchar = u8;
17pub type c_short = i16;
18pub type c_ushort = u16;
19pub type c_int = i32;
20pub type c_uint = u32;
21pub type c_float = f32;
22pub type c_double = f64;
23pub type c_longlong = i64;
24pub type c_ulonglong = u64;
25pub type intmax_t = i64;
26pub type uintmax_t = u64;
27
28pub type uintptr_t = usize;
29pub type intptr_t = isize;
30pub type ptrdiff_t = isize;
31pub type size_t = ::uintptr_t;
32pub type ssize_t = ::intptr_t;
33
34pub type pid_t = ::c_int;
35pub type in_addr_t = u32;
36pub type sighandler_t = ::size_t;
37pub type cpuset_t = u32;
38
39pub type blkcnt_t = ::c_long;
40pub type blksize_t = ::c_long;
41pub type ino_t = ::c_ulong;
42
43pub type rlim_t = ::c_ulong;
44pub type suseconds_t = ::c_long;
45pub type time_t = ::c_long;
46
47pub type errno_t = ::c_int;
48
49pub type useconds_t = ::c_ulong;
50
51pub type socklen_t = ::c_uint;
52
53pub type pthread_t = ::c_ulong;
54
55pub type clockid_t = ::c_int;
56
57//defined for the structs
58pub type dev_t = ::c_ulong;
59pub type mode_t = ::c_int;
60pub type nlink_t = ::c_ulong;
61pub type uid_t = ::c_ushort;
62pub type gid_t = ::c_ushort;
63pub type sigset_t = ::c_ulonglong;
64pub type key_t = ::c_long;
65
66pub type nfds_t = ::c_uint;
67pub type stat64 = ::stat;
68
69pub type pthread_key_t = ::c_ulong;
70
71// From b_off_t.h
72pub type off_t = ::c_longlong;
73pub type off64_t = off_t;
74
75// From b_BOOL.h
76pub type BOOL = ::c_int;
77
78// From vxWind.h ..
79pub type _Vx_OBJ_HANDLE = ::c_int;
80pub type _Vx_TASK_ID = ::_Vx_OBJ_HANDLE;
81pub type _Vx_MSG_Q_ID = ::_Vx_OBJ_HANDLE;
82pub type _Vx_SEM_ID_KERNEL = ::_Vx_OBJ_HANDLE;
83pub type _Vx_RTP_ID = ::_Vx_OBJ_HANDLE;
84pub type _Vx_SD_ID = ::_Vx_OBJ_HANDLE;
85pub type _Vx_CONDVAR_ID = ::_Vx_OBJ_HANDLE;
86pub type _Vx_SEM_ID = *mut ::_Vx_semaphore;
87pub type OBJ_HANDLE = ::_Vx_OBJ_HANDLE;
88pub type TASK_ID = ::OBJ_HANDLE;
89pub type MSG_Q_ID = ::OBJ_HANDLE;
90pub type SEM_ID_KERNEL = ::OBJ_HANDLE;
91pub type RTP_ID = ::OBJ_HANDLE;
92pub type SD_ID = ::OBJ_HANDLE;
93pub type CONDVAR_ID = ::OBJ_HANDLE;
94
95// From vxTypes.h
96pub type _Vx_usr_arg_t = isize;
97pub type _Vx_exit_code_t = isize;
98pub type _Vx_ticks_t = ::c_uint;
99pub type _Vx_ticks64_t = ::c_ulonglong;
100
101pub type sa_family_t = ::c_uchar;
102
103// mqueue.h
104pub type mqd_t = ::c_int;
105
106#[cfg_attr(feature = "extra_traits", derive(Debug))]
107pub enum _Vx_semaphore {}
108impl ::Copy for _Vx_semaphore {}
109impl ::Clone for _Vx_semaphore {
110    fn clone(&self) -> _Vx_semaphore {
111        *self
112    }
113}
114
115impl siginfo_t {
116    pub unsafe fn si_addr(&self) -> *mut ::c_void {
117        self.si_addr
118    }
119
120    pub unsafe fn si_value(&self) -> ::sigval {
121        self.si_value
122    }
123
124    pub unsafe fn si_pid(&self) -> ::pid_t {
125        self.si_pid
126    }
127
128    pub unsafe fn si_uid(&self) -> ::uid_t {
129        self.si_uid
130    }
131
132    pub unsafe fn si_status(&self) -> ::c_int {
133        self.si_status
134    }
135}
136
137s! {
138    // b_pthread_condattr_t.h
139    pub struct pthread_condattr_t {
140        pub condAttrStatus: ::c_int,
141        pub condAttrPshared: ::c_int,
142        pub condAttrClockId: ::clockid_t,
143    }
144
145    // b_pthread_cond_t.h
146    pub struct pthread_cond_t{
147        pub condSemId: ::_Vx_SEM_ID,
148        pub condValid: ::c_int,
149        pub condInitted: ::c_int,
150        pub condRefCount: ::c_int,
151        pub condMutex: *mut ::pthread_mutex_t,
152        pub condAttr: ::pthread_condattr_t,
153        pub condSemName: [::c_char; _PTHREAD_SHARED_SEM_NAME_MAX]
154    }
155
156    // b_pthread_rwlockattr_t.h
157    pub struct pthread_rwlockattr_t {
158        pub rwlockAttrStatus: ::c_int,
159        pub rwlockAttrPshared: ::c_int,
160        pub rwlockAttrMaxReaders: ::c_uint,
161        pub rwlockAttrConformOpt: ::c_uint,
162    }
163
164    // b_pthread_rwlock_t.h
165    pub struct pthread_rwlock_t {
166        pub rwlockSemId: :: _Vx_SEM_ID,
167        pub rwlockReadersRefCount: ::c_uint,
168        pub rwlockValid: ::c_int,
169        pub rwlockInitted: ::c_int,
170        pub rwlockAttr: ::pthread_rwlockattr_t,
171        pub rwlockSemName: [::c_char; _PTHREAD_SHARED_SEM_NAME_MAX]
172    }
173
174    // b_struct_timeval.h
175    pub struct timeval {
176        pub tv_sec: ::time_t,
177        pub tv_usec: ::suseconds_t,
178    }
179
180    // socket.h
181    pub struct linger {
182        pub l_onoff: ::c_int,
183        pub l_linger: ::c_int,
184    }
185
186    pub struct sockaddr {
187        pub sa_len    : ::c_uchar,
188        pub sa_family : sa_family_t,
189        pub sa_data   : [::c_char; 14],
190    }
191
192    pub struct iovec {
193        pub iov_base: *mut ::c_void,
194        pub iov_len: ::size_t,
195    }
196
197    pub struct msghdr {
198        pub msg_name: *mut c_void,
199        pub msg_namelen: socklen_t,
200        pub msg_iov: *mut iovec,
201        pub msg_iovlen: ::c_int,
202        pub msg_control: *mut c_void,
203        pub msg_controllen: socklen_t,
204        pub msg_flags: ::c_int,
205    }
206
207    pub struct cmsghdr {
208        pub cmsg_len: socklen_t,
209        pub cmsg_level: ::c_int,
210        pub cmsg_type: ::c_int,
211    }
212
213    // poll.h
214    pub struct pollfd {
215        pub fd      : ::c_int,
216        pub events  : ::c_short,
217        pub revents : ::c_short,
218    }
219
220    // resource.h
221    pub struct rlimit {
222                           pub rlim_cur : ::rlim_t,
223                           pub rlim_max : ::rlim_t,
224    }
225
226    // stat.h
227    pub struct stat {
228                         pub st_dev       : ::dev_t,
229                         pub st_ino       : ::ino_t,
230                         pub st_mode      : ::mode_t,
231                         pub st_nlink     : ::nlink_t,
232                         pub st_uid       : ::uid_t,
233                         pub st_gid       : ::gid_t,
234                         pub st_rdev      : ::dev_t,
235                         pub st_size      : ::off_t,
236                         pub st_atime     : ::time_t,
237                         pub st_mtime     : ::time_t,
238                         pub st_ctime     : ::time_t,
239                         pub st_blksize   : ::blksize_t,
240                         pub st_blocks    : ::blkcnt_t,
241                         pub st_attrib    : ::c_uchar,
242                         pub st_reserved1 : ::c_int,
243                         pub st_reserved2 : ::c_int,
244                         pub st_reserved3 : ::c_int,
245                         pub st_reserved4 : ::c_int,
246    }
247
248    //b_struct__Timespec.h
249    pub struct _Timespec {
250        pub tv_sec  : ::time_t,
251        pub tv_nsec : ::c_long,
252    }
253
254    // b_struct__Sched_param.h
255    pub struct _Sched_param {
256        pub sched_priority: ::c_int, /* scheduling priority */
257        pub sched_ss_low_priority: ::c_int,    /* low scheduling priority */
258        pub sched_ss_repl_period: ::_Timespec, /* replenishment period */
259        pub sched_ss_init_budget: ::_Timespec, /* initial budget */
260        pub sched_ss_max_repl: ::c_int,        /* max pending replenishment */
261
262    }
263
264    // b_pthread_attr_t.h
265    pub struct pthread_attr_t {
266        pub threadAttrStatus          : ::c_int,
267        pub threadAttrStacksize       : ::size_t,
268        pub threadAttrStackaddr       : *mut ::c_void,
269        pub threadAttrGuardsize       : ::size_t,
270        pub threadAttrDetachstate     : ::c_int,
271        pub threadAttrContentionscope : ::c_int,
272        pub threadAttrInheritsched    : ::c_int,
273        pub threadAttrSchedpolicy     : ::c_int,
274        pub threadAttrName            : *mut ::c_char,
275        pub threadAttrOptions         : ::c_int,
276        pub threadAttrSchedparam      : ::_Sched_param,
277    }
278
279    // signal.h
280
281    pub struct sigaction {
282        pub sa_u     : ::sa_u_t,
283        pub sa_mask  : ::sigset_t,
284        pub sa_flags : ::c_int,
285    }
286
287    // b_stack_t.h
288    pub struct stack_t {
289        pub ss_sp    : *mut ::c_void,
290        pub ss_size  : ::size_t,
291        pub ss_flags : ::c_int,
292    }
293
294    // signal.h
295    pub struct siginfo_t {
296        pub si_signo : ::c_int,
297        pub si_code  : ::c_int,
298        pub si_value : ::sigval,
299        pub si_errno : ::c_int,
300        pub si_status: ::c_int,
301        pub si_addr: *mut ::c_void,
302        pub si_uid: ::uid_t,
303        pub si_pid: ::pid_t,
304    }
305
306    // pthread.h (krnl)
307    // b_pthread_mutexattr_t.h (usr)
308    pub struct pthread_mutexattr_t {
309        mutexAttrStatus      : ::c_int,
310        mutexAttrPshared     : ::c_int,
311        mutexAttrProtocol    : ::c_int,
312        mutexAttrPrioceiling : ::c_int,
313        mutexAttrType        : ::c_int,
314    }
315
316    // pthread.h (krnl)
317    // b_pthread_mutex_t.h (usr)
318    pub struct pthread_mutex_t  {
319        pub mutexSemId: ::_Vx_SEM_ID, /*_Vx_SEM_ID ..*/
320        pub mutexValid: ::c_int,
321        pub mutexInitted: ::c_int,
322        pub mutexCondRefCount: ::c_int,
323        pub mutexSavPriority: ::c_int,
324        pub mutexAttr: ::pthread_mutexattr_t,
325        pub mutexSemName: [::c_char; _PTHREAD_SHARED_SEM_NAME_MAX],
326    }
327
328    // b_struct_timespec.h
329    pub struct timespec {
330        pub tv_sec: ::time_t,
331        pub tv_nsec: ::c_long,
332    }
333
334    // time.h
335    pub struct tm {
336        pub tm_sec: ::c_int,
337        pub tm_min: ::c_int,
338        pub tm_hour: ::c_int,
339        pub tm_mday: ::c_int,
340        pub tm_mon: ::c_int,
341        pub tm_year: ::c_int,
342        pub tm_wday: ::c_int,
343        pub tm_yday: ::c_int,
344        pub tm_isdst: ::c_int,
345    }
346
347    // in.h
348    pub struct in_addr {
349        pub s_addr: in_addr_t,
350    }
351
352    // in.h
353    pub struct ip_mreq {
354        pub imr_multiaddr: in_addr,
355        pub imr_interface: in_addr,
356    }
357
358    // in6.h
359    #[repr(align(4))]
360    pub struct in6_addr {
361        pub s6_addr: [u8; 16],
362    }
363
364    // in6.h
365    pub struct ipv6_mreq {
366        pub ipv6mr_multiaddr: in6_addr,
367        pub ipv6mr_interface: ::c_uint,
368    }
369
370    // netdb.h
371    pub struct addrinfo {
372        pub ai_flags    : ::c_int,
373        pub ai_family   : ::c_int,
374        pub ai_socktype : ::c_int,
375        pub ai_protocol : ::c_int,
376        pub ai_addrlen  : ::size_t,
377        pub ai_canonname: *mut ::c_char,
378        pub ai_addr     : *mut ::sockaddr,
379        pub ai_next     : *mut ::addrinfo,
380    }
381
382    // in.h
383    pub struct sockaddr_in {
384        pub sin_len   : u8,
385        pub sin_family: u8,
386        pub sin_port  : u16,
387        pub sin_addr  : ::in_addr,
388        pub sin_zero  : [::c_char; 8],
389    }
390
391    // in6.h
392    pub struct sockaddr_in6 {
393        pub sin6_len     : u8,
394        pub sin6_family  : u8,
395        pub sin6_port    : u16,
396        pub sin6_flowinfo: u32,
397        pub sin6_addr    : ::in6_addr,
398        pub sin6_scope_id: u32,
399    }
400
401    pub struct Dl_info {
402        pub dli_fname: *const ::c_char,
403        pub dli_fbase: *mut ::c_void,
404        pub dli_sname: *const ::c_char,
405        pub dli_saddr: *mut ::c_void,
406    }
407
408    pub struct mq_attr {
409        pub mq_maxmsg:  ::c_long,
410        pub mq_msgsize: ::c_long,
411        pub mq_flags:   ::c_long,
412        pub mq_curmsgs: ::c_long,
413    }
414}
415
416s_no_extra_traits! {
417    // dirent.h
418    pub struct dirent {
419        pub d_ino  : ::ino_t,
420        pub d_name : [::c_char; _PARM_NAME_MAX as usize + 1],
421    }
422
423    pub struct sockaddr_un {
424        pub sun_len: u8,
425        pub sun_family: sa_family_t,
426        pub sun_path: [::c_char; 104]
427    }
428
429    // rtpLibCommon.h
430    pub struct RTP_DESC {
431        pub status    : ::c_int,
432        pub options   : u32,
433        pub entrAddr  : *mut ::c_void,
434        pub initTaskId: ::TASK_ID,
435        pub parentId  : ::RTP_ID,
436        pub pathName  : [::c_char; VX_RTP_NAME_LENGTH as usize + 1],
437        pub taskCnt   : ::c_int,
438        pub textStart : *mut ::c_void,
439        pub textEnd   : *mut ::c_void,
440    }
441    // socket.h
442    pub struct sockaddr_storage {
443        pub ss_len     : ::c_uchar,
444        pub ss_family  : ::sa_family_t,
445        pub __ss_pad1  : [::c_char; _SS_PAD1SIZE],
446        pub __ss_align : i32,
447        pub __ss_pad2  : [::c_char; _SS_PAD2SIZE],
448    }
449
450    pub union sa_u_t {
451        pub sa_handler : ::Option<unsafe extern "C" fn(::c_int) -> !>,
452        pub sa_sigaction: ::Option<unsafe extern "C" fn(::c_int,
453                                                        *mut ::siginfo_t,
454                                                        *mut ::c_void) -> !>,
455    }
456
457    pub union sigval {
458        pub sival_int : ::c_int,
459        pub sival_ptr : *mut ::c_void,
460    }
461}
462
463cfg_if! {
464    if #[cfg(feature = "extra_traits")] {
465        impl ::fmt::Debug for dirent {
466            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
467                f.debug_struct("dirent")
468                    .field("d_ino", &self.d_ino)
469                    .field("d_name", &&self.d_name[..])
470                    .finish()
471            }
472        }
473
474        impl ::fmt::Debug for sockaddr_un {
475            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
476                f.debug_struct("sockaddr_un")
477                    .field("sun_len", &self.sun_len)
478                    .field("sun_family", &self.sun_family)
479                    .field("sun_path", &&self.sun_path[..])
480                    .finish()
481            }
482        }
483
484        impl ::fmt::Debug for RTP_DESC {
485            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
486                f.debug_struct("RTP_DESC")
487                    .field("status", &self.status)
488                    .field("options", &self.options)
489                    .field("entrAddr", &self.entrAddr)
490                    .field("initTaskId", &self.initTaskId)
491                    .field("parentId", &self.parentId)
492                    .field("pathName", &&self.pathName[..])
493                    .field("taskCnt", &self.taskCnt)
494                    .field("textStart", &self.textStart)
495                    .field("textEnd", &self.textEnd)
496                    .finish()
497            }
498        }
499        impl ::fmt::Debug for sockaddr_storage {
500            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
501                f.debug_struct("sockaddr_storage")
502                    .field("ss_len", &self.ss_len)
503                    .field("ss_family", &self.ss_family)
504                    .field("__ss_pad1", &&self.__ss_pad1[..])
505                    .field("__ss_align", &self.__ss_align)
506                    .field("__ss_pad2", &&self.__ss_pad2[..])
507                    .finish()
508            }
509        }
510
511        impl PartialEq for sa_u_t {
512            fn eq(&self, other: &sa_u_t) -> bool {
513                unsafe {
514                    let h1 = match self.sa_handler {
515                        Some(handler) => handler as usize,
516                        None => 0 as usize,
517                    };
518                    let h2 = match other.sa_handler {
519                        Some(handler) => handler as usize,
520                        None => 0 as usize,
521                    };
522                    h1 == h2
523                }
524            }
525        }
526        impl Eq for sa_u_t {}
527        impl ::fmt::Debug for sa_u_t {
528            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
529                unsafe {
530                    let h = match self.sa_handler {
531                        Some(handler) => handler as usize,
532                        None => 0 as usize,
533                    };
534
535                    f.debug_struct("sa_u_t")
536                        .field("sa_handler", &h)
537                        .finish()
538                }
539            }
540        }
541        impl ::hash::Hash for sa_u_t {
542            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
543                unsafe {
544                    let h = match self.sa_handler {
545                        Some(handler) => handler as usize,
546                        None => 0 as usize,
547                    };
548                    h.hash(state)
549                }
550            }
551        }
552
553        impl PartialEq for sigval {
554            fn eq(&self, other: &sigval) -> bool {
555                unsafe { self.sival_ptr as usize == other.sival_ptr as usize }
556            }
557        }
558        impl Eq for sigval {}
559        impl ::fmt::Debug for sigval {
560            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
561                f.debug_struct("sigval")
562                    .field("sival_ptr", unsafe { &(self.sival_ptr as usize) })
563                    .finish()
564            }
565        }
566        impl ::hash::Hash for sigval {
567            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
568                unsafe { (self.sival_ptr as usize).hash(state) };
569            }
570        }
571    }
572}
573
574pub const STDIN_FILENO: ::c_int = 0;
575pub const STDOUT_FILENO: ::c_int = 1;
576pub const STDERR_FILENO: ::c_int = 2;
577
578pub const EXIT_SUCCESS: ::c_int = 0;
579pub const EXIT_FAILURE: ::c_int = 1;
580
581pub const EAI_SERVICE: ::c_int = 9;
582pub const EAI_SOCKTYPE: ::c_int = 10;
583pub const EAI_SYSTEM: ::c_int = 11;
584
585// This is not defined in vxWorks, but we have to define it here
586// to make the building pass for getrandom and libstd, FIXME
587pub const RTLD_DEFAULT: *mut ::c_void = 0i64 as *mut ::c_void;
588
589//Clock Lib Stuff
590pub const CLOCK_REALTIME: ::c_int = 0x0;
591pub const CLOCK_MONOTONIC: ::c_int = 0x1;
592pub const CLOCK_PROCESS_CPUTIME_ID: ::c_int = 0x2;
593pub const CLOCK_THREAD_CPUTIME_ID: ::c_int = 0x3;
594pub const TIMER_ABSTIME: ::c_int = 0x1;
595pub const TIMER_RELTIME: ::c_int = 0x0;
596
597// PTHREAD STUFF
598pub const PTHREAD_INITIALIZED_OBJ: ::c_int = 0xF70990EF;
599pub const PTHREAD_DESTROYED_OBJ: ::c_int = -1;
600pub const PTHREAD_VALID_OBJ: ::c_int = 0xEC542A37;
601pub const PTHREAD_INVALID_OBJ: ::c_int = -1;
602pub const PTHREAD_UNUSED_YET_OBJ: ::c_int = -1;
603
604pub const PTHREAD_PRIO_NONE: ::c_int = 0;
605pub const PTHREAD_PRIO_INHERIT: ::c_int = 1;
606pub const PTHREAD_PRIO_PROTECT: ::c_int = 2;
607
608pub const PTHREAD_MUTEX_NORMAL: ::c_int = 0;
609pub const PTHREAD_MUTEX_ERRORCHECK: ::c_int = 1;
610pub const PTHREAD_MUTEX_RECURSIVE: ::c_int = 2;
611pub const PTHREAD_MUTEX_DEFAULT: ::c_int = PTHREAD_MUTEX_NORMAL;
612pub const PTHREAD_STACK_MIN: usize = 4096;
613pub const _PTHREAD_SHARED_SEM_NAME_MAX: usize = 30;
614
615// ERRNO STUFF
616pub const OK: ::c_int = 0;
617pub const EPERM: ::c_int = 1; /* Not owner */
618pub const ENOENT: ::c_int = 2; /* No such file or directory */
619pub const ESRCH: ::c_int = 3; /* No such process */
620pub const EINTR: ::c_int = 4; /* Interrupted system call */
621pub const EIO: ::c_int = 5; /* I/O error */
622pub const ENXIO: ::c_int = 6; /* No such device or address */
623pub const E2BIG: ::c_int = 7; /* Arg list too long */
624pub const ENOEXEC: ::c_int = 8; /* Exec format error */
625pub const EBADF: ::c_int = 9; /* Bad file number */
626pub const ECHILD: ::c_int = 10; /* No children */
627pub const EAGAIN: ::c_int = 11; /* No more processes */
628pub const ENOMEM: ::c_int = 12; /* Not enough core */
629pub const EACCES: ::c_int = 13; /* Permission denied */
630pub const EFAULT: ::c_int = 14;
631pub const ENOTEMPTY: ::c_int = 15;
632pub const EBUSY: ::c_int = 16;
633pub const EEXIST: ::c_int = 17;
634pub const EXDEV: ::c_int = 18;
635pub const ENODEV: ::c_int = 19;
636pub const ENOTDIR: ::c_int = 20;
637pub const EISDIR: ::c_int = 21;
638pub const EINVAL: ::c_int = 22;
639pub const ENAMETOOLONG: ::c_int = 26;
640pub const EFBIG: ::c_int = 27;
641pub const ENOSPC: ::c_int = 28;
642pub const ESPIPE: ::c_int = 29;
643pub const EROFS: ::c_int = 30;
644pub const EMLINK: ::c_int = 31;
645pub const EPIPE: ::c_int = 32;
646pub const EDEADLK: ::c_int = 33;
647pub const ERANGE: ::c_int = 38;
648pub const EDESTADDRREQ: ::c_int = 40;
649pub const EPROTOTYPE: ::c_int = 41;
650pub const ENOPROTOOPT: ::c_int = 42;
651pub const EPROTONOSUPPORT: ::c_int = 43;
652pub const ESOCKTNOSUPPORT: ::c_int = 44;
653pub const EOPNOTSUPP: ::c_int = 45;
654pub const EPFNOSUPPORT: ::c_int = 46;
655pub const EAFNOSUPPORT: ::c_int = 47;
656pub const EADDRINUSE: ::c_int = 48;
657pub const EADDRNOTAVAIL: ::c_int = 49;
658pub const ENOTSOCK: ::c_int = 50;
659pub const ENETUNREACH: ::c_int = 51;
660pub const ENETRESET: ::c_int = 52;
661pub const ECONNABORTED: ::c_int = 53;
662pub const ECONNRESET: ::c_int = 54;
663pub const ENOBUFS: ::c_int = 55;
664pub const EISCONN: ::c_int = 56;
665pub const ENOTCONN: ::c_int = 57;
666pub const ESHUTDOWN: ::c_int = 58;
667pub const ETOOMANYREFS: ::c_int = 59;
668pub const ETIMEDOUT: ::c_int = 60;
669pub const ECONNREFUSED: ::c_int = 61;
670pub const ENETDOWN: ::c_int = 62;
671pub const ETXTBSY: ::c_int = 63;
672pub const ELOOP: ::c_int = 64;
673pub const EHOSTUNREACH: ::c_int = 65;
674pub const EINPROGRESS: ::c_int = 68;
675pub const EALREADY: ::c_int = 69;
676pub const EWOULDBLOCK: ::c_int = 70;
677pub const ENOSYS: ::c_int = 71;
678pub const EDQUOT: ::c_int = 83;
679pub const ESTALE: ::c_int = 88;
680
681// NFS errnos: Refer to pkgs_v2/storage/fs/nfs/h/nfs/nfsCommon.h
682const M_nfsStat: ::c_int = 48 << 16;
683enum nfsstat {
684    NFSERR_REMOTE = 71,
685    NFSERR_WFLUSH = 99,
686    NFSERR_BADHANDLE = 10001,
687    NFSERR_NOT_SYNC = 10002,
688    NFSERR_BAD_COOKIE = 10003,
689    NFSERR_TOOSMALL = 10005,
690    NFSERR_BADTYPE = 10007,
691    NFSERR_JUKEBOX = 10008,
692}
693
694pub const S_nfsLib_NFS_OK: ::c_int = OK;
695pub const S_nfsLib_NFSERR_PERM: ::c_int = EPERM;
696pub const S_nfsLib_NFSERR_NOENT: ::c_int = ENOENT;
697pub const S_nfsLib_NFSERR_IO: ::c_int = EIO;
698pub const S_nfsLib_NFSERR_NXIO: ::c_int = ENXIO;
699pub const S_nfsLib_NFSERR_ACCESS: ::c_int = EACCES;
700pub const S_nfsLib_NFSERR_EXIST: ::c_int = EEXIST;
701pub const S_nfsLib_NFSERR_ENODEV: ::c_int = ENODEV;
702pub const S_nfsLib_NFSERR_NOTDIR: ::c_int = ENOTDIR;
703pub const S_nfsLib_NFSERR_ISDIR: ::c_int = EISDIR;
704pub const S_nfsLib_NFSERR_INVAL: ::c_int = EINVAL;
705pub const S_nfsLib_NFSERR_FBIG: ::c_int = EFBIG;
706pub const S_nfsLib_NFSERR_NOSPC: ::c_int = ENOSPC;
707pub const S_nfsLib_NFSERR_ROFS: ::c_int = EROFS;
708pub const S_nfsLib_NFSERR_NAMETOOLONG: ::c_int = ENAMETOOLONG;
709pub const S_nfsLib_NFSERR_NOTEMPTY: ::c_int = ENOTEMPTY;
710pub const S_nfsLib_NFSERR_DQUOT: ::c_int = EDQUOT;
711pub const S_nfsLib_NFSERR_STALE: ::c_int = ESTALE;
712pub const S_nfsLib_NFSERR_WFLUSH: ::c_int = M_nfsStat | nfsstat::NFSERR_WFLUSH as ::c_int;
713pub const S_nfsLib_NFSERR_REMOTE: ::c_int = M_nfsStat | nfsstat::NFSERR_REMOTE as ::c_int;
714pub const S_nfsLib_NFSERR_BADHANDLE: ::c_int = M_nfsStat | nfsstat::NFSERR_BADHANDLE as ::c_int;
715pub const S_nfsLib_NFSERR_NOT_SYNC: ::c_int = M_nfsStat | nfsstat::NFSERR_NOT_SYNC as ::c_int;
716pub const S_nfsLib_NFSERR_BAD_COOKIE: ::c_int = M_nfsStat | nfsstat::NFSERR_BAD_COOKIE as ::c_int;
717pub const S_nfsLib_NFSERR_NOTSUPP: ::c_int = EOPNOTSUPP;
718pub const S_nfsLib_NFSERR_TOOSMALL: ::c_int = M_nfsStat | nfsstat::NFSERR_TOOSMALL as ::c_int;
719pub const S_nfsLib_NFSERR_SERVERFAULT: ::c_int = EIO;
720pub const S_nfsLib_NFSERR_BADTYPE: ::c_int = M_nfsStat | nfsstat::NFSERR_BADTYPE as ::c_int;
721pub const S_nfsLib_NFSERR_JUKEBOX: ::c_int = M_nfsStat | nfsstat::NFSERR_JUKEBOX as ::c_int;
722
723// in.h
724pub const IPPROTO_IP: ::c_int = 0;
725pub const IPPROTO_IPV6: ::c_int = 41;
726
727pub const IP_TTL: ::c_int = 4;
728pub const IP_MULTICAST_IF: ::c_int = 9;
729pub const IP_MULTICAST_TTL: ::c_int = 10;
730pub const IP_MULTICAST_LOOP: ::c_int = 11;
731pub const IP_ADD_MEMBERSHIP: ::c_int = 12;
732pub const IP_DROP_MEMBERSHIP: ::c_int = 13;
733
734// in6.h
735pub const IPV6_V6ONLY: ::c_int = 1;
736pub const IPV6_UNICAST_HOPS: ::c_int = 4;
737pub const IPV6_MULTICAST_IF: ::c_int = 9;
738pub const IPV6_MULTICAST_HOPS: ::c_int = 10;
739pub const IPV6_MULTICAST_LOOP: ::c_int = 11;
740pub const IPV6_ADD_MEMBERSHIP: ::c_int = 12;
741pub const IPV6_DROP_MEMBERSHIP: ::c_int = 13;
742
743// STAT Stuff
744pub const S_IFMT: ::c_int = 0xf000;
745pub const S_IFIFO: ::c_int = 0x1000;
746pub const S_IFCHR: ::c_int = 0x2000;
747pub const S_IFDIR: ::c_int = 0x4000;
748pub const S_IFBLK: ::c_int = 0x6000;
749pub const S_IFREG: ::c_int = 0x8000;
750pub const S_IFLNK: ::c_int = 0xa000;
751pub const S_IFSHM: ::c_int = 0xb000;
752pub const S_IFSOCK: ::c_int = 0xc000;
753pub const S_ISUID: ::c_int = 0x0800;
754pub const S_ISGID: ::c_int = 0x0400;
755pub const S_ISTXT: ::c_int = 0x0200;
756pub const S_IRUSR: ::c_int = 0x0100;
757pub const S_IWUSR: ::c_int = 0x0080;
758pub const S_IXUSR: ::c_int = 0x0040;
759pub const S_IRWXU: ::c_int = 0x01c0;
760pub const S_IRGRP: ::c_int = 0x0020;
761pub const S_IWGRP: ::c_int = 0x0010;
762pub const S_IXGRP: ::c_int = 0x0008;
763pub const S_IRWXG: ::c_int = 0x0038;
764pub const S_IROTH: ::c_int = 0x0004;
765pub const S_IWOTH: ::c_int = 0x0002;
766pub const S_IXOTH: ::c_int = 0x0001;
767pub const S_IRWXO: ::c_int = 0x0007;
768
769// socket.h
770pub const SOL_SOCKET: ::c_int = 0xffff;
771
772pub const SO_DEBUG: ::c_int = 0x0001;
773pub const SO_REUSEADDR: ::c_int = 0x0004;
774pub const SO_KEEPALIVE: ::c_int = 0x0008;
775pub const SO_DONTROUTE: ::c_int = 0x0010;
776pub const SO_RCVLOWAT: ::c_int = 0x0012;
777pub const SO_SNDLOWAT: ::c_int = 0x0013;
778pub const SO_SNDTIMEO: ::c_int = 0x1005;
779pub const SO_ACCEPTCONN: ::c_int = 0x001e;
780pub const SO_BROADCAST: ::c_int = 0x0020;
781pub const SO_USELOOPBACK: ::c_int = 0x0040;
782pub const SO_LINGER: ::c_int = 0x0080;
783pub const SO_REUSEPORT: ::c_int = 0x0200;
784
785pub const SO_VLAN: ::c_int = 0x8000;
786
787pub const SO_SNDBUF: ::c_int = 0x1001;
788pub const SO_RCVBUF: ::c_int = 0x1002;
789pub const SO_RCVTIMEO: ::c_int = 0x1006;
790pub const SO_ERROR: ::c_int = 0x1007;
791pub const SO_TYPE: ::c_int = 0x1008;
792pub const SO_BINDTODEVICE: ::c_int = 0x1010;
793pub const SO_OOBINLINE: ::c_int = 0x1011;
794pub const SO_CONNTIMEO: ::c_int = 0x100a;
795
796pub const SOCK_STREAM: ::c_int = 1;
797pub const SOCK_DGRAM: ::c_int = 2;
798pub const SOCK_RAW: ::c_int = 3;
799pub const SOCK_RDM: ::c_int = 4;
800pub const SOCK_SEQPACKET: ::c_int = 5;
801pub const SOCK_PACKET: ::c_int = 10;
802
803pub const _SS_MAXSIZE: usize = 128;
804pub const _SS_ALIGNSIZE: usize = size_of::<u32>();
805pub const _SS_PAD1SIZE: usize = _SS_ALIGNSIZE - size_of::<::c_uchar>() - size_of::<::sa_family_t>();
806pub const _SS_PAD2SIZE: usize = _SS_MAXSIZE
807    - size_of::<::c_uchar>()
808    - size_of::<::sa_family_t>()
809    - _SS_PAD1SIZE
810    - _SS_ALIGNSIZE;
811
812pub const MSG_OOB: ::c_int = 0x0001;
813pub const MSG_PEEK: ::c_int = 0x0002;
814pub const MSG_DONTROUTE: ::c_int = 0x0004;
815pub const MSG_EOR: ::c_int = 0x0008;
816pub const MSG_TRUNC: ::c_int = 0x0010;
817pub const MSG_CTRUNC: ::c_int = 0x0020;
818pub const MSG_WAITALL: ::c_int = 0x0040;
819pub const MSG_DONTWAIT: ::c_int = 0x0080;
820pub const MSG_EOF: ::c_int = 0x0100;
821pub const MSG_EXP: ::c_int = 0x0200;
822pub const MSG_MBUF: ::c_int = 0x0400;
823pub const MSG_NOTIFICATION: ::c_int = 0x0800;
824pub const MSG_COMPAT: ::c_int = 0x8000;
825
826pub const AF_UNSPEC: ::c_int = 0;
827pub const AF_LOCAL: ::c_int = 1;
828pub const AF_UNIX: ::c_int = AF_LOCAL;
829pub const AF_INET: ::c_int = 2;
830pub const AF_NETLINK: ::c_int = 16;
831pub const AF_ROUTE: ::c_int = 17;
832pub const AF_LINK: ::c_int = 18;
833pub const AF_PACKET: ::c_int = 19;
834pub const pseudo_AF_KEY: ::c_int = 27;
835pub const AF_KEY: ::c_int = pseudo_AF_KEY;
836pub const AF_INET6: ::c_int = 28;
837pub const AF_SOCKDEV: ::c_int = 31;
838pub const AF_TIPC: ::c_int = 33;
839pub const AF_MIPC: ::c_int = 34;
840pub const AF_MIPC_SAFE: ::c_int = 35;
841pub const AF_MAX: ::c_int = 37;
842
843pub const SHUT_RD: ::c_int = 0;
844pub const SHUT_WR: ::c_int = 1;
845pub const SHUT_RDWR: ::c_int = 2;
846
847pub const IPPROTO_TCP: ::c_int = 6;
848pub const TCP_NODELAY: ::c_int = 1;
849pub const TCP_MAXSEG: ::c_int = 2;
850pub const TCP_NOPUSH: ::c_int = 3;
851pub const TCP_KEEPIDLE: ::c_int = 4;
852pub const TCP_KEEPINTVL: ::c_int = 5;
853pub const TCP_KEEPCNT: ::c_int = 6;
854
855// ioLib.h
856pub const FIONREAD: ::c_int = 0x40040001;
857pub const FIOFLUSH: ::c_int = 2;
858pub const FIOOPTIONS: ::c_int = 3;
859pub const FIOBAUDRATE: ::c_int = 4;
860pub const FIODISKFORMAT: ::c_int = 5;
861pub const FIODISKINIT: ::c_int = 6;
862pub const FIOSEEK: ::c_int = 7;
863pub const FIOWHERE: ::c_int = 8;
864pub const FIODIRENTRY: ::c_int = 9;
865pub const FIORENAME: ::c_int = 10;
866pub const FIOREADYCHANGE: ::c_int = 11;
867pub const FIODISKCHANGE: ::c_int = 13;
868pub const FIOCANCEL: ::c_int = 14;
869pub const FIOSQUEEZE: ::c_int = 15;
870pub const FIOGETNAME: ::c_int = 18;
871pub const FIONBIO: ::c_int = 0x90040010;
872
873// limits.h
874pub const PATH_MAX: ::c_int = _PARM_PATH_MAX;
875pub const _POSIX_PATH_MAX: ::c_int = 256;
876
877// Some poll stuff
878pub const POLLIN: ::c_short = 0x0001;
879pub const POLLPRI: ::c_short = 0x0002;
880pub const POLLOUT: ::c_short = 0x0004;
881pub const POLLRDNORM: ::c_short = 0x0040;
882pub const POLLWRNORM: ::c_short = POLLOUT;
883pub const POLLRDBAND: ::c_short = 0x0080;
884pub const POLLWRBAND: ::c_short = 0x0100;
885pub const POLLERR: ::c_short = 0x0008;
886pub const POLLHUP: ::c_short = 0x0010;
887pub const POLLNVAL: ::c_short = 0x0020;
888
889// fnctlcom.h
890pub const FD_CLOEXEC: ::c_int = 1;
891pub const F_DUPFD: ::c_int = 0;
892pub const F_GETFD: ::c_int = 1;
893pub const F_SETFD: ::c_int = 2;
894pub const F_GETFL: ::c_int = 3;
895pub const F_SETFL: ::c_int = 4;
896pub const F_GETOWN: ::c_int = 5;
897pub const F_SETOWN: ::c_int = 6;
898pub const F_GETLK: ::c_int = 7;
899pub const F_SETLK: ::c_int = 8;
900pub const F_SETLKW: ::c_int = 9;
901pub const F_DUPFD_CLOEXEC: ::c_int = 14;
902
903// signal.h
904pub const SIG_DFL: sighandler_t = 0 as sighandler_t;
905pub const SIG_IGN: sighandler_t = 1 as sighandler_t;
906pub const SIG_ERR: sighandler_t = -1 as isize as sighandler_t;
907
908pub const SIGHUP: ::c_int = 1;
909pub const SIGINT: ::c_int = 2;
910pub const SIGQUIT: ::c_int = 3;
911pub const SIGILL: ::c_int = 4;
912pub const SIGTRAP: ::c_int = 5;
913pub const SIGABRT: ::c_int = 6;
914pub const SIGEMT: ::c_int = 7;
915pub const SIGFPE: ::c_int = 8;
916pub const SIGKILL: ::c_int = 9;
917pub const SIGBUS: ::c_int = 10;
918pub const SIGSEGV: ::c_int = 11;
919pub const SIGFMT: ::c_int = 12;
920pub const SIGPIPE: ::c_int = 13;
921pub const SIGALRM: ::c_int = 14;
922pub const SIGTERM: ::c_int = 15;
923pub const SIGCNCL: ::c_int = 16;
924pub const SIGSTOP: ::c_int = 17;
925pub const SIGTSTP: ::c_int = 18;
926pub const SIGCONT: ::c_int = 19;
927pub const SIGCHLD: ::c_int = 20;
928pub const SIGTTIN: ::c_int = 21;
929pub const SIGTTOU: ::c_int = 22;
930
931pub const SIG_BLOCK: ::c_int = 1;
932pub const SIG_UNBLOCK: ::c_int = 2;
933pub const SIG_SETMASK: ::c_int = 3;
934
935pub const SI_SYNC: ::c_int = 0;
936pub const SI_USER: ::c_int = -1;
937pub const SI_QUEUE: ::c_int = -2;
938pub const SI_TIMER: ::c_int = -3;
939pub const SI_ASYNCIO: ::c_int = -4;
940pub const SI_MESGQ: ::c_int = -5;
941pub const SI_CHILD: ::c_int = -6;
942pub const SI_KILL: ::c_int = SI_USER;
943
944// vxParams.h definitions
945pub const _PARM_NAME_MAX: ::c_int = 255;
946pub const _PARM_PATH_MAX: ::c_int = 1024;
947
948// WAIT STUFF
949pub const WNOHANG: ::c_int = 0x01;
950pub const WUNTRACED: ::c_int = 0x02;
951
952const PTHREAD_MUTEXATTR_INITIALIZER: pthread_mutexattr_t = pthread_mutexattr_t {
953    mutexAttrStatus: PTHREAD_INITIALIZED_OBJ,
954    mutexAttrProtocol: PTHREAD_PRIO_NONE,
955    mutexAttrPrioceiling: 0,
956    mutexAttrType: PTHREAD_MUTEX_DEFAULT,
957    mutexAttrPshared: 1,
958};
959pub const PTHREAD_MUTEX_INITIALIZER: pthread_mutex_t = pthread_mutex_t {
960    mutexSemId: null_mut(),
961    mutexValid: PTHREAD_VALID_OBJ,
962    mutexInitted: PTHREAD_UNUSED_YET_OBJ,
963    mutexCondRefCount: 0,
964    mutexSavPriority: -1,
965    mutexAttr: PTHREAD_MUTEXATTR_INITIALIZER,
966    mutexSemName: [0; _PTHREAD_SHARED_SEM_NAME_MAX],
967};
968
969const PTHREAD_CONDATTR_INITIALIZER: pthread_condattr_t = pthread_condattr_t {
970    condAttrStatus: 0xf70990ef,
971    condAttrPshared: 1,
972    condAttrClockId: CLOCK_REALTIME,
973};
974pub const PTHREAD_COND_INITIALIZER: pthread_cond_t = pthread_cond_t {
975    condSemId: null_mut(),
976    condValid: PTHREAD_VALID_OBJ,
977    condInitted: PTHREAD_UNUSED_YET_OBJ,
978    condRefCount: 0,
979    condMutex: null_mut(),
980    condAttr: PTHREAD_CONDATTR_INITIALIZER,
981    condSemName: [0; _PTHREAD_SHARED_SEM_NAME_MAX],
982};
983
984const PTHREAD_RWLOCKATTR_INITIALIZER: pthread_rwlockattr_t = pthread_rwlockattr_t {
985    rwlockAttrStatus: PTHREAD_INITIALIZED_OBJ,
986    rwlockAttrPshared: 1,
987    rwlockAttrMaxReaders: 0,
988    rwlockAttrConformOpt: 1,
989};
990pub const PTHREAD_RWLOCK_INITIALIZER: pthread_rwlock_t = pthread_rwlock_t {
991    rwlockSemId: null_mut(),
992    rwlockReadersRefCount: 0,
993    rwlockValid: PTHREAD_VALID_OBJ,
994    rwlockInitted: PTHREAD_UNUSED_YET_OBJ,
995    rwlockAttr: PTHREAD_RWLOCKATTR_INITIALIZER,
996    rwlockSemName: [0; _PTHREAD_SHARED_SEM_NAME_MAX],
997};
998
999pub const SEEK_SET: ::c_int = 0;
1000pub const SEEK_CUR: ::c_int = 1;
1001pub const SEEK_END: ::c_int = 2;
1002
1003// rtpLibCommon.h
1004pub const VX_RTP_NAME_LENGTH: ::c_int = 255;
1005pub const RTP_ID_ERROR: ::RTP_ID = -1;
1006
1007// h/public/unistd.h
1008pub const _SC_GETPW_R_SIZE_MAX: ::c_int = 21; // Via unistd.h
1009pub const _SC_PAGESIZE: ::c_int = 39;
1010pub const O_ACCMODE: ::c_int = 3;
1011pub const O_CLOEXEC: ::c_int = 0x100000; // fcntlcom
1012pub const O_EXCL: ::c_int = 0x0800;
1013pub const O_CREAT: ::c_int = 0x0200;
1014pub const O_TRUNC: ::c_int = 0x0400;
1015pub const O_APPEND: ::c_int = 0x0008;
1016pub const O_RDWR: ::c_int = 0x0002;
1017pub const O_WRONLY: ::c_int = 0x0001;
1018pub const O_RDONLY: ::c_int = 0;
1019pub const O_NONBLOCK: ::c_int = 0x4000;
1020
1021#[cfg_attr(feature = "extra_traits", derive(Debug))]
1022pub enum FILE {}
1023impl ::Copy for FILE {}
1024impl ::Clone for FILE {
1025    fn clone(&self) -> FILE {
1026        *self
1027    }
1028}
1029#[cfg_attr(feature = "extra_traits", derive(Debug))]
1030pub enum fpos_t {} // FIXME: fill this out with a struct
1031impl ::Copy for fpos_t {}
1032impl ::Clone for fpos_t {
1033    fn clone(&self) -> fpos_t {
1034        *self
1035    }
1036}
1037
1038f! {
1039    pub {const} fn CMSG_ALIGN(len: usize) -> usize {
1040        len + ::mem::size_of::<usize>() - 1 & !(::mem::size_of::<usize>() - 1)
1041    }
1042
1043    pub fn CMSG_NXTHDR(mhdr: *const msghdr,
1044                       cmsg: *const cmsghdr) -> *mut cmsghdr {
1045        let next = cmsg as usize + CMSG_ALIGN((*cmsg).cmsg_len as usize)
1046            + CMSG_ALIGN(::mem::size_of::<::cmsghdr>());
1047        let max = (*mhdr).msg_control as usize
1048            + (*mhdr).msg_controllen as usize;
1049        if next <= max {
1050            (cmsg as usize + CMSG_ALIGN((*cmsg).cmsg_len as usize))
1051                as *mut ::cmsghdr
1052        } else {
1053            0 as *mut ::cmsghdr
1054        }
1055    }
1056
1057    pub fn CMSG_FIRSTHDR(mhdr: *const msghdr) -> *mut cmsghdr {
1058        if (*mhdr).msg_controllen as usize > 0  {
1059            (*mhdr).msg_control as *mut cmsghdr
1060        } else {
1061            0 as *mut cmsghdr
1062        }
1063    }
1064
1065    pub fn CMSG_DATA(cmsg: *const cmsghdr) -> *mut ::c_uchar {
1066        (cmsg as *mut ::c_uchar)
1067            .offset(CMSG_ALIGN(::mem::size_of::<::cmsghdr>()) as isize)
1068    }
1069
1070    pub {const} fn CMSG_SPACE(length: ::c_uint) -> ::c_uint {
1071        (CMSG_ALIGN(length as usize) + CMSG_ALIGN(::mem::size_of::<cmsghdr>()))
1072            as ::c_uint
1073    }
1074
1075    pub fn CMSG_LEN(length: ::c_uint) -> ::c_uint {
1076        CMSG_ALIGN(::mem::size_of::<cmsghdr>()) as ::c_uint + length
1077    }
1078}
1079
1080extern "C" {
1081    pub fn isalnum(c: c_int) -> c_int;
1082    pub fn isalpha(c: c_int) -> c_int;
1083    pub fn iscntrl(c: c_int) -> c_int;
1084    pub fn isdigit(c: c_int) -> c_int;
1085    pub fn isgraph(c: c_int) -> c_int;
1086    pub fn islower(c: c_int) -> c_int;
1087    pub fn isprint(c: c_int) -> c_int;
1088    pub fn ispunct(c: c_int) -> c_int;
1089    pub fn isspace(c: c_int) -> c_int;
1090    pub fn isupper(c: c_int) -> c_int;
1091    pub fn isxdigit(c: c_int) -> c_int;
1092    pub fn isblank(c: c_int) -> c_int;
1093    pub fn tolower(c: c_int) -> c_int;
1094    pub fn toupper(c: c_int) -> c_int;
1095    pub fn fopen(filename: *const c_char, mode: *const c_char) -> *mut FILE;
1096    pub fn freopen(filename: *const c_char, mode: *const c_char, file: *mut FILE) -> *mut FILE;
1097    pub fn fflush(file: *mut FILE) -> c_int;
1098    pub fn fclose(file: *mut FILE) -> c_int;
1099    pub fn remove(filename: *const c_char) -> c_int;
1100    pub fn rename(oldname: *const c_char, newname: *const c_char) -> c_int;
1101    pub fn tmpfile() -> *mut FILE;
1102    pub fn setvbuf(stream: *mut FILE, buffer: *mut c_char, mode: c_int, size: size_t) -> c_int;
1103    pub fn setbuf(stream: *mut FILE, buf: *mut c_char);
1104    pub fn getchar() -> c_int;
1105    pub fn putchar(c: c_int) -> c_int;
1106    pub fn fgetc(stream: *mut FILE) -> c_int;
1107    pub fn fgets(buf: *mut c_char, n: c_int, stream: *mut FILE) -> *mut c_char;
1108    pub fn fputc(c: c_int, stream: *mut FILE) -> c_int;
1109    pub fn fputs(s: *const c_char, stream: *mut FILE) -> c_int;
1110    pub fn puts(s: *const c_char) -> c_int;
1111    pub fn ungetc(c: c_int, stream: *mut FILE) -> c_int;
1112    pub fn fread(ptr: *mut c_void, size: size_t, nobj: size_t, stream: *mut FILE) -> size_t;
1113    pub fn fwrite(ptr: *const c_void, size: size_t, nobj: size_t, stream: *mut FILE) -> size_t;
1114    pub fn fseek(stream: *mut FILE, offset: c_long, whence: c_int) -> c_int;
1115    pub fn ftell(stream: *mut FILE) -> c_long;
1116    pub fn rewind(stream: *mut FILE);
1117    pub fn fgetpos(stream: *mut FILE, ptr: *mut fpos_t) -> c_int;
1118    pub fn fsetpos(stream: *mut FILE, ptr: *const fpos_t) -> c_int;
1119    pub fn feof(stream: *mut FILE) -> c_int;
1120    pub fn ferror(stream: *mut FILE) -> c_int;
1121    pub fn perror(s: *const c_char);
1122    pub fn atof(s: *const c_char) -> c_double;
1123    pub fn atoi(s: *const c_char) -> c_int;
1124    pub fn atol(s: *const c_char) -> c_long;
1125    pub fn atoll(s: *const c_char) -> c_longlong;
1126    pub fn strtod(s: *const c_char, endp: *mut *mut c_char) -> c_double;
1127    pub fn strtof(s: *const c_char, endp: *mut *mut c_char) -> c_float;
1128    pub fn strtol(s: *const c_char, endp: *mut *mut c_char, base: c_int) -> c_long;
1129    pub fn strtoll(s: *const c_char, endp: *mut *mut c_char, base: c_int) -> c_longlong;
1130    pub fn strtoul(s: *const c_char, endp: *mut *mut c_char, base: c_int) -> c_ulong;
1131    pub fn strtoull(s: *const c_char, endp: *mut *mut c_char, base: c_int) -> c_ulonglong;
1132    pub fn calloc(nobj: size_t, size: size_t) -> *mut c_void;
1133    pub fn malloc(size: size_t) -> *mut c_void;
1134    pub fn realloc(p: *mut c_void, size: size_t) -> *mut c_void;
1135    pub fn free(p: *mut c_void);
1136    pub fn abort() -> !;
1137    pub fn exit(status: c_int) -> !;
1138    pub fn atexit(cb: extern "C" fn()) -> c_int;
1139    pub fn system(s: *const c_char) -> c_int;
1140    pub fn getenv(s: *const c_char) -> *mut c_char;
1141
1142    pub fn strcpy(dst: *mut c_char, src: *const c_char) -> *mut c_char;
1143    pub fn strncpy(dst: *mut c_char, src: *const c_char, n: size_t) -> *mut c_char;
1144    pub fn strcat(s: *mut c_char, ct: *const c_char) -> *mut c_char;
1145    pub fn strncat(s: *mut c_char, ct: *const c_char, n: size_t) -> *mut c_char;
1146    pub fn strcmp(cs: *const c_char, ct: *const c_char) -> c_int;
1147    pub fn strncmp(cs: *const c_char, ct: *const c_char, n: size_t) -> c_int;
1148    pub fn strcoll(cs: *const c_char, ct: *const c_char) -> c_int;
1149    pub fn strchr(cs: *const c_char, c: c_int) -> *mut c_char;
1150    pub fn strrchr(cs: *const c_char, c: c_int) -> *mut c_char;
1151    pub fn strspn(cs: *const c_char, ct: *const c_char) -> size_t;
1152    pub fn strcspn(cs: *const c_char, ct: *const c_char) -> size_t;
1153    pub fn strdup(cs: *const c_char) -> *mut c_char;
1154    pub fn strpbrk(cs: *const c_char, ct: *const c_char) -> *mut c_char;
1155    pub fn strstr(cs: *const c_char, ct: *const c_char) -> *mut c_char;
1156    pub fn strcasecmp(s1: *const c_char, s2: *const c_char) -> c_int;
1157    pub fn strncasecmp(s1: *const c_char, s2: *const c_char, n: size_t) -> c_int;
1158    pub fn strlen(cs: *const c_char) -> size_t;
1159    pub fn strerror(n: c_int) -> *mut c_char;
1160    pub fn strtok(s: *mut c_char, t: *const c_char) -> *mut c_char;
1161    pub fn strxfrm(s: *mut c_char, ct: *const c_char, n: size_t) -> size_t;
1162    pub fn wcslen(buf: *const wchar_t) -> size_t;
1163    pub fn wcstombs(dest: *mut c_char, src: *const wchar_t, n: size_t) -> ::size_t;
1164
1165    pub fn memchr(cx: *const c_void, c: c_int, n: size_t) -> *mut c_void;
1166    pub fn wmemchr(cx: *const wchar_t, c: wchar_t, n: size_t) -> *mut wchar_t;
1167    pub fn memcmp(cx: *const c_void, ct: *const c_void, n: size_t) -> c_int;
1168    pub fn memcpy(dest: *mut c_void, src: *const c_void, n: size_t) -> *mut c_void;
1169    pub fn memmove(dest: *mut c_void, src: *const c_void, n: size_t) -> *mut c_void;
1170    pub fn memset(dest: *mut c_void, c: c_int, n: size_t) -> *mut c_void;
1171}
1172
1173extern "C" {
1174    pub fn fprintf(stream: *mut ::FILE, format: *const ::c_char, ...) -> ::c_int;
1175    pub fn printf(format: *const ::c_char, ...) -> ::c_int;
1176    pub fn snprintf(s: *mut ::c_char, n: ::size_t, format: *const ::c_char, ...) -> ::c_int;
1177    pub fn sprintf(s: *mut ::c_char, format: *const ::c_char, ...) -> ::c_int;
1178    pub fn fscanf(stream: *mut ::FILE, format: *const ::c_char, ...) -> ::c_int;
1179    pub fn scanf(format: *const ::c_char, ...) -> ::c_int;
1180    pub fn sscanf(s: *const ::c_char, format: *const ::c_char, ...) -> ::c_int;
1181    pub fn getchar_unlocked() -> ::c_int;
1182    pub fn putchar_unlocked(c: ::c_int) -> ::c_int;
1183    pub fn stat(path: *const c_char, buf: *mut stat) -> ::c_int;
1184    pub fn fdopen(fd: ::c_int, mode: *const c_char) -> *mut ::FILE;
1185    pub fn fileno(stream: *mut ::FILE) -> ::c_int;
1186    pub fn creat(path: *const c_char, mode: mode_t) -> ::c_int;
1187    pub fn rewinddir(dirp: *mut ::DIR);
1188    pub fn fchown(fd: ::c_int, owner: ::uid_t, group: ::gid_t) -> ::c_int;
1189    pub fn access(path: *const c_char, amode: ::c_int) -> ::c_int;
1190    pub fn alarm(seconds: ::c_uint) -> ::c_uint;
1191    pub fn fchdir(dirfd: ::c_int) -> ::c_int;
1192    pub fn chown(path: *const c_char, uid: uid_t, gid: gid_t) -> ::c_int;
1193    pub fn fpathconf(filedes: ::c_int, name: ::c_int) -> c_long;
1194    pub fn getegid() -> gid_t;
1195    pub fn geteuid() -> uid_t;
1196    pub fn getgroups(ngroups_max: ::c_int, groups: *mut gid_t) -> ::c_int;
1197    pub fn getlogin() -> *mut c_char;
1198    pub fn getopt(argc: ::c_int, argv: *const *mut c_char, optstr: *const c_char) -> ::c_int;
1199    pub fn pathconf(path: *const c_char, name: ::c_int) -> c_long;
1200    pub fn pause() -> ::c_int;
1201    pub fn seteuid(uid: uid_t) -> ::c_int;
1202    pub fn setegid(gid: gid_t) -> ::c_int;
1203    pub fn sleep(secs: ::c_uint) -> ::c_uint;
1204    pub fn ttyname(fd: ::c_int) -> *mut c_char;
1205    pub fn wait(status: *mut ::c_int) -> pid_t;
1206    pub fn umask(mask: mode_t) -> mode_t;
1207    pub fn mlock(addr: *const ::c_void, len: ::size_t) -> ::c_int;
1208    pub fn mlockall(flags: ::c_int) -> ::c_int;
1209    pub fn munlockall() -> ::c_int;
1210
1211    pub fn mmap(
1212        addr: *mut ::c_void,
1213        len: ::size_t,
1214        prot: ::c_int,
1215        flags: ::c_int,
1216        fd: ::c_int,
1217        offset: off_t,
1218    ) -> *mut ::c_void;
1219    pub fn munmap(addr: *mut ::c_void, len: ::size_t) -> ::c_int;
1220    pub fn truncate(path: *const c_char, length: off_t) -> ::c_int;
1221
1222    pub fn gettimeofday(tp: *mut ::timeval, tz: *mut ::c_void) -> ::c_int;
1223    pub fn pthread_exit(value: *mut ::c_void) -> !;
1224    pub fn pthread_attr_setdetachstate(attr: *mut ::pthread_attr_t, state: ::c_int) -> ::c_int;
1225
1226    pub fn strerror_r(errnum: ::c_int, buf: *mut c_char, buflen: ::size_t) -> ::c_int;
1227
1228    pub fn sigaddset(set: *mut sigset_t, signum: ::c_int) -> ::c_int;
1229
1230    pub fn sigaction(signum: ::c_int, act: *const sigaction, oldact: *mut sigaction) -> ::c_int;
1231
1232    pub fn utimes(filename: *const ::c_char, times: *const ::timeval) -> ::c_int;
1233
1234    #[link_name = "_rtld_dlopen"]
1235    pub fn dlopen(filename: *const ::c_char, flag: ::c_int) -> *mut ::c_void;
1236
1237    #[link_name = "_rtld_dlerror"]
1238    pub fn dlerror() -> *mut ::c_char;
1239
1240    #[link_name = "_rtld_dlsym"]
1241    pub fn dlsym(handle: *mut ::c_void, symbol: *const ::c_char) -> *mut ::c_void;
1242
1243    #[link_name = "_rtld_dlclose"]
1244    pub fn dlclose(handle: *mut ::c_void) -> ::c_int;
1245
1246    #[link_name = "_rtld_dladdr"]
1247    pub fn dladdr(addr: *mut ::c_void, info: *mut Dl_info) -> ::c_int;
1248
1249    // time.h
1250    pub fn gmtime_r(time_p: *const time_t, result: *mut tm) -> *mut tm;
1251    pub fn localtime_r(time_p: *const time_t, result: *mut tm) -> *mut tm;
1252    pub fn mktime(tm: *mut tm) -> time_t;
1253    pub fn time(time: *mut time_t) -> time_t;
1254    pub fn gmtime(time_p: *const time_t) -> *mut tm;
1255    pub fn localtime(time_p: *const time_t) -> *mut tm;
1256    pub fn timegm(tm: *mut tm) -> time_t;
1257    pub fn difftime(time1: time_t, time0: time_t) -> ::c_double;
1258    pub fn gethostname(name: *mut ::c_char, len: ::size_t) -> ::c_int;
1259    pub fn usleep(secs: ::useconds_t) -> ::c_int;
1260    pub fn putenv(string: *mut c_char) -> ::c_int;
1261    pub fn setlocale(category: ::c_int, locale: *const ::c_char) -> *mut ::c_char;
1262
1263    pub fn sigprocmask(how: ::c_int, set: *const sigset_t, oldset: *mut sigset_t) -> ::c_int;
1264    pub fn sigpending(set: *mut sigset_t) -> ::c_int;
1265
1266    pub fn mkfifo(path: *const c_char, mode: mode_t) -> ::c_int;
1267
1268    pub fn fseeko(stream: *mut ::FILE, offset: ::off_t, whence: ::c_int) -> ::c_int;
1269    pub fn ftello(stream: *mut ::FILE) -> ::off_t;
1270    pub fn mkstemp(template: *mut ::c_char) -> ::c_int;
1271
1272    pub fn tmpnam(ptr: *mut ::c_char) -> *mut ::c_char;
1273
1274    pub fn openlog(ident: *const ::c_char, logopt: ::c_int, facility: ::c_int);
1275    pub fn closelog();
1276    pub fn setlogmask(maskpri: ::c_int) -> ::c_int;
1277    pub fn syslog(priority: ::c_int, message: *const ::c_char, ...);
1278    pub fn getline(lineptr: *mut *mut c_char, n: *mut size_t, stream: *mut FILE) -> ssize_t;
1279
1280}
1281
1282extern "C" {
1283    // stdlib.h
1284    pub fn memalign(block_size: ::size_t, size_arg: ::size_t) -> *mut ::c_void;
1285
1286    // ioLib.h
1287    pub fn getcwd(buf: *mut ::c_char, size: ::size_t) -> *mut ::c_char;
1288
1289    // ioLib.h
1290    pub fn chdir(attr: *const ::c_char) -> ::c_int;
1291
1292    // pthread.h
1293    pub fn pthread_mutexattr_init(attr: *mut pthread_mutexattr_t) -> ::c_int;
1294
1295    // pthread.h
1296    pub fn pthread_mutexattr_destroy(attr: *mut pthread_mutexattr_t) -> ::c_int;
1297
1298    // pthread.h
1299    pub fn pthread_mutexattr_settype(pAttr: *mut ::pthread_mutexattr_t, pType: ::c_int) -> ::c_int;
1300
1301    // pthread.h
1302    pub fn pthread_mutex_init(
1303        mutex: *mut pthread_mutex_t,
1304        attr: *const pthread_mutexattr_t,
1305    ) -> ::c_int;
1306
1307    // pthread.h
1308    pub fn pthread_mutex_destroy(mutex: *mut pthread_mutex_t) -> ::c_int;
1309
1310    // pthread.h
1311    pub fn pthread_mutex_lock(mutex: *mut pthread_mutex_t) -> ::c_int;
1312
1313    // pthread.h
1314    pub fn pthread_mutex_trylock(mutex: *mut pthread_mutex_t) -> ::c_int;
1315
1316    // pthread.h
1317    pub fn pthread_mutex_timedlock(attr: *mut pthread_mutex_t, spec: *const timespec) -> ::c_int;
1318
1319    // pthread.h
1320    pub fn pthread_mutex_unlock(mutex: *mut pthread_mutex_t) -> ::c_int;
1321
1322    // pthread.h
1323    pub fn pthread_attr_setname(pAttr: *mut ::pthread_attr_t, name: *mut ::c_char) -> ::c_int;
1324
1325    // pthread.h
1326    pub fn pthread_attr_setstacksize(attr: *mut ::pthread_attr_t, stacksize: ::size_t) -> ::c_int;
1327
1328    // pthread.h
1329    pub fn pthread_attr_getstacksize(attr: *const ::pthread_attr_t, size: *mut ::size_t)
1330        -> ::c_int;
1331
1332    // pthread.h
1333    pub fn pthread_attr_init(attr: *mut ::pthread_attr_t) -> ::c_int;
1334
1335    // pthread.h
1336    pub fn pthread_create(
1337        pThread: *mut ::pthread_t,
1338        pAttr: *const ::pthread_attr_t,
1339        start_routine: extern "C" fn(*mut ::c_void) -> *mut ::c_void,
1340        value: *mut ::c_void,
1341    ) -> ::c_int;
1342
1343    // pthread.h
1344    pub fn pthread_attr_destroy(thread: *mut ::pthread_attr_t) -> ::c_int;
1345
1346    // pthread.h
1347    pub fn pthread_detach(thread: ::pthread_t) -> ::c_int;
1348
1349    // int pthread_atfork (void (*)(void), void (*)(void), void (*)(void));
1350    pub fn pthread_atfork(
1351        prepare: ::Option<unsafe extern "C" fn()>,
1352        parent: ::Option<unsafe extern "C" fn()>,
1353        child: ::Option<unsafe extern "C" fn()>,
1354    ) -> ::c_int;
1355    // stat.h
1356    pub fn fstat(fildes: ::c_int, buf: *mut stat) -> ::c_int;
1357
1358    // stat.h
1359    pub fn lstat(path: *const ::c_char, buf: *mut stat) -> ::c_int;
1360
1361    // unistd.h
1362    pub fn ftruncate(fd: ::c_int, length: off_t) -> ::c_int;
1363
1364    // dirent.h
1365    pub fn readdir_r(pDir: *mut ::DIR, entry: *mut ::dirent, result: *mut *mut ::dirent)
1366        -> ::c_int;
1367
1368    // dirent.h
1369    pub fn readdir(pDir: *mut ::DIR) -> *mut ::dirent;
1370
1371    // fcntl.h or
1372    // ioLib.h
1373    pub fn open(path: *const ::c_char, oflag: ::c_int, ...) -> ::c_int;
1374
1375    // poll.h
1376    pub fn poll(fds: *mut pollfd, nfds: nfds_t, timeout: ::c_int) -> ::c_int;
1377
1378    // pthread.h
1379    pub fn pthread_condattr_init(attr: *mut ::pthread_condattr_t) -> ::c_int;
1380
1381    // pthread.h
1382    pub fn pthread_condattr_destroy(attr: *mut ::pthread_condattr_t) -> ::c_int;
1383
1384    // pthread.h
1385    pub fn pthread_condattr_getclock(
1386        pAttr: *const ::pthread_condattr_t,
1387        pClockId: *mut ::clockid_t,
1388    ) -> ::c_int;
1389
1390    // pthread.h
1391    pub fn pthread_condattr_setclock(
1392        pAttr: *mut ::pthread_condattr_t,
1393        clockId: ::clockid_t,
1394    ) -> ::c_int;
1395
1396    // pthread.h
1397    pub fn pthread_cond_init(
1398        cond: *mut ::pthread_cond_t,
1399        attr: *const ::pthread_condattr_t,
1400    ) -> ::c_int;
1401
1402    // pthread.h
1403    pub fn pthread_cond_destroy(cond: *mut pthread_cond_t) -> ::c_int;
1404
1405    // pthread.h
1406    pub fn pthread_cond_signal(cond: *mut ::pthread_cond_t) -> ::c_int;
1407
1408    // pthread.h
1409    pub fn pthread_cond_broadcast(cond: *mut ::pthread_cond_t) -> ::c_int;
1410
1411    // pthread.h
1412    pub fn pthread_cond_wait(cond: *mut ::pthread_cond_t, mutex: *mut ::pthread_mutex_t)
1413        -> ::c_int;
1414
1415    // pthread.h
1416    pub fn pthread_rwlockattr_init(attr: *mut ::pthread_rwlockattr_t) -> ::c_int;
1417
1418    // pthread.h
1419    pub fn pthread_rwlockattr_destroy(attr: *mut ::pthread_rwlockattr_t) -> ::c_int;
1420
1421    // pthread.h
1422    pub fn pthread_rwlockattr_setmaxreaders(
1423        attr: *mut ::pthread_rwlockattr_t,
1424        attr2: ::c_uint,
1425    ) -> ::c_int;
1426
1427    // pthread.h
1428    pub fn pthread_rwlock_init(
1429        attr: *mut ::pthread_rwlock_t,
1430        host: *const ::pthread_rwlockattr_t,
1431    ) -> ::c_int;
1432
1433    // pthread.h
1434    pub fn pthread_rwlock_destroy(attr: *mut ::pthread_rwlock_t) -> ::c_int;
1435
1436    // pthread.h
1437    pub fn pthread_rwlock_rdlock(attr: *mut ::pthread_rwlock_t) -> ::c_int;
1438
1439    // pthread.h
1440    pub fn pthread_rwlock_tryrdlock(attr: *mut ::pthread_rwlock_t) -> ::c_int;
1441
1442    // pthread.h
1443    pub fn pthread_rwlock_timedrdlock(
1444        attr: *mut ::pthread_rwlock_t,
1445        host: *const ::timespec,
1446    ) -> ::c_int;
1447
1448    // pthread.h
1449    pub fn pthread_rwlock_wrlock(attr: *mut ::pthread_rwlock_t) -> ::c_int;
1450
1451    // pthread.h
1452    pub fn pthread_rwlock_trywrlock(attr: *mut ::pthread_rwlock_t) -> ::c_int;
1453
1454    // pthread.h
1455    pub fn pthread_rwlock_timedwrlock(
1456        attr: *mut ::pthread_rwlock_t,
1457        host: *const ::timespec,
1458    ) -> ::c_int;
1459
1460    // pthread.h
1461    pub fn pthread_rwlock_unlock(attr: *mut ::pthread_rwlock_t) -> ::c_int;
1462
1463    // pthread.h
1464    pub fn pthread_key_create(
1465        key: *mut ::pthread_key_t,
1466        dtor: ::Option<unsafe extern "C" fn(*mut ::c_void)>,
1467    ) -> ::c_int;
1468
1469    // pthread.h
1470    pub fn pthread_key_delete(key: ::pthread_key_t) -> ::c_int;
1471
1472    // pthread.h
1473    pub fn pthread_setspecific(key: ::pthread_key_t, value: *const ::c_void) -> ::c_int;
1474
1475    // pthread.h
1476    pub fn pthread_getspecific(key: ::pthread_key_t) -> *mut ::c_void;
1477
1478    // pthread.h
1479    pub fn pthread_cond_timedwait(
1480        cond: *mut ::pthread_cond_t,
1481        mutex: *mut ::pthread_mutex_t,
1482        abstime: *const ::timespec,
1483    ) -> ::c_int;
1484
1485    // pthread.h
1486    pub fn pthread_attr_getname(attr: *mut ::pthread_attr_t, name: *mut *mut ::c_char) -> ::c_int;
1487
1488    // pthread.h
1489    pub fn pthread_join(thread: ::pthread_t, status: *mut *mut ::c_void) -> ::c_int;
1490
1491    // pthread.h
1492    pub fn pthread_self() -> ::pthread_t;
1493
1494    // clockLib.h
1495    pub fn clock_gettime(clock_id: ::clockid_t, tp: *mut ::timespec) -> ::c_int;
1496
1497    // clockLib.h
1498    pub fn clock_settime(clock_id: ::clockid_t, tp: *const ::timespec) -> ::c_int;
1499
1500    // clockLib.h
1501    pub fn clock_getres(clock_id: ::clockid_t, res: *mut ::timespec) -> ::c_int;
1502
1503    // clockLib.h
1504    pub fn clock_nanosleep(
1505        clock_id: ::clockid_t,
1506        flags: ::c_int,
1507        rqtp: *const ::timespec,
1508        rmtp: *mut ::timespec,
1509    ) -> ::c_int;
1510
1511    // timerLib.h
1512    pub fn nanosleep(rqtp: *const ::timespec, rmtp: *mut ::timespec) -> ::c_int;
1513
1514    // socket.h
1515    pub fn accept(s: ::c_int, addr: *mut ::sockaddr, addrlen: *mut ::socklen_t) -> ::c_int;
1516
1517    // socket.h
1518    pub fn bind(fd: ::c_int, addr: *const sockaddr, len: socklen_t) -> ::c_int;
1519
1520    // socket.h
1521    pub fn connect(s: ::c_int, name: *const ::sockaddr, namelen: ::socklen_t) -> ::c_int;
1522
1523    // socket.h
1524    pub fn getpeername(s: ::c_int, name: *mut ::sockaddr, namelen: *mut ::socklen_t) -> ::c_int;
1525
1526    // socket.h
1527    pub fn getsockname(
1528        socket: ::c_int,
1529        address: *mut sockaddr,
1530        address_len: *mut socklen_t,
1531    ) -> ::c_int;
1532
1533    // socket.h
1534    pub fn getsockopt(
1535        sockfd: ::c_int,
1536        level: ::c_int,
1537        optname: ::c_int,
1538        optval: *mut ::c_void,
1539        optlen: *mut ::socklen_t,
1540    ) -> ::c_int;
1541
1542    // socket.h
1543    pub fn listen(socket: ::c_int, backlog: ::c_int) -> ::c_int;
1544
1545    // socket.h
1546    pub fn recv(s: ::c_int, buf: *mut ::c_void, bufLen: ::size_t, flags: ::c_int) -> ::ssize_t;
1547
1548    // socket.h
1549    pub fn recvfrom(
1550        s: ::c_int,
1551        buf: *mut ::c_void,
1552        bufLen: ::size_t,
1553        flags: ::c_int,
1554        from: *mut ::sockaddr,
1555        pFromLen: *mut ::socklen_t,
1556    ) -> ::ssize_t;
1557
1558    pub fn recvmsg(socket: ::c_int, mp: *mut ::msghdr, flags: ::c_int) -> ::ssize_t;
1559
1560    // socket.h
1561    pub fn send(socket: ::c_int, buf: *const ::c_void, len: ::size_t, flags: ::c_int) -> ::ssize_t;
1562
1563    pub fn sendmsg(socket: ::c_int, mp: *const ::msghdr, flags: ::c_int) -> ::ssize_t;
1564
1565    // socket.h
1566    pub fn sendto(
1567        socket: ::c_int,
1568        buf: *const ::c_void,
1569        len: ::size_t,
1570        flags: ::c_int,
1571        addr: *const sockaddr,
1572        addrlen: socklen_t,
1573    ) -> ::ssize_t;
1574
1575    // socket.h
1576    pub fn setsockopt(
1577        socket: ::c_int,
1578        level: ::c_int,
1579        name: ::c_int,
1580        value: *const ::c_void,
1581        option_len: socklen_t,
1582    ) -> ::c_int;
1583
1584    // socket.h
1585    pub fn shutdown(s: ::c_int, how: ::c_int) -> ::c_int;
1586
1587    // socket.h
1588    pub fn socket(domain: ::c_int, _type: ::c_int, protocol: ::c_int) -> ::c_int;
1589
1590    // icotl.h
1591    pub fn ioctl(fd: ::c_int, request: ::c_int, ...) -> ::c_int;
1592
1593    // fcntl.h
1594    pub fn fcntl(fd: ::c_int, cmd: ::c_int, ...) -> ::c_int;
1595
1596    // ntp_rfc2553.h for kernel
1597    // netdb.h for user
1598    pub fn gai_strerror(errcode: ::c_int) -> *mut ::c_char;
1599
1600    // ioLib.h or
1601    // unistd.h
1602    pub fn close(fd: ::c_int) -> ::c_int;
1603
1604    // ioLib.h or
1605    // unistd.h
1606    pub fn read(fd: ::c_int, buf: *mut ::c_void, count: ::size_t) -> ::ssize_t;
1607
1608    // ioLib.h or
1609    // unistd.h
1610    pub fn write(fd: ::c_int, buf: *const ::c_void, count: ::size_t) -> ::ssize_t;
1611
1612    // ioLib.h or
1613    // unistd.h
1614    pub fn isatty(fd: ::c_int) -> ::c_int;
1615
1616    // ioLib.h or
1617    // unistd.h
1618    pub fn dup(src: ::c_int) -> ::c_int;
1619
1620    // ioLib.h or
1621    // unistd.h
1622    pub fn dup2(src: ::c_int, dst: ::c_int) -> ::c_int;
1623
1624    // ioLib.h or
1625    // unistd.h
1626    pub fn pipe(fds: *mut ::c_int) -> ::c_int;
1627
1628    // ioLib.h or
1629    // unistd.h
1630    pub fn unlink(pathname: *const ::c_char) -> ::c_int;
1631
1632    // unistd.h and
1633    // ioLib.h
1634    pub fn lseek(fd: ::c_int, offset: off_t, whence: ::c_int) -> off_t;
1635
1636    // netdb.h
1637    pub fn getaddrinfo(
1638        node: *const ::c_char,
1639        service: *const ::c_char,
1640        hints: *const addrinfo,
1641        res: *mut *mut addrinfo,
1642    ) -> ::c_int;
1643
1644    // netdb.h
1645    pub fn freeaddrinfo(res: *mut addrinfo);
1646
1647    // signal.h
1648    pub fn signal(signum: ::c_int, handler: sighandler_t) -> sighandler_t;
1649
1650    // unistd.h
1651    pub fn getpid() -> pid_t;
1652
1653    // unistd.h
1654    pub fn getppid() -> pid_t;
1655
1656    // wait.h
1657    pub fn waitpid(pid: pid_t, status: *mut ::c_int, optons: ::c_int) -> pid_t;
1658
1659    // unistd.h
1660    pub fn sysconf(attr: ::c_int) -> ::c_long;
1661
1662    // stdlib.h
1663    pub fn setenv(
1664        // setenv.c
1665        envVarName: *const ::c_char,
1666        envVarValue: *const ::c_char,
1667        overwrite: ::c_int,
1668    ) -> ::c_int;
1669
1670    // stdlib.h
1671    pub fn unsetenv(
1672        // setenv.c
1673        envVarName: *const ::c_char,
1674    ) -> ::c_int;
1675
1676    // stdlib.h
1677    pub fn realpath(fileName: *const ::c_char, resolvedName: *mut ::c_char) -> *mut ::c_char;
1678
1679    // unistd.h
1680    pub fn link(src: *const ::c_char, dst: *const ::c_char) -> ::c_int;
1681
1682    // unistd.h
1683    pub fn readlink(path: *const ::c_char, buf: *mut ::c_char, bufsize: ::size_t) -> ::ssize_t;
1684
1685    // unistd.h
1686    pub fn symlink(path1: *const ::c_char, path2: *const ::c_char) -> ::c_int;
1687
1688    // dirent.h
1689    pub fn opendir(name: *const ::c_char) -> *mut ::DIR;
1690
1691    // unistd.h
1692    pub fn rmdir(path: *const ::c_char) -> ::c_int;
1693
1694    // stat.h
1695    pub fn mkdir(dirName: *const ::c_char, mode: ::mode_t) -> ::c_int;
1696
1697    // stat.h
1698    pub fn chmod(path: *const ::c_char, mode: ::mode_t) -> ::c_int;
1699
1700    // stat.h
1701    pub fn fchmod(attr1: ::c_int, attr2: ::mode_t) -> ::c_int;
1702
1703    // unistd.h
1704    pub fn fsync(fd: ::c_int) -> ::c_int;
1705
1706    // dirent.h
1707    pub fn closedir(ptr: *mut ::DIR) -> ::c_int;
1708
1709    // sched.h
1710    pub fn sched_yield() -> ::c_int;
1711
1712    // errnoLib.h
1713    pub fn errnoSet(err: ::c_int) -> ::c_int;
1714
1715    // errnoLib.h
1716    pub fn errnoGet() -> ::c_int;
1717
1718    // unistd.h
1719    pub fn _exit(status: ::c_int) -> !;
1720
1721    // unistd.h
1722    pub fn setgid(gid: ::gid_t) -> ::c_int;
1723
1724    // unistd.h
1725    pub fn getgid() -> ::gid_t;
1726
1727    // unistd.h
1728    pub fn setuid(uid: ::uid_t) -> ::c_int;
1729
1730    // unistd.h
1731    pub fn getuid() -> ::uid_t;
1732
1733    // signal.h
1734    pub fn sigemptyset(__set: *mut sigset_t) -> ::c_int;
1735
1736    // pthread.h for kernel
1737    // signal.h for user
1738    pub fn pthread_sigmask(
1739        __how: ::c_int,
1740        __set: *const sigset_t,
1741        __oset: *mut sigset_t,
1742    ) -> ::c_int;
1743
1744    // signal.h for user
1745    pub fn kill(__pid: pid_t, __signo: ::c_int) -> ::c_int;
1746
1747    // signal.h for user
1748    pub fn sigqueue(__pid: pid_t, __signo: ::c_int, __value: ::sigval) -> ::c_int;
1749
1750    // signal.h for user
1751    pub fn _sigqueue(
1752        rtpId: ::RTP_ID,
1753        signo: ::c_int,
1754        pValue: *const ::sigval,
1755        sigCode: ::c_int,
1756    ) -> ::c_int;
1757
1758    // signal.h
1759    pub fn taskKill(taskId: ::TASK_ID, signo: ::c_int) -> ::c_int;
1760
1761    // signal.h
1762    pub fn raise(__signo: ::c_int) -> ::c_int;
1763
1764    // taskLibCommon.h
1765    pub fn taskIdSelf() -> ::TASK_ID;
1766    pub fn taskDelay(ticks: ::_Vx_ticks_t) -> ::c_int;
1767
1768    // rtpLibCommon.h
1769    pub fn rtpInfoGet(rtpId: ::RTP_ID, rtpStruct: *mut ::RTP_DESC) -> ::c_int;
1770    pub fn rtpSpawn(
1771        pubrtpFileName: *const ::c_char,
1772        argv: *mut *const ::c_char,
1773        envp: *mut *const ::c_char,
1774        priority: ::c_int,
1775        uStackSize: ::size_t,
1776        options: ::c_int,
1777        taskOptions: ::c_int,
1778    ) -> RTP_ID;
1779
1780    // ioLib.h
1781    pub fn _realpath(fileName: *const ::c_char, resolvedName: *mut ::c_char) -> *mut ::c_char;
1782
1783    // pathLib.h
1784    pub fn _pathIsAbsolute(filepath: *const ::c_char, pNameTail: *mut *const ::c_char) -> BOOL;
1785
1786    pub fn writev(fd: ::c_int, iov: *const ::iovec, iovcnt: ::c_int) -> ::ssize_t;
1787    pub fn readv(fd: ::c_int, iov: *const ::iovec, iovcnt: ::c_int) -> ::ssize_t;
1788
1789    // randomNumGen.h
1790    pub fn randBytes(buf: *mut c_uchar, length: c_int) -> c_int;
1791    pub fn randABytes(buf: *mut c_uchar, length: c_int) -> c_int;
1792    pub fn randUBytes(buf: *mut c_uchar, length: c_int) -> c_int;
1793    pub fn randSecure() -> c_int;
1794
1795    // mqueue.h
1796    pub fn mq_open(name: *const ::c_char, oflag: ::c_int, ...) -> ::mqd_t;
1797    pub fn mq_close(mqd: ::mqd_t) -> ::c_int;
1798    pub fn mq_unlink(name: *const ::c_char) -> ::c_int;
1799    pub fn mq_receive(
1800        mqd: ::mqd_t,
1801        msg_ptr: *mut ::c_char,
1802        msg_len: ::size_t,
1803        msg_prio: *mut ::c_uint,
1804    ) -> ::ssize_t;
1805    pub fn mq_timedreceive(
1806        mqd: ::mqd_t,
1807        msg_ptr: *mut ::c_char,
1808        msg_len: ::size_t,
1809        msg_prio: *mut ::c_uint,
1810        abs_timeout: *const ::timespec,
1811    ) -> ::ssize_t;
1812    pub fn mq_send(
1813        mqd: ::mqd_t,
1814        msg_ptr: *const ::c_char,
1815        msg_len: ::size_t,
1816        msg_prio: ::c_uint,
1817    ) -> ::c_int;
1818    pub fn mq_timedsend(
1819        mqd: ::mqd_t,
1820        msg_ptr: *const ::c_char,
1821        msg_len: ::size_t,
1822        msg_prio: ::c_uint,
1823        abs_timeout: *const ::timespec,
1824    ) -> ::c_int;
1825    pub fn mq_getattr(mqd: ::mqd_t, attr: *mut ::mq_attr) -> ::c_int;
1826    pub fn mq_setattr(mqd: ::mqd_t, newattr: *const ::mq_attr, oldattr: *mut ::mq_attr) -> ::c_int;
1827}
1828
1829//Dummy functions, these don't really exist in VxWorks.
1830
1831// wait.h macros
1832safe_f! {
1833    pub {const} fn WIFEXITED(status: ::c_int) -> bool {
1834        (status & 0xFF00) == 0
1835    }
1836    pub {const} fn WIFSIGNALED(status: ::c_int) -> bool {
1837        (status & 0xFF00) != 0
1838    }
1839    pub {const} fn WIFSTOPPED(status: ::c_int) -> bool {
1840        (status & 0xFF0000) != 0
1841    }
1842    pub {const} fn WEXITSTATUS(status: ::c_int) -> ::c_int {
1843        status & 0xFF
1844    }
1845    pub {const} fn WTERMSIG(status: ::c_int) -> ::c_int {
1846        (status >> 8) & 0xFF
1847    }
1848    pub {const} fn WSTOPSIG(status: ::c_int) -> ::c_int {
1849        (status >> 16) & 0xFF
1850    }
1851}
1852
1853pub fn pread(_fd: ::c_int, _buf: *mut ::c_void, _count: ::size_t, _offset: off64_t) -> ::ssize_t {
1854    -1
1855}
1856
1857pub fn pwrite(
1858    _fd: ::c_int,
1859    _buf: *const ::c_void,
1860    _count: ::size_t,
1861    _offset: off64_t,
1862) -> ::ssize_t {
1863    -1
1864}
1865pub fn posix_memalign(memptr: *mut *mut ::c_void, align: ::size_t, size: ::size_t) -> ::c_int {
1866    // check to see if align is a power of 2 and if align is a multiple
1867    //  of sizeof(void *)
1868    if (align & align - 1 != 0) || (align as usize % size_of::<::size_t>() != 0) {
1869        return ::EINVAL;
1870    }
1871
1872    unsafe {
1873        // posix_memalign should not set errno
1874        let e = ::errnoGet();
1875
1876        let temp = memalign(align, size);
1877        ::errnoSet(e as ::c_int);
1878
1879        if temp.is_null() {
1880            ::ENOMEM
1881        } else {
1882            *memptr = temp;
1883            0
1884        }
1885    }
1886}
1887
1888cfg_if! {
1889    if #[cfg(libc_core_cvoid)] {
1890        pub use ::ffi::c_void;
1891    } else {
1892        // Use repr(u8) as LLVM expects `void*` to be the same as `i8*` to help
1893        // enable more optimization opportunities around it recognizing things
1894        // like malloc/free.
1895        #[repr(u8)]
1896        #[allow(missing_copy_implementations)]
1897        #[allow(missing_debug_implementations)]
1898        pub enum c_void {
1899            // Two dummy variants so the #[repr] attribute can be used.
1900            #[doc(hidden)]
1901            __variant1,
1902            #[doc(hidden)]
1903            __variant2,
1904        }
1905    }
1906}
1907
1908cfg_if! {
1909    if #[cfg(target_arch = "aarch64")] {
1910        mod aarch64;
1911        pub use self::aarch64::*;
1912    } else if #[cfg(any(target_arch = "arm"))] {
1913        mod arm;
1914        pub use self::arm::*;
1915    }  else if #[cfg(any(target_arch = "x86"))] {
1916        mod x86;
1917        pub use self::x86::*;
1918    } else if #[cfg(any(target_arch = "x86_64"))] {
1919        mod x86_64;
1920        pub use self::x86_64::*;
1921    } else if #[cfg(any(target_arch = "powerpc"))] {
1922        mod powerpc;
1923        pub use self::powerpc::*;
1924    } else if #[cfg(any(target_arch = "powerpc64"))] {
1925        mod powerpc64;
1926        pub use self::powerpc64::*;
1927    } else {
1928        // Unknown target_arch
1929    }
1930}
1931