1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 
  22 /*
  23  * Copyright (c) 2013 Gary Mills
  24  * Copyright 2017 RackTop Systems.
  25  *
  26  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
  27  * Use is subject to license terms.
  28  * Copyright 2015 Joyent, Inc.  All rights reserved.
  29  */
  30 
  31 /*      Copyright (c) 1988 AT&T     */
  32 /*        All Rights Reserved   */
  33 
  34 
  35 #ifndef _LIMITS_H
  36 #define _LIMITS_H
  37 
  38 #include <sys/feature_tests.h>
  39 #include <sys/isa_defs.h>
  40 #include <iso/limits_iso.h>
  41 #include <sys/limits.h>
  42 
  43 /*
  44  * Include fixed width type limits as proposed by the ISO/JTC1/SC22/WG14 C
  45  * committee's working draft for the revision of the current ISO C standard,
  46  * ISO/IEC 9899:1990 Programming language - C.  These are not currently
  47  * required by any standard but constitute a useful, general purpose set
  48  * of type definitions and limits which is namespace clean with respect to
  49  * all standards.
  50  */
  51 #if defined(__EXTENSIONS__) || !defined(_STRICT_STDC) || \
  52         defined(__XOPEN_OR_POSIX)
  53 #include <sys/int_limits.h>
  54 #endif
  55 
  56 #ifdef  __cplusplus
  57 extern "C" {
  58 #endif
  59 
  60 #if defined(__EXTENSIONS__) || !defined(_STRICT_STDC) || \
  61         defined(__XOPEN_OR_POSIX)
  62 
  63 #define SSIZE_MAX       LONG_MAX        /* max value of an "ssize_t" */
  64 
  65 /*
  66  * ARG_MAX is calculated as follows:
  67  * NCARGS - space for other stuff on initial stack
  68  * like aux vectors, saved registers, etc..
  69  */
  70 #define _ARG_MAX32      1048320 /* max length of args to exec 32-bit program */
  71 #define _ARG_MAX64      2096640 /* max length of args to exec 64-bit program */
  72 #ifdef  _LP64
  73 #define ARG_MAX         _ARG_MAX64      /* max length of arguments to exec */
  74 #else   /* _LP64 */
  75 #define ARG_MAX         _ARG_MAX32      /* max length of arguments to exec */
  76 #endif  /* _LP64 */
  77 
  78 
  79 /*
  80  * These two symbols have their historical values, the actual buffer is
  81  * larger.
  82  */
  83 #ifndef MAX_CANON
  84 #define MAX_CANON       256     /* max bytes in line for canonical processing */
  85 #endif
  86 
  87 #ifndef MAX_INPUT
  88 #define MAX_INPUT       512     /* max size of a char input buffer */
  89 #endif
  90 
  91 #define NGROUPS_MAX     16      /* max number of groups for a user */
  92 
  93 #ifndef PATH_MAX
  94 #define PATH_MAX        1024    /* max # of characters in a path name */
  95 #endif
  96 
  97 #define SYMLINK_MAX     1024    /* max # of characters a symlink can contain */
  98 
  99 #define PIPE_BUF        5120    /* max # bytes atomic in write to a pipe */
 100 
 101 #ifndef TMP_MAX
 102 #define TMP_MAX         17576   /* 26 * 26 * 26 */
 103 #endif
 104 
 105 /*
 106  * POSIX conformant definitions - An implementation may define
 107  * other symbols which reflect the actual implementation. Alternate
 108  * definitions may not be as restrictive as the POSIX definitions.
 109  */
 110 #define _POSIX_AIO_LISTIO_MAX       2
 111 #define _POSIX_AIO_MAX              1
 112 #define _POSIX_ARG_MAX           4096
 113 #ifdef _XPG6
 114 #define _POSIX_CHILD_MAX           25
 115 #else
 116 #define _POSIX_CHILD_MAX            6   /* POSIX.1-1990 default */
 117 #endif
 118 #define _POSIX_CLOCKRES_MIN     20000000
 119 #define _POSIX_DELAYTIMER_MAX      32
 120 #define _POSIX_LINK_MAX             8
 121 #define _POSIX_MAX_CANON          255
 122 #define _POSIX_MAX_INPUT          255
 123 #define _POSIX_MQ_OPEN_MAX          8
 124 #define _POSIX_MQ_PRIO_MAX         32
 125 #define _POSIX_NAME_MAX            14
 126 #ifdef _XPG6
 127 #define _POSIX_NGROUPS_MAX          8
 128 #define _POSIX_OPEN_MAX            20
 129 #define _POSIX_PATH_MAX           256
 130 #else                                   /* POSIX.1-1990 defaults */
 131 #define _POSIX_NGROUPS_MAX          0
 132 #define _POSIX_OPEN_MAX            16
 133 #define _POSIX_PATH_MAX           255
 134 #endif
 135 #define _POSIX_PIPE_BUF           512
 136 #define _POSIX_RTSIG_MAX            8
 137 #define _POSIX_SEM_NSEMS_MAX      256
 138 #define _POSIX_SEM_VALUE_MAX    32767
 139 #define _POSIX_SIGQUEUE_MAX        32
 140 #define _POSIX_SSIZE_MAX        32767
 141 #define _POSIX_STREAM_MAX           8
 142 #define _POSIX_TIMER_MAX           32
 143 #ifdef _XPG6
 144 #define _POSIX_TZNAME_MAX           6
 145 #else
 146 #define _POSIX_TZNAME_MAX           3   /* POSIX.1-1990 default */
 147 #endif
 148 /* POSIX.1c conformant */
 149 #define _POSIX_LOGIN_NAME_MAX                   9
 150 #define _POSIX_THREAD_DESTRUCTOR_ITERATIONS     4
 151 #define _POSIX_THREAD_KEYS_MAX                  128
 152 #define _POSIX_THREAD_THREADS_MAX               64
 153 #define _POSIX_TTY_NAME_MAX                     9
 154 /* UNIX 03 conformant */
 155 #define _POSIX_HOST_NAME_MAX                    255
 156 #define _POSIX_RE_DUP_MAX                       255
 157 #define _POSIX_SYMLINK_MAX                      255
 158 #define _POSIX_SYMLOOP_MAX                      8
 159 
 160 /*
 161  * POSIX.2 and XPG4-XSH4 conformant definitions
 162  */
 163 
 164 #define _POSIX2_BC_BASE_MAX               99
 165 #define _POSIX2_BC_DIM_MAX              2048
 166 #define _POSIX2_BC_SCALE_MAX              99
 167 #define _POSIX2_BC_STRING_MAX           1000
 168 #define _POSIX2_COLL_WEIGHTS_MAX           2
 169 #define _POSIX2_EXPR_NEST_MAX             32
 170 #define _POSIX2_LINE_MAX                2048
 171 #define _POSIX2_RE_DUP_MAX               255
 172 /* UNIX 03 conformant */
 173 #define _POSIX2_CHARCLASS_NAME_MAX        14
 174 
 175 #define BC_BASE_MAX             _POSIX2_BC_BASE_MAX
 176 #define BC_DIM_MAX              _POSIX2_BC_DIM_MAX
 177 #define BC_SCALE_MAX            _POSIX2_BC_SCALE_MAX
 178 #define BC_STRING_MAX           _POSIX2_BC_STRING_MAX
 179 #define COLL_WEIGHTS_MAX        10
 180 #define EXPR_NEST_MAX           _POSIX2_EXPR_NEST_MAX
 181 #define LINE_MAX                _POSIX2_LINE_MAX
 182 #if !defined(_XPG6)
 183 #define RE_DUP_MAX              _POSIX2_RE_DUP_MAX
 184 #else
 185 #define RE_DUP_MAX              _POSIX_RE_DUP_MAX
 186 #endif /* !defined(_XPG6) */
 187 
 188 #endif /* defined(__EXTENSIONS__) || !defined(_STRICT_STDC) ... */
 189 
 190 #if defined(__EXTENSIONS__) || \
 191         (!defined(_STRICT_STDC) && !defined(_POSIX_C_SOURCE)) || \
 192         defined(_XOPEN_SOURCE)
 193 
 194 /*
 195  * For dual definitions for PASS_MAX and sysconf.c
 196  */
 197 #define _PASS_MAX_XPG   8       /* old standards PASS_MAX */
 198 #define _PASS_MAX       256     /* modern Solaris PASS_MAX */
 199 
 200 #if defined(_XPG3) && !defined(_XPG6)
 201 #define PASS_MAX        _PASS_MAX_XPG   /* max # of characters in a password */
 202 #else   /* XPG6 or just Solaris */
 203 #define PASS_MAX        _PASS_MAX       /* max # of characters in a password */
 204 #endif  /* defined(_XPG3) && !defined(_XPG6) */
 205 
 206 #define CHARCLASS_NAME_MAX      _POSIX2_CHARCLASS_NAME_MAX
 207 
 208 #define NL_ARGMAX       9       /* max value of "digit" in calls to the */
 209                                 /* NLS printf() and scanf() */
 210 #define NL_LANGMAX      14      /* max # of bytes in a LANG name */
 211 #define NL_MSGMAX       32767   /* max message number */
 212 #define NL_NMAX         1       /* max # bytes in N-to-1 mapping characters */
 213 #define NL_SETMAX       255     /* max set number */
 214 #define NL_TEXTMAX      2048    /* max set number */
 215 #define NZERO           20      /* default process priority */
 216 
 217 #define WORD_BIT        32      /* # of bits in a "word" or "int" */
 218 #if defined(_LP64)
 219 #define LONG_BIT        64      /* # of bits in a "long" */
 220 #else   /* _ILP32 */
 221 #define LONG_BIT        32      /* # of bits in a "long" */
 222 #endif
 223 
 224 /* Marked as LEGACY in SUSv2 and removed in UNIX 03 */
 225 #ifndef _XPG6
 226 #define DBL_DIG         15      /* digits of precision of a "double" */
 227 #define DBL_MAX         1.7976931348623157081452E+308   /* max decimal value */
 228                                                         /* of a double */
 229 #define FLT_DIG         6               /* digits of precision of a "float" */
 230 #define FLT_MAX         3.4028234663852885981170E+38F   /* max decimal value */
 231                                                         /* of a "float" */
 232 #endif
 233 
 234 /* Marked as LEGACY in SUSv1 and removed in SUSv2 */
 235 #ifndef _XPG5
 236 #define DBL_MIN         2.2250738585072013830903E-308   /* min decimal value */
 237                                                         /* of a double */
 238 #define FLT_MIN         1.1754943508222875079688E-38F   /* min decimal value */
 239                                                         /* of a float */
 240 #endif
 241 
 242 #endif  /* defined(__EXTENSIONS__) || (!defined(_STRICT_STDC) ... */
 243 
 244 #define _XOPEN_IOV_MAX  16      /* max # iovec/process with readv()/writev() */
 245 #define _XOPEN_NAME_MAX 255     /* max # bytes in filename excluding null */
 246 #define _XOPEN_PATH_MAX 1024    /* max # bytes in a pathname */
 247 
 248 #if defined(__EXTENSIONS__) || \
 249         (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX))
 250 
 251 #define FCHR_MAX        1048576         /* max size of a file in bytes */
 252 #define PID_MAX         999999          /* max value for a process ID */
 253 
 254 /*
 255  * POSIX 1003.1a, section 2.9.5, table 2-5 contains [NAME_MAX] and the
 256  * related text states:
 257  *
 258  * A definition of one of the values from Table 2-5 shall be omitted from the
 259  * <limits.h> on specific implementations where the corresponding value is
 260  * equal to or greater than the stated minimum, but where the value can vary
 261  * depending on the file to which it is applied. The actual value supported for
 262  * a specific pathname shall be provided by the pathconf() (5.7.1) function.
 263  *
 264  * This is clear that any machine supporting multiple file system types
 265  * and/or a network should not include this define, regardless of protection
 266  * by the _POSIX_SOURCE and _POSIX_C_SOURCE flags. We chose to ignore that
 267  * and provide it anyway for compatibility with other platforms that don't
 268  * follow the spec as precisely as they should. Its usage is discouraged.
 269  */
 270 #define NAME_MAX        255
 271 
 272 #define CHILD_MAX       25      /* max # of processes per user id */
 273 #ifndef OPEN_MAX
 274 #define OPEN_MAX        256     /* max # of files a process can have open */
 275 #endif
 276 
 277 #define PIPE_MAX        5120    /* max # bytes written to a pipe in a write */
 278 
 279 #define STD_BLK         1024    /* # bytes in a physical I/O block */
 280 #define UID_MAX         2147483647      /* max value for a user or group ID */
 281 #define USI_MAX         4294967295      /* max decimal value of an "unsigned" */
 282 #define SYSPID_MAX      1       /* max pid of system processes */
 283 
 284 #ifndef SYS_NMLN                /* also defined in sys/utsname.h */
 285 #define SYS_NMLN        257     /* 4.0 size of utsname elements */
 286 #endif
 287 
 288 #ifndef CLK_TCK
 289 
 290 #if !defined(_CLOCK_T) || __cplusplus >= 199711L
 291 #define _CLOCK_T
 292 typedef long    clock_t;
 293 #endif  /* !_CLOCK_T */
 294 
 295 extern long _sysconf(int);      /* System Private interface to sysconf() */
 296 #define CLK_TCK ((clock_t)_sysconf(3))  /* 3 is _SC_CLK_TCK */
 297 
 298 #endif /* CLK_TCK */
 299 
 300 #ifdef  __USE_LEGACY_LOGNAME__
 301 #define LOGNAME_MAX     8       /* max # of characters in a login name */
 302 #else   /* __USE_LEGACY_LOGNAME__ */
 303 #define LOGNAME_MAX     32      /* max # of characters in a login name */
 304                                 /* Increased for illumos */
 305 #endif  /* __USE_LEGACY_LOGNAME__ */
 306 #define LOGIN_NAME_MAX  (LOGNAME_MAX + 1)       /* max buffer size */
 307 #define LOGNAME_MAX_TRAD        8               /* traditional length */
 308 #define LOGIN_NAME_MAX_TRAD     (LOGNAME_MAX_TRAD + 1)  /* and size */
 309 
 310 #define TTYNAME_MAX     128     /* max # of characters in a tty name */
 311 
 312 #endif  /* if defined(__EXTENSIONS__) || (!defined(_STRICT_STDC) ... */
 313 
 314 #if     defined(__EXTENSIONS__) || (_POSIX_C_SOURCE >= 199506L)
 315 #include <sys/unistd.h>
 316 
 317 #if !defined(_SIZE_T) || __cplusplus >= 199711L
 318 #define _SIZE_T
 319 #if defined(_LP64) || defined(_I32LPx)
 320 typedef unsigned long size_t;   /* size of something in bytes */
 321 #else
 322 typedef unsigned int  size_t;   /* (historical version) */
 323 #endif
 324 #endif  /* _SIZE_T */
 325 
 326 extern long _sysconf(int);      /* System Private interface to sysconf() */
 327 
 328 #define PTHREAD_STACK_MIN       ((size_t)_sysconf(_SC_THREAD_STACK_MIN))
 329 /* Added for UNIX98 conformance */
 330 #define PTHREAD_DESTRUCTOR_ITERATIONS   _POSIX_THREAD_DESTRUCTOR_ITERATIONS
 331 #define PTHREAD_KEYS_MAX                _POSIX_THREAD_KEYS_MAX
 332 #define PTHREAD_THREADS_MAX             _POSIX_THREAD_THREADS_MAX
 333 #endif  /* defined(__EXTENSIONS__) || (_POSIX_C_SOURCE >= 199506L) */
 334 
 335 #ifdef  __cplusplus
 336 }
 337 #endif
 338 
 339 #endif  /* _LIMITS_H */