blob: 3220415f7038a55580ce1574c515fdcbee63b38a [file] [log] [blame]
The Android Open Source Project1dc9e472009-03-03 19:28:35 -08001/*
2 * Copyright (c) 1988 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of the University nor the names of its contributors
14 * may be used to endorse or promote products derived from this software
15 * without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
29 * @(#)limits.h 5.9 (Berkeley) 4/3/91
30 */
31
Elliott Hughes36f97ca2024-10-28 19:28:07 +000032#pragma once
33
34/**
35 * @file limits.h
36 * @brief Constants relating to implementation limits.
37 *
38 * This file is included via `#include_next` from the clang header of the same
39 * name that provides all the limits that the compiler is responsible for,
40 * primarily those relating to integer types defined by the C standard.
41 * This file defines the additional limits defined by POSIX.
42 */
43
44/*
45 * The Android build system has bionic _before_ the clang headers,
46 * so although the claim above that clang does an `#include_next`
47 * of this file is true for the NDK, it's not true for the OS,
48 * and we need to paper over that difference here until/unless
49 * the OS build changes.
50 */
51#if __has_include_next(<limits.h>)
52#include_next <limits.h>
53#endif
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080054
55#include <sys/cdefs.h>
56
Elliott Hughes9af74902016-11-29 18:06:34 -080057/* Historically bionic exposed the content of <float.h> from <limits.h> and <sys/limits.h> too. */
58#include <float.h>
59
Elliott Hughes36f97ca2024-10-28 19:28:07 +000060/* Many of the POSIX limits come from the kernel. */
Elliott Hughes9af74902016-11-29 18:06:34 -080061#include <linux/limits.h>
62
Elliott Hughes36f97ca2024-10-28 19:28:07 +000063/** Maximum number of positional arguments in a printf()/scanf() format string. */
64#define NL_ARGMAX 9
65/** Maximum number of bytes in a $LANG name. */
66#define NL_LANGMAX 14
67/** Irrelevant with Android's <nl_types.h>. */
68#define NL_MSGMAX 32767
69/** Obsolete; removed from POSIX. */
70#define NL_NMAX 1
71/** Irrelevant with Android's <nl_types.h>. */
72#define NL_SETMAX 255
73/** Irrelevant with Android's <nl_types.h>. */
74#define NL_TEXTMAX 255
75
76/** Obsolete; removed from POSIX. */
77#define PASS_MAX 128
78/** Obsolete; removed from POSIX. */
79#define TMP_MAX 308915776
80
81/** Number of bits in a `long` (POSIX). */
82#if __LP64__
83#define LONG_BIT 64
84#else
85#define LONG_BIT 32
86#endif
87/** Number of bits in a "word" of `int` (POSIX). */
Elliott Hughes19d76852017-10-18 13:27:01 -070088#define WORD_BIT 32
Elliott Hughes9af74902016-11-29 18:06:34 -080089
Elliott Hughes36f97ca2024-10-28 19:28:07 +000090/** Maximum value of a uid_t. */
91#define UID_MAX UINT_MAX
92/** Maximum value of a gid_t. */
93#define GID_MAX UINT_MAX
94/** Maximum value of a size_t. */
Elliott Hugheseae28492024-10-16 19:52:11 +000095#define SIZE_T_MAX ULONG_MAX
Elliott Hughes36f97ca2024-10-28 19:28:07 +000096/** Maximum value of a ssize_t. */
Elliott Hugheseae28492024-10-16 19:52:11 +000097#define SSIZE_MAX LONG_MAX
Elliott Hugheseae28492024-10-16 19:52:11 +000098
Elliott Hughes9bb08642025-01-28 07:29:11 -080099/**
100 * POSIX 2024's name for NSIG.
101 * See the NSIG documentation for an explanation and warnings.
102 */
103#define NSIG_MAX 65
104
Elliott Hughes36f97ca2024-10-28 19:28:07 +0000105/** Maximum number of bytes in a multibyte character. */
Elliott Hughes69f05d22014-06-05 20:10:09 -0700106#define MB_LEN_MAX 4
Elliott Hughes1b0dc402014-04-01 17:16:59 -0700107
Elliott Hughes36f97ca2024-10-28 19:28:07 +0000108/** Default process priority. */
Elliott Hughes19d76852017-10-18 13:27:01 -0700109#define NZERO 20
110
Elliott Hughes36f97ca2024-10-28 19:28:07 +0000111/** Maximum number of struct iovec that can be passed in a single readv()/writev(). */
Elliott Hughesf2d7d412016-07-27 15:24:47 -0700112#define IOV_MAX 1024
Elliott Hughes36f97ca2024-10-28 19:28:07 +0000113
114/** Maximum value for a semaphore. */
Elliott Hughes04303f52014-09-18 16:11:59 -0700115#define SEM_VALUE_MAX 0x3fffffff
116
Elliott Hughesb266f652024-04-09 15:41:10 +0000117/** Do not use: prefer getline() or asprintf() rather than hard-coding an arbitrary size. */
118#define LINE_MAX _POSIX2_LINE_MAX
119
Elliott Hughesa186b2e2014-09-22 14:49:07 -0700120/* POSIX says these belong in <unistd.h> but BSD has some in <limits.h>. */
Elliott Hughes5704c422016-01-25 18:06:24 -0800121#include <bits/posix_limits.h>
Elliott Hughesa186b2e2014-09-22 14:49:07 -0700122
Elliott Hughes36f97ca2024-10-28 19:28:07 +0000123/** Maximum length of a hostname returned by gethostname(). */
Yongqin Liu05897772014-10-29 14:47:47 +0800124#define HOST_NAME_MAX _POSIX_HOST_NAME_MAX
Elliott Hughes36f97ca2024-10-28 19:28:07 +0000125
126/** Maximum length of a login name. */
Elliott Hughes06bd5862017-07-28 16:27:49 -0700127#define LOGIN_NAME_MAX 256
Elliott Hughes36f97ca2024-10-28 19:28:07 +0000128
129/** Maximum length of terminal device name. */
Elliott Hughes06bd5862017-07-28 16:27:49 -0700130#define TTY_NAME_MAX 32
Elliott Hughes9af74902016-11-29 18:06:34 -0800131
Elliott Hughes36f97ca2024-10-28 19:28:07 +0000132/** Maximum number of attempts to destroy thread-specific data when a thread exits. */
133#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS
Elliott Hughes7d3c6cd2024-04-18 22:02:38 +0000134
135/**
136 * The number of calls to pthread_key_create() without intervening calls to
137 * pthread_key_delete() that are guaranteed to succeed. See pthread_key_create()
138 * for more details and ways to avoid hitting this limit.
139 */
Elliott Hughes9af74902016-11-29 18:06:34 -0800140#define PTHREAD_KEYS_MAX 128
Elliott Hughes7d3c6cd2024-04-18 22:02:38 +0000141
Elliott Hughes36f97ca2024-10-28 19:28:07 +0000142/** bionic has no fixed limit on the number of threads. */
Elliott Hughes9af74902016-11-29 18:06:34 -0800143#undef PTHREAD_THREADS_MAX