1#ifndef __ASM_GENERIC_POSIX_TYPES_H 2#define __ASM_GENERIC_POSIX_TYPES_H 3 4#include <asm/bitsperlong.h> 5/* 6 * This file is generally used by user-level software, so you need to 7 * be a little careful about namespace pollution etc. 8 * 9 * First the types that are often defined in different ways across 10 * architectures, so that you can override them. 11 */ 12 13#ifndef __kernel_ino_t 14typedef unsigned long __kernel_ino_t; 15#endif 16 17#ifndef __kernel_mode_t 18typedef unsigned int __kernel_mode_t; 19#endif 20 21#ifndef __kernel_nlink_t 22typedef unsigned long __kernel_nlink_t; 23#endif 24 25#ifndef __kernel_pid_t 26typedef int __kernel_pid_t; 27#endif 28 29#ifndef __kernel_ipc_pid_t 30typedef int __kernel_ipc_pid_t; 31#endif 32 33#ifndef __kernel_uid_t 34typedef unsigned int __kernel_uid_t; 35typedef unsigned int __kernel_gid_t; 36#endif 37 38#ifndef __kernel_suseconds_t 39typedef long __kernel_suseconds_t; 40#endif 41 42#ifndef __kernel_daddr_t 43typedef int __kernel_daddr_t; 44#endif 45 46#ifndef __kernel_uid32_t 47typedef __kernel_uid_t __kernel_uid32_t; 48typedef __kernel_gid_t __kernel_gid32_t; 49#endif 50 51#ifndef __kernel_old_uid_t 52typedef __kernel_uid_t __kernel_old_uid_t; 53typedef __kernel_gid_t __kernel_old_gid_t; 54#endif 55 56#ifndef __kernel_old_dev_t 57typedef unsigned int __kernel_old_dev_t; 58#endif 59 60/* 61 * Most 32 bit architectures use "unsigned int" size_t, 62 * and all 64 bit architectures use "unsigned long" size_t. 63 */ 64#ifndef __kernel_size_t 65#if __BITS_PER_LONG != 64 66typedef unsigned int __kernel_size_t; 67typedef int __kernel_ssize_t; 68typedef int __kernel_ptrdiff_t; 69#else 70typedef unsigned long __kernel_size_t; 71typedef long __kernel_ssize_t; 72typedef long __kernel_ptrdiff_t; 73#endif 74#endif 75 76/* 77 * anything below here should be completely generic 78 */ 79typedef long __kernel_off_t; 80typedef long long __kernel_loff_t; 81typedef long __kernel_time_t; 82typedef long __kernel_clock_t; 83typedef int __kernel_timer_t; 84typedef int __kernel_clockid_t; 85typedef char * __kernel_caddr_t; 86typedef unsigned short __kernel_uid16_t; 87typedef unsigned short __kernel_gid16_t; 88 89typedef struct { 90 int val[2]; 91} __kernel_fsid_t; 92 93#ifdef __KERNEL__ 94 95#undef __FD_SET 96static inline void __FD_SET(unsigned long __fd, __kernel_fd_set *__fdsetp) 97{ 98 unsigned long __tmp = __fd / __NFDBITS; 99 unsigned long __rem = __fd % __NFDBITS; 100 __fdsetp->fds_bits[__tmp] |= (1UL<<__rem); 101} 102 103#undef __FD_CLR 104static inline void __FD_CLR(unsigned long __fd, __kernel_fd_set *__fdsetp) 105{ 106 unsigned long __tmp = __fd / __NFDBITS; 107 unsigned long __rem = __fd % __NFDBITS; 108 __fdsetp->fds_bits[__tmp] &= ~(1UL<<__rem); 109} 110 111#undef __FD_ISSET 112static inline int __FD_ISSET(unsigned long __fd, const __kernel_fd_set *__p) 113{ 114 unsigned long __tmp = __fd / __NFDBITS; 115 unsigned long __rem = __fd % __NFDBITS; 116 return (__p->fds_bits[__tmp] & (1UL<<__rem)) != 0; 117} 118 119/* 120 * This will unroll the loop for the normal constant case (8 ints, 121 * for a 256-bit fd_set) 122 */ 123#undef __FD_ZERO 124static inline void __FD_ZERO(__kernel_fd_set *__p) 125{ 126 unsigned long *__tmp = __p->fds_bits; 127 int __i; 128 129 if (__builtin_constant_p(__FDSET_LONGS)) { 130 switch (__FDSET_LONGS) { 131 case 16: 132 __tmp[ 0] = 0; __tmp[ 1] = 0; 133 __tmp[ 2] = 0; __tmp[ 3] = 0; 134 __tmp[ 4] = 0; __tmp[ 5] = 0; 135 __tmp[ 6] = 0; __tmp[ 7] = 0; 136 __tmp[ 8] = 0; __tmp[ 9] = 0; 137 __tmp[10] = 0; __tmp[11] = 0; 138 __tmp[12] = 0; __tmp[13] = 0; 139 __tmp[14] = 0; __tmp[15] = 0; 140 return; 141 142 case 8: 143 __tmp[ 0] = 0; __tmp[ 1] = 0; 144 __tmp[ 2] = 0; __tmp[ 3] = 0; 145 __tmp[ 4] = 0; __tmp[ 5] = 0; 146 __tmp[ 6] = 0; __tmp[ 7] = 0; 147 return; 148 149 case 4: 150 __tmp[ 0] = 0; __tmp[ 1] = 0; 151 __tmp[ 2] = 0; __tmp[ 3] = 0; 152 return; 153 } 154 } 155 __i = __FDSET_LONGS; 156 while (__i) { 157 __i--; 158 *__tmp = 0; 159 __tmp++; 160 } 161} 162 163#endif /* __KERNEL__ */ 164 165#endif /* __ASM_GENERIC_POSIX_TYPES_H */ 166