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 */
28bc94bb362da64dc15994b4a17ab54377670e26e7Elliott Hughes
291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef _SYS_TYPES_H_
301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define _SYS_TYPES_H_
311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <stddef.h>
331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <stdint.h>
341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/cdefs.h>
351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <linux/types.h>
372b333ea31ec5b5b4627f14b22253b017b346638aElliott Hughes#include <linux/posix_types.h>
381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
39280236537e06c7accaffabf8fb407f93dd1c834fElliott Hughes#include <bits/pthread_types.h>
40280236537e06c7accaffabf8fb407f93dd1c834fElliott Hughes
419f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes/* gids, uids, and pids are all 32-bit. */
429f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __kernel_gid32_t __gid_t;
439f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __gid_t gid_t;
449f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __kernel_uid32_t __uid_t;
459f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __uid_t uid_t;
469f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __kernel_pid_t __pid_t;
479f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __pid_t pid_t;
482725ca95b23bc59ac7e7d7d52362c369db180671Pavel Chupintypedef uint32_t __id_t;
499f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __id_t id_t;
502b333ea31ec5b5b4627f14b22253b017b346638aElliott Hughes
51ad8842f5c67dea52a2b4ce280b612f41846cd2efElliott Hughestypedef unsigned long blkcnt_t;
52ad8842f5c67dea52a2b4ce280b612f41846cd2efElliott Hughestypedef unsigned long blksize_t;
532b333ea31ec5b5b4627f14b22253b017b346638aElliott Hughestypedef __kernel_caddr_t caddr_t;
542b333ea31ec5b5b4627f14b22253b017b346638aElliott Hughestypedef __kernel_clock_t clock_t;
559f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes
569f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __kernel_clockid_t __clockid_t;
579f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __clockid_t clockid_t;
589f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes
592b333ea31ec5b5b4627f14b22253b017b346638aElliott Hughestypedef __kernel_daddr_t daddr_t;
60ad8842f5c67dea52a2b4ce280b612f41846cd2efElliott Hughestypedef unsigned long fsblkcnt_t;
61ad8842f5c67dea52a2b4ce280b612f41846cd2efElliott Hughestypedef unsigned long fsfilcnt_t;
629f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes
639f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __kernel_mode_t __mode_t;
649f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __mode_t mode_t;
659f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes
669f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __kernel_key_t __key_t;
679f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __key_t key_t;
689f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes
696726862e9a250e7ade32ba7d150d73352b4ef5c8Calin Juravletypedef __kernel_ino_t __ino_t;
709f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __ino_t ino_t;
719f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes
721f1a51aecd7c825418bfedcb66772e92de790149Elliott Hughestypedef uint64_t ino64_t;
731f1a51aecd7c825418bfedcb66772e92de790149Elliott Hughes
742725ca95b23bc59ac7e7d7d52362c369db180671Pavel Chupintypedef uint32_t __nlink_t;
752b333ea31ec5b5b4627f14b22253b017b346638aElliott Hughestypedef __nlink_t nlink_t;
769f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes
774b558f50a42c97d461f1dede5aaaae490ea99e2eElliott Hughestypedef void* __timer_t;
789f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __timer_t timer_t;
799f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes
806726862e9a250e7ade32ba7d150d73352b4ef5c8Calin Juravletypedef __kernel_suseconds_t __suseconds_t;
819f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __suseconds_t suseconds_t;
829f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes
836726862e9a250e7ade32ba7d150d73352b4ef5c8Calin Juravle/* useconds_t is 32-bit on both LP32 and LP64. */
842725ca95b23bc59ac7e7d7d52362c369db180671Pavel Chupintypedef uint32_t __useconds_t;
859f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __useconds_t useconds_t;
862b333ea31ec5b5b4627f14b22253b017b346638aElliott Hughes
87894f8cb1395d3409bb995d18abc1b3409c557d01Elliott Hughes#if !defined(__LP64__)
88894f8cb1395d3409bb995d18abc1b3409c557d01Elliott Hughes/* This historical accident means that we had a 32-bit dev_t on 32-bit architectures. */
89894f8cb1395d3409bb995d18abc1b3409c557d01Elliott Hughestypedef uint32_t dev_t;
90894f8cb1395d3409bb995d18abc1b3409c557d01Elliott Hughes#else
91894f8cb1395d3409bb995d18abc1b3409c557d01Elliott Hughestypedef uint64_t dev_t;
92894f8cb1395d3409bb995d18abc1b3409c557d01Elliott Hughes#endif
93894f8cb1395d3409bb995d18abc1b3409c557d01Elliott Hughes
942b333ea31ec5b5b4627f14b22253b017b346638aElliott Hughes/* This historical accident means that we had a 32-bit time_t on 32-bit architectures. */
959f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __kernel_time_t __time_t;
969f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __time_t time_t;
971dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
9868dc20d41193831a94df04b994ff2f601dd38d10Elliott Hughes#if defined(__USE_FILE_OFFSET64) || defined(__LP64__)
9968dc20d41193831a94df04b994ff2f601dd38d10Elliott Hughestypedef int64_t off_t;
10068dc20d41193831a94df04b994ff2f601dd38d10Elliott Hughestypedef off_t loff_t;
1012b333ea31ec5b5b4627f14b22253b017b346638aElliott Hughestypedef loff_t off64_t;
10200fb5f97be5d6d8da10dbaf047004917b9f8c7e4Elliott Hughes#else
10368dc20d41193831a94df04b994ff2f601dd38d10Elliott Hughes/* This historical accident means that we had a 32-bit off_t on 32-bit architectures. */
10400fb5f97be5d6d8da10dbaf047004917b9f8c7e4Elliott Hughestypedef __kernel_off_t off_t;
10568dc20d41193831a94df04b994ff2f601dd38d10Elliott Hughestypedef __kernel_loff_t loff_t;
10600fb5f97be5d6d8da10dbaf047004917b9f8c7e4Elliott Hughestypedef loff_t off64_t;
10700fb5f97be5d6d8da10dbaf047004917b9f8c7e4Elliott Hughes#endif
1082ecc164ae9b8062e29faf5eca491669e2741cab3Elliott Hughes
109ebd90b9ba99cdd49a4a4eea38b1b8654af942e97Elliott Hughes#if !defined(__LP64__)
110ebd90b9ba99cdd49a4a4eea38b1b8654af942e97Elliott Hughes/* This historical accident means that we had a signed socklen_t on 32-bit architectures. */
1112725ca95b23bc59ac7e7d7d52362c369db180671Pavel Chupintypedef int32_t __socklen_t;
112ebd90b9ba99cdd49a4a4eea38b1b8654af942e97Elliott Hughes#else
113ebd90b9ba99cdd49a4a4eea38b1b8654af942e97Elliott Hughes/* LP64 still has a 32-bit socklen_t. */
1142725ca95b23bc59ac7e7d7d52362c369db180671Pavel Chupintypedef uint32_t __socklen_t;
115ebd90b9ba99cdd49a4a4eea38b1b8654af942e97Elliott Hughes#endif
1169f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __socklen_t socklen_t;
1179f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes
1189f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef __builtin_va_list __va_list;
1199f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughes
1201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef _SSIZE_T_DEFINED_
1211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define _SSIZE_T_DEFINED_
122b6e22482d4fbf62c23707a9096eecd2082a63ef1Elliott Hughes/* Traditionally, bionic's ssize_t was "long int". This caused GCC to emit warnings when you
123e255642dc1178663860104d9da2590056fae8d0bElliott Hughes * pass a ssize_t to a printf-style function. The correct type is __kernel_ssize_t, which is
124e255642dc1178663860104d9da2590056fae8d0bElliott Hughes * "int", which isn't an ABI change for C code (because they're the same size) but is an ABI
125e255642dc1178663860104d9da2590056fae8d0bElliott Hughes * change for C++ because "int" and "long int" mangle to "i" and "l" respectively. So until
126b6e22482d4fbf62c23707a9096eecd2082a63ef1Elliott Hughes * we can fix the ABI, this change should not be propagated to the NDK. http://b/8253769. */
127c641cafbc387849510d7f408e85f72fa3608916dThorsten Glasertypedef __kernel_ssize_t ssize_t;
1281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
1291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef unsigned int        uint_t;
1311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef unsigned int        uint;
1321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1339c8d711aa5ee3108a8e1e8959be9d0355ca0fa6aElliott Hughes#if defined(__USE_BSD) || defined(__BIONIC__) /* Historically bionic exposed these. */
1341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/sysmacros.h>
1351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1369361ad3f80adc1e21ab97c8d684afed311788e00Elliott Hughestypedef unsigned char  u_char;
1379361ad3f80adc1e21ab97c8d684afed311788e00Elliott Hughestypedef unsigned short u_short;
1389361ad3f80adc1e21ab97c8d684afed311788e00Elliott Hughestypedef unsigned int   u_int;
1399361ad3f80adc1e21ab97c8d684afed311788e00Elliott Hughestypedef unsigned long  u_long;
1409361ad3f80adc1e21ab97c8d684afed311788e00Elliott Hughes
1419361ad3f80adc1e21ab97c8d684afed311788e00Elliott Hughestypedef uint32_t u_int32_t;
1429361ad3f80adc1e21ab97c8d684afed311788e00Elliott Hughestypedef uint16_t u_int16_t;
1439361ad3f80adc1e21ab97c8d684afed311788e00Elliott Hughestypedef uint8_t  u_int8_t;
1449361ad3f80adc1e21ab97c8d684afed311788e00Elliott Hughestypedef uint64_t u_int64_t;
1451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
1461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
148