| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589 | /** * D header file for POSIX. * * Copyright: Public Domain * License: Public Domain * Authors: Sean Kelly * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition */ module tango.stdc.posix.sys.types; private import tango.stdc.posix.config; private import tango.stdc.stdint; public import tango.stdc.stddef; // for size_t public import tango.stdc.time; // for clock_t, time_t extern (C): // // Required // /* blkcnt_t blksize_t dev_t gid_t ino_t mode_t nlink_t off_t pid_t size_t ssize_t time_t uid_t */ version( linux ) { alias c_ulong ino_t; static if( __USE_LARGEFILE64 ) { alias long off_t; // actually C header's off64_t in this mode alias long blkcnt_t; // actually C header's blkcnt64_t in this mode alias ulong ino64_t; alias ino64_t inol_t; } else { alias c_long off_t; alias c_long blkcnt_t; alias ino_t inol_t; } alias ulong dev_t; alias uint mode_t; alias c_ulong nlink_t; alias uint uid_t; alias uint gid_t; alias c_long blksize_t; alias int pid_t; //size_t (defined in tango.stdc.stddef) alias ptrdiff_t ssize_t; //time_t (defined in tango.stdc.time) } else version( darwin ) { alias long blkcnt_t; alias int blksize_t; alias int dev_t; alias uint gid_t; alias uint ino_t; alias ino_t inol_t; alias ushort mode_t; alias ushort nlink_t; alias long off_t; alias int pid_t; //size_t (defined in tango.stdc.stddef) alias ptrdiff_t ssize_t; //time_t (defined in tango.stdc.time) alias uint uid_t; } else version( FreeBSD ) { alias long blkcnt_t; alias uint blksize_t; alias uint dev_t; alias uint gid_t; alias uint ino_t; alias ino_t inol_t; alias ushort mode_t; alias ushort nlink_t; alias long off_t; alias int pid_t; //size_t (defined in tango.stdc.stddef) alias ptrdiff_t ssize_t; //time_t (defined in tango.stdc.time) alias uint uid_t; alias uint fflags_t; } else version( solaris ) { alias c_ulong ino_t; static if( __USE_LARGEFILE64 ) { alias long off_t; alias long blkcnt_t; alias ulong ino64_t; alias ino64_t inol_t; } else { alias c_long off_t; alias c_long blkcnt_t; alias ino_t inol_t; } alias int blksize_t; alias c_ulong dev_t; alias uint mode_t; alias uint nlink_t; alias uint uid_t; alias uint gid_t; alias int pid_t; //size_t (defined in tango.stdc.stddef) alias ptrdiff_t ssize_t; //time_t (defined in tango.stdc.time) alias char* caddr_t; /* ?<core address> type */ alias c_long daddr_t; /* <disk address> type */ alias short cnt_t; /* ?<count> type */ } // // XOpen (XSI) // /* clock_t fsblkcnt_t fsfilcnt_t id_t key_t suseconds_t useconds_t */ version( linux ) { static if( __USE_LARGEFILE64 ) { alias ulong fsblkcnt_t; alias ulong fsfilcnt_t; } else { alias c_ulong fsblkcnt_t; alias c_ulong fsfilcnt_t; } // clock_t (defined in tango.stdc.time) alias uint id_t; alias int key_t; alias c_long suseconds_t; alias uint useconds_t; } else version( darwin ) { //clock_t alias uint fsblkcnt_t; alias uint fsfilcnt_t; alias uint id_t; // key_t alias int suseconds_t; alias uint useconds_t; } else version( FreeBSD ) { //clock_t alias ulong fsblkcnt_t; alias ulong fsfilcnt_t; alias long id_t; alias c_long key_t; alias c_long suseconds_t; alias uint useconds_t; } else version( solaris ) { static if( __USE_LARGEFILE64 ) { alias ulong fsblkcnt_t; alias ulong fsfilcnt_t; } else { alias c_ulong fsblkcnt_t; alias c_ulong fsfilcnt_t; } // clock_t (defined in tango.stdc.time) alias int id_t; alias int key_t; alias c_long suseconds_t; alias uint useconds_t; } // // Thread (THR) // /* pthread_attr_t pthread_cond_t pthread_condattr_t pthread_key_t pthread_mutex_t pthread_mutexattr_t pthread_once_t pthread_rwlock_t pthread_rwlockattr_t pthread_t */ version( linux ) { private struct __sched_param { int __sched_priority; } struct pthread_attr_t { int __detachstate; int __schedpolicy; __sched_param __schedparam; int __inheritsched; int __scope; size_t __guardsize; int __stackaddr_set; void* __stackaddr; size_t __stacksize; } private alias int __atomic_lock_t; private struct _pthread_fastlock { c_long __status; __atomic_lock_t __spinlock; } private alias void* _pthread_descr; private alias long __pthread_cond_align_t; struct pthread_cond_t { _pthread_fastlock __c_lock; _pthread_descr __c_waiting; char[48 - _pthread_fastlock.sizeof - _pthread_descr.sizeof - __pthread_cond_align_t.sizeof] __padding; __pthread_cond_align_t __align; } struct pthread_condattr_t { int __dummy; } alias uint pthread_key_t; struct pthread_mutex_t { int __m_reserved; int __m_count; _pthread_descr __m_owner; int __m_kind; _pthread_fastlock __m_lock; } struct pthread_mutexattr_t { int __mutexkind; } alias int pthread_once_t; struct pthread_rwlock_t { _pthread_fastlock __rw_lock; int __rw_readers; _pthread_descr __rw_writer; _pthread_descr __rw_read_waiting; _pthread_descr __rw_write_waiting; int __rw_kind; int __rw_pshared; } struct pthread_rwlockattr_t { int __lockkind; int __pshared; } alias c_ulong pthread_t; } else version( darwin ) { private { static if ((void*).sizeof>int.sizeof) { // version( LP64 ) const __PTHREAD_SIZE__ = 1168; const __PTHREAD_ATTR_SIZE__ = 56; const __PTHREAD_MUTEXATTR_SIZE__ = 8; const __PTHREAD_MUTEX_SIZE__ = 56; const __PTHREAD_CONDATTR_SIZE__ = 8; const __PTHREAD_COND_SIZE__ = 40; const __PTHREAD_ONCE_SIZE__ = 8; const __PTHREAD_RWLOCK_SIZE__ = 192; const __PTHREAD_RWLOCKATTR_SIZE__ = 16; } else { const __PTHREAD_SIZE__ = 596; const __PTHREAD_ATTR_SIZE__ = 36; const __PTHREAD_MUTEXATTR_SIZE__ = 8; const __PTHREAD_MUTEX_SIZE__ = 40; const __PTHREAD_CONDATTR_SIZE__ = 4; const __PTHREAD_COND_SIZE__ = 24; const __PTHREAD_ONCE_SIZE__ = 4; const __PTHREAD_RWLOCK_SIZE__ = 124; const __PTHREAD_RWLOCKATTR_SIZE__ = 12; } } struct pthread_handler_rec { void function(void*) __routine; void* __arg; pthread_handler_rec* __next; } struct pthread_attr_t { c_long __sig; byte[__PTHREAD_ATTR_SIZE__] __opaque; } struct pthread_cond_t { c_long __sig; byte[__PTHREAD_COND_SIZE__] __opaque; } struct pthread_condattr_t { c_long __sig; byte[__PTHREAD_CONDATTR_SIZE__] __opaque; } alias c_ulong pthread_key_t; struct pthread_mutex_t { c_long __sig; byte[__PTHREAD_MUTEX_SIZE__] __opaque; } struct pthread_mutexattr_t { c_long __sig; byte[__PTHREAD_MUTEXATTR_SIZE__] __opaque; } struct pthread_once_t { c_long __sig; byte[__PTHREAD_ONCE_SIZE__] __opaque; } struct pthread_rwlock_t { c_long __sig; byte[__PTHREAD_RWLOCK_SIZE__] __opaque; } struct pthread_rwlockattr_t { c_long __sig; byte[__PTHREAD_RWLOCKATTR_SIZE__] __opaque; } private struct _opaque_pthread_t { c_long __sig; pthread_handler_rec* __cleanup_stack; byte[__PTHREAD_SIZE__] __opaque; } alias _opaque_pthread_t* pthread_t; } else version( FreeBSD ) { alias int lwpid_t; alias void* pthread_attr_t; alias void* pthread_cond_t; alias void* pthread_condattr_t; alias void* pthread_key_t; alias void* pthread_mutex_t; alias void* pthread_mutexattr_t; alias void* pthread_once_t; alias void* pthread_rwlock_t; alias void* pthread_rwlockattr_t; alias void* pthread_t; } else version( solaris ) { struct pthread_attr_t { void* __pthread_attrp; } struct pthread_cond_t { struct __pthread_cond_flags { uint8_t[4] __pthread_cond_flag; uint16_t __pthread_cond_type; uint16_t __pthread_cond_magic; } private upad64_t __pthread_cond_data; } struct pthread_condattr_t { void* __pthread_condattrp; } alias uint pthread_key_t; struct pthread_mutex_t { struct __pthread_mutex_flags { uint16_t __pthread_mutex_flag1; uint8_t __pthread_mutex_flag2; uint8_t __pthread_mutex_ceiling; uint16_t __pthread_mutex_type; uint16_t __pthread_mutex_magic; } union __pthread_mutex_lock { struct __pthread_mutex_lock64 { uint8_t[8] __pthread_mutex_pad; } struct __pthread_mutex_lock32 { uint32_t __pthread_ownerpid; uint32_t __pthread_lockword; } private upad64_t __pthread_mutex_owner64; } private upad64_t __pthread_mutex_data; } struct pthread_mutexattr_t { void* __pthread_mutexattrp; } struct pthread_once_t { private upad64_t[4] __pthread_once_pad; } struct pthread_rwlock_t { int32_t __pthread_rwlock_readers; uint16_t __pthread_rwlock_type; uint16_t __pthread_rwlock_magic; pthread_mutex_t __pthread_rwlock_mutex; pthread_cond_t __pthread_rwlock_readercv; pthread_cond_t __pthread_rwlock_writercv; } struct pthread_rwlockattr_t { void* __pthread_rwlockattrp; } alias uint pthread_t; } // // Barrier (BAR) // /* pthread_barrier_t pthread_barrierattr_t */ version( linux ) { struct pthread_barrier_t { _pthread_fastlock __ba_lock; int __ba_required; int __ba_present; _pthread_descr __ba_waiting; } struct pthread_barrierattr_t { int __pshared; } } else version( darwin ) { // NOTE: The following definitions are Tango-specific because darwin does // not support them directly. struct pthread_barrier_t { pthread_mutex_t b_lock; pthread_cond_t b_cond; int b_count; int b_waiters; int b_generation; } struct pthread_barrierattr_t { int pshared; } } else version( FreeBSD ) { alias void* pthread_barrier_t; alias void* pthread_barrierattr_t; } else version ( solaris ) { struct pthread_barrier_t { uint32_t __pthread_barrier_count; uint32_t __pthread_barrier_current; upad64_t __pthread_barrier_cycle; upad64_t __pthread_barrier_reserved; pthread_mutex_t __pthread_barrier_lock; pthread_cond_t __pthread_barrier_cond; } struct pthread_barrierattr_t { void* __pthread_barrierattrp; } } // // Spin (SPN) // /* pthread_spinlock_t */ version( linux ) { alias int pthread_spinlock_t; // volatile } else version( darwin ) { version (LDC) alias void* pthread_spinlock_t; else struct pthread_spinlock_t; } else version( FreeBSD ) { alias void* pthread_spinlock_t; } else version ( solaris ) { alias pthread_mutex_t pthread_spinlock_t; } // // Timer (TMR) // /* clockid_t timer_t */ // // Trace (TRC) // /* trace_attr_t trace_event_id_t trace_event_set_t trace_id_t */ |