blob: 88c70ccccc04508bbc88803ef1631550679bf6c2 [file] [log] [blame]
/********************************************************************************
* include/limits.h
*
* Copyright (C) 2007-2009, 2014, 2019 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
********************************************************************************/
#ifndef __INCLUDE_LIMITS_H
#define __INCLUDE_LIMITS_H
/********************************************************************************
* Included Files
********************************************************************************/
#include <nuttx/config.h>
/* Architecture specific limits */
#include <arch/limits.h>
/********************************************************************************
* Pre-processor Definitions
********************************************************************************/
/* Default values for user configurable limits **********************************/
/* Maximum number of bytes in a filename (not including terminating null). */
#ifndef CONFIG_NAME_MAX
# define CONFIG_NAME_MAX 32
#endif
/* Maximum number of bytes in a pathname, including the terminating null
* character.
*/
#ifndef CONFIG_PATH_MAX
# if CONFIG_NAME_MAX < 64
# define CONFIG_PATH_MAX (4*CONFIG_NAME_MAX + 1)
# else
# define CONFIG_PATH_MAX 256
# endif
#endif
/* Configurable limits required by POSIX ****************************************
*
* Required for all implementations:
*
* _POSIX_ARG_MAX Total length of string arguments
* _POSIX_CHILD_MAX Number of child tasks active
* _POSIX_LINK_MAX The number of links a file can have
* _POSIX_MAX_CANON Number bytes in TTY canonical input queue
* _POSIX_MAX_INPUT Number bytes in TTY canonical input queue
* _POSIX_NAME_MAX Number of bytes in a file or pathname component
* _POSIX_NGROUPS_MAX Number supplementary group IDs
* _POSIX_OPEN_MAX Number of files a task can have open at once
* _POSIX_PATH_MAX Number of bytes in a full pathname (including NULL)
* _POSIX_PIPE_BUF Number of bytes for atomic write into pipe
* _POSIX_SSIZE_MAX Largest filesystem write; also max value of ssize_t
* _POSIX_STREAM_MAX Number of std I/O streams open at once
* _POSIX_TZNAME_MAX Max number of bytes of a timezone name
*
* Required for sigqueue
*
* _POSIX_RTSIG_MAX Difference between SIGRTMIN and SIGRTMAX
* _POSIX_SIGQUEUE_MAX Max number signals a task can queue
*
* Required for POSIX timers
*
* _POSIX_DELAYTIMER_MAX Max number timer overruns
* _POSIX_TIMER_MAX Max number of timers per task
* _POSIX_CLOCKRES_MIN Clock resolution in nanoseconds
*
* Required for asynchronous I/O
*
* _POSIX_AIO_LISTIO_MAX Max number of AIOs in single listio call
* _POSIX_AIO_MAX Max number of simultaneous AIO operations
*
* Required for POSIX message passing
*
* _POSIX_MQ_OPEN_MAX Max number message queues task may open (mq_open)
* _POSIX_MQ_PRIO_MAX Max message priority (mq_send)
*
* Required for POSIX semaphores
*
* _POSIX_SEM_NSEMS_MAX Max number of open semaphores per task
* _POSIX_SEM_VALUE_MAX Max value a semaphore may have
*
* Required for symbolic links
* _POSIX_SYMLOOP_MAX Maximum number of symbolic links that can be
* reliably traversed in the resolution of a pathname
* in the absence of a loop.
*
*/
#define _POSIX_ARG_MAX 4096
#define _POSIX_CHILD_MAX 6
#define _POSIX_LINK_MAX 8
#define _POSIX_MAX_CANON 255
#define _POSIX_MAX_INPUT 255
#define _POSIX_NAME_MAX CONFIG_NAME_MAX
#define _POSIX_NGROUPS_MAX 0
#define _POSIX_OPEN_MAX CONFIG_NFILE_DESCRIPTORS
#define _POSIX_PATH_MAX CONFIG_PATH_MAX
#define _POSIX_PIPE_BUF 512
#define _POSIX_STREAM_MAX CONFIG_NFILE_STREAMS
#define _POSIX_TZNAME_MAX 3
#ifdef CONFIG_SMALL_MEMORY
#define _POSIX_SIZE_MAX 65535 /* See sys/types.h */
#define _POSIX_SIZE_MIN 0
#define _POSIX_SSIZE_MAX 32767 /* See sys/types.h */
#define _POSIX_SSIZE_MIN -32768
#else /* CONFIG_SMALL_MEMORY */
#define _POSIX_SIZE_MAX 4294967295UL /* See sys/types.h */
#define _POSIX_SIZE_MIN 0
#define _POSIX_SSIZE_MAX 2147483647L /* See sys/types.h */
#define _POSIX_SSIZE_MIN -2147483648L
#endif /* CONFIG_SMALL_MEMORY */
/* Required for sigqueue */
#define _POSIX_RTSIG_MAX 31
#define _POSIX_SIGQUEUE_MAX 32
/* Required for symbolic links */
#define _POSIX_SYMLOOP_MAX 8
/* Required for POSIX timers.
*
* _POSIX_DELAYTIMER_MAX is the number of timer expiration overruns.
*
* _POSIX_TIMER_MAX is the per-process number of timers.
*
* _POSIX_CLOCKRES_MIN is the resolution of the CLOCK_REALTIME clock in
* nanoseconds. CLOCK_REALTIME is controlled by the NuttX system time.
* The default value is the system timer which has a resolution of 1000
* microseconds. This default setting can be overridden by defining the
* clock interval in microseconds as CONFIG_USEC_PER_TICK in the NuttX
* configuration file.
*/
#define _POSIX_DELAYTIMER_MAX 32
#define _POSIX_TIMER_MAX 32
#ifdef CONFIG_USEC_PER_TICK
# define _POSIX_CLOCKRES_MIN ((CONFIG_USEC_PER_TICK)*1000)
#else
# define _POSIX_CLOCKRES_MIN (10*1000000)
#endif
/* Required for asynchronous I/O */
#define _POSIX_AIO_LISTIO_MAX 2
#define _POSIX_AIO_MAX 1
/* Required for POSIX message passing */
#define _POSIX_MQ_OPEN_MAX 8
#define _POSIX_MQ_PRIO_MAX UCHAR_MAX
/* Required for POSIX semaphores */
#define _POSIX_SEM_NSEMS_MAX INT_MAX
#define _POSIX_SEM_VALUE_MAX 0x7fff
/* Numerical limits. These values may be increased from the POSIX minimum
* values above or made indeterminate
*/
#define ARG_MAX _POSIX_ARG_MAX
#define CHILD_MAX _POSIX_CHILD_MAX
#define LINK_MAX _POSIX_LINK_MAX
#define MAX_CANON _POSIX_MAX_CANON
#define MAX_INPUT _POSIX_MAX_INPUT
#define NAME_MAX _POSIX_NAME_MAX
#define NGROUPS_MAX _POSIX_NGROUPS_MAX
#define OPEN_MAX _POSIX_OPEN_MAX
#define PATH_MAX _POSIX_PATH_MAX
#define PIPE_BUF _POSIX_PIPE_BUF
#define SIZE_MAX _POSIX_SIZE_MAX
#define SIZE_MIN _POSIX_SIZE_MIN
#define RSIZE_MAX _POSIX_SIZE_MAX
#define SSIZE_MAX _POSIX_SSIZE_MAX
#define SSIZE_MIN _POSIX_SSIZE_MIN
#define STREAM_MAX _POSIX_STREAM_MAX
#define TZNAME_MAX _POSIX_TZNAME_MAX
#define TZ_MAX_TIMES CONFIG_LIBC_TZ_MAX_TIMES
#define TZ_MAX_TYPES CONFIG_LIBC_TZ_MAX_TYPES
#define RTSIG_MAX _POSIX_RTSIG_MAX
#define SIGQUEUE_MAX _POSIX_SIGQUEUE_MAX
#define SYMLOOP_MAX _POSIX_SYMLOOP_MAX
#define DELAYTIMER_MAX _POSIX_DELAYTIMER_MAX
#define TIMER_MAX _POSIX_TIMER_MAX
#define CLOCKRES_MIN _POSIX_CLOCKRES_MIN
/* Other invariant values */
/* CHARCLASS_NAME_MAX
* Maximum number of bytes in a character class name. Minimum Acceptable
* Value: 14
*/
#define CHARCLASS_NAME_MAX 14
/* Maximum value of digit in calls to the printf() and scanf() functions.
* Minimum Acceptable Value: 9
*/
#ifdef CONFIG_LIBC_NUMBERED_ARGS
# ifdef CONFIG_LIBC_NL_ARGMAX
# define NL_ARGMAX CONFIG_LIBC_NL_ARGMAX
# else
# define NL_ARGMAX 9
# endif
#endif
/* NL_LANGMAX
* Maximum number of bytes in a LANG name. Minimum Acceptable Value: 14
*/
#define NL_LANGMAX 14
/* NL_MSGMAX
* Maximum message number. Minimum Acceptable Value: 32 67
*/
#define NL_MSGMAX 32767
/* NL_NMAX
* Maximum number of bytes in an N-to-1 collation mapping. Minimum
* Acceptable Value: *
*/
/* NL_SETMAX
* Maximum set number. Minimum Acceptable Value: 255
*/
#define NL_SETMAX 255
/* NL_TEXTMAX
* Maximum number of bytes in a message string. Minimum Acceptable Value:
* _POSIX2_LINE_MAX
*/
#define NL_TEXTMAX _POSIX2_LINE_MAX
/* NZERO
* Default process priority. Minimum Acceptable Value: 20
*/
#define NZERO 20
/* Required for asynchronous I/O */
#define AIO_LISTIO_MAX _POSIX_AIO_LISTIO_MAX
#define AIO_MAX _POSIX_AIO_MAX
/* Required for POSIX message passing */
#define MQ_OPEN_MAX _POSIX_MQ_OPEN_MAX
#define MQ_PRIO_MAX _POSIX_MQ_PRIO_MAX
/* Required for POSIX semaphores */
#define SEM_NSEMS_MAX _POSIX_SEM_NSEMS_MAX
#define SEM_VALUE_MAX _POSIX_SEM_VALUE_MAX
/* Required for readv() and writev() */
/* There really is no upper limit on the number of vectors */
#define IOV_MAX INT_MAX
#endif /* __INCLUDE_LIMITS_H */