11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * All rights reserved. 41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Redistribution and use in source and binary forms, with or without 61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * modification, are permitted provided that the following conditions 71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * are met: 81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * * Redistributions of source code must retain the above copyright 91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * notice, this list of conditions and the following disclaimer. 101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * * Redistributions in binary form must reproduce the above copyright 111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * notice, this list of conditions and the following disclaimer in 121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * the documentation and/or other materials provided with the 131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * distribution. 141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * SUCH DAMAGE. 271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef _SYS_TYPES_H_ 291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define _SYS_TYPES_H_ 301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <stddef.h> 321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <stdint.h> 331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/cdefs.h> 341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <linux/types.h> 362b333ea31ec5b5b4627f14b22253b017b346638aElliott Hughes#include <linux/posix_types.h> 371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 389f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes/* gids, uids, and pids are all 32-bit. */ 399f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __kernel_gid32_t __gid_t; 409f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __gid_t gid_t; 419f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __kernel_uid32_t __uid_t; 429f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __uid_t uid_t; 439f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __kernel_pid_t __pid_t; 449f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __pid_t pid_t; 452725ca95b23bc59ac7e7d7d52362c369db180671Pavel Chupintypedef uint32_t __id_t; 469f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __id_t id_t; 472b333ea31ec5b5b4627f14b22253b017b346638aElliott Hughes 48ad8842f5c67dea52a2b4ce280b612f41846cd2efElliott Hughestypedef unsigned long blkcnt_t; 49ad8842f5c67dea52a2b4ce280b612f41846cd2efElliott Hughestypedef unsigned long blksize_t; 502b333ea31ec5b5b4627f14b22253b017b346638aElliott Hughestypedef __kernel_caddr_t caddr_t; 512b333ea31ec5b5b4627f14b22253b017b346638aElliott Hughestypedef __kernel_clock_t clock_t; 529f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes 539f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __kernel_clockid_t __clockid_t; 549f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __clockid_t clockid_t; 559f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes 562b333ea31ec5b5b4627f14b22253b017b346638aElliott Hughestypedef __kernel_daddr_t daddr_t; 57ad8842f5c67dea52a2b4ce280b612f41846cd2efElliott Hughestypedef unsigned long fsblkcnt_t; 58ad8842f5c67dea52a2b4ce280b612f41846cd2efElliott Hughestypedef unsigned long fsfilcnt_t; 599f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes 609f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __kernel_mode_t __mode_t; 619f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __mode_t mode_t; 629f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes 639f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __kernel_key_t __key_t; 649f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __key_t key_t; 659f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes 666726862e9a250e7ade32ba7d150d73352b4ef5c8Calin Juravletypedef __kernel_ino_t __ino_t; 679f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __ino_t ino_t; 689f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes 692725ca95b23bc59ac7e7d7d52362c369db180671Pavel Chupintypedef uint32_t __nlink_t; 702b333ea31ec5b5b4627f14b22253b017b346638aElliott Hughestypedef __nlink_t nlink_t; 719f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes 724b558f50a42c97d461f1dede5aaaae490ea99e2eElliott Hughestypedef void* __timer_t; 739f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __timer_t timer_t; 749f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes 756726862e9a250e7ade32ba7d150d73352b4ef5c8Calin Juravletypedef __kernel_suseconds_t __suseconds_t; 769f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __suseconds_t suseconds_t; 779f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes 786726862e9a250e7ade32ba7d150d73352b4ef5c8Calin Juravle/* useconds_t is 32-bit on both LP32 and LP64. */ 792725ca95b23bc59ac7e7d7d52362c369db180671Pavel Chupintypedef uint32_t __useconds_t; 809f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __useconds_t useconds_t; 812b333ea31ec5b5b4627f14b22253b017b346638aElliott Hughes 82894f8cb1395d3409bb995d18abc1b3409c557d01Elliott Hughes#if !defined(__LP64__) 83894f8cb1395d3409bb995d18abc1b3409c557d01Elliott Hughes/* This historical accident means that we had a 32-bit dev_t on 32-bit architectures. */ 84894f8cb1395d3409bb995d18abc1b3409c557d01Elliott Hughestypedef uint32_t dev_t; 85894f8cb1395d3409bb995d18abc1b3409c557d01Elliott Hughes#else 86894f8cb1395d3409bb995d18abc1b3409c557d01Elliott Hughestypedef uint64_t dev_t; 87894f8cb1395d3409bb995d18abc1b3409c557d01Elliott Hughes#endif 88894f8cb1395d3409bb995d18abc1b3409c557d01Elliott Hughes 892b333ea31ec5b5b4627f14b22253b017b346638aElliott Hughes/* This historical accident means that we had a 32-bit time_t on 32-bit architectures. */ 909f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __kernel_time_t __time_t; 919f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __time_t time_t; 921dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 932b333ea31ec5b5b4627f14b22253b017b346638aElliott Hughes/* This historical accident means that we had a 32-bit off_t on 32-bit architectures. */ 9400fb5f97be5d6d8da10dbaf047004917b9f8c7e4Elliott Hughes#if !defined(__LP64__) 952b333ea31ec5b5b4627f14b22253b017b346638aElliott Hughestypedef __kernel_off_t off_t; 962b333ea31ec5b5b4627f14b22253b017b346638aElliott Hughestypedef __kernel_loff_t loff_t; 972b333ea31ec5b5b4627f14b22253b017b346638aElliott Hughestypedef loff_t off64_t; 9800fb5f97be5d6d8da10dbaf047004917b9f8c7e4Elliott Hughes#else 9900fb5f97be5d6d8da10dbaf047004917b9f8c7e4Elliott Hughes/* We could re-use the LP32 definitions, but that would mean that although off_t and loff_t/off64_t 10000fb5f97be5d6d8da10dbaf047004917b9f8c7e4Elliott Hughes * would be the same size, they wouldn't actually be the same type, which can lead to warnings. */ 10100fb5f97be5d6d8da10dbaf047004917b9f8c7e4Elliott Hughestypedef __kernel_off_t off_t; 10200fb5f97be5d6d8da10dbaf047004917b9f8c7e4Elliott Hughestypedef off_t loff_t; 10300fb5f97be5d6d8da10dbaf047004917b9f8c7e4Elliott Hughestypedef loff_t off64_t; 10400fb5f97be5d6d8da10dbaf047004917b9f8c7e4Elliott Hughes#endif 1052ecc164ae9b8062e29faf5eca491669e2741cab3Elliott Hughes 1061dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* while POSIX wants these in <sys/types.h>, we 1071dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * declare then in <pthread.h> instead */ 1081dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#if 0 1091dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef .... pthread_attr_t; 1101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef .... pthread_cond_t; 1111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef .... pthread_condattr_t; 1121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef .... pthread_key_t; 1131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef .... pthread_mutex_t; 1141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef .... pthread_once_t; 1151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef .... pthread_rwlock_t; 1161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef .... pthread_rwlock_attr_t; 1171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef .... pthread_t; 1181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif 1191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 120ebd90b9ba99cdd49a4a4eea38b1b8654af942e97Elliott Hughes#if !defined(__LP64__) 121ebd90b9ba99cdd49a4a4eea38b1b8654af942e97Elliott Hughes/* This historical accident means that we had a signed socklen_t on 32-bit architectures. */ 1222725ca95b23bc59ac7e7d7d52362c369db180671Pavel Chupintypedef int32_t __socklen_t; 123ebd90b9ba99cdd49a4a4eea38b1b8654af942e97Elliott Hughes#else 124ebd90b9ba99cdd49a4a4eea38b1b8654af942e97Elliott Hughes/* LP64 still has a 32-bit socklen_t. */ 1252725ca95b23bc59ac7e7d7d52362c369db180671Pavel Chupintypedef uint32_t __socklen_t; 126ebd90b9ba99cdd49a4a4eea38b1b8654af942e97Elliott Hughes#endif 1279f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __socklen_t socklen_t; 1289f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes 1299f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __builtin_va_list __va_list; 1309f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes 1311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef _SSIZE_T_DEFINED_ 1321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define _SSIZE_T_DEFINED_ 133b6e22482d4fbf62c23707a9096eecd2082a63ef1Elliott Hughes/* Traditionally, bionic's ssize_t was "long int". This caused GCC to emit warnings when you 134e255642dc1178663860104d9da2590056fae8d0bElliott Hughes * pass a ssize_t to a printf-style function. The correct type is __kernel_ssize_t, which is 135e255642dc1178663860104d9da2590056fae8d0bElliott Hughes * "int", which isn't an ABI change for C code (because they're the same size) but is an ABI 136e255642dc1178663860104d9da2590056fae8d0bElliott Hughes * change for C++ because "int" and "long int" mangle to "i" and "l" respectively. So until 137b6e22482d4fbf62c23707a9096eecd2082a63ef1Elliott Hughes * we can fix the ABI, this change should not be propagated to the NDK. http://b/8253769. */ 138c641cafbc387849510d7f408e85f72fa3608916dThorsten Glasertypedef __kernel_ssize_t ssize_t; 1391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif 1401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef unsigned int uint_t; 1421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef unsigned int uint; 1431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* for some applications */ 1451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/sysmacros.h> 1461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifdef __BSD_VISIBLE 1481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef unsigned char u_char; 1491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef unsigned short u_short; 1501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef unsigned int u_int; 1511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef unsigned long u_long; 1521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef uint32_t u_int32_t; 1541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef uint16_t u_int16_t; 1551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef uint8_t u_int8_t; 1561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef uint64_t u_int64_t; 1571dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif 1581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif 160