From 91756c057e7110bce0c9a2fbb2a530dc83351cd9 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Sun, 1 Jun 2025 05:05:08 +0300 Subject: [PATCH] LibC: Add all of the missing POSIX definitions in unistd.h and limits.h --- kernel/include/kernel/Memory/Types.h | 1 + userspace/libraries/LibC/include/limits.h | 187 +++++--- userspace/libraries/LibC/include/unistd.h | 523 ++++++++++++++++++---- userspace/libraries/LibC/unistd.cpp | 196 ++++++++ 4 files changed, 768 insertions(+), 139 deletions(-) diff --git a/kernel/include/kernel/Memory/Types.h b/kernel/include/kernel/Memory/Types.h index db37994dae..acc33320ff 100644 --- a/kernel/include/kernel/Memory/Types.h +++ b/kernel/include/kernel/Memory/Types.h @@ -12,6 +12,7 @@ #error #endif +#undef PAGE_SIZE #define PAGE_SIZE ((uintptr_t)4096) #define PAGE_SIZE_SHIFT 12 #define PAGE_ADDR_MASK (~(uintptr_t)0xFFF) diff --git a/userspace/libraries/LibC/include/limits.h b/userspace/libraries/LibC/include/limits.h index 6d1ce6efb4..e2b3de616f 100644 --- a/userspace/libraries/LibC/include/limits.h +++ b/userspace/libraries/LibC/include/limits.h @@ -7,67 +7,140 @@ __BEGIN_DECLS -#define _POSIX_AIO_LISTIO_MAX 2 -#define _POSIX_AIO_MAX 1 -#define _POSIX_ARG_MAX 4096 -#define _POSIX_CHILD_MAX 25 -#define _POSIX_DELAYTIMER_MAX 32 -#define _POSIX_HOST_NAME_MAX 255 -#define _POSIX_LINK_MAX 8 -#define _POSIX_LOGIN_NAME_MAX 9 -#define _POSIX_MAX_CANON 255 -#define _POSIX_MAX_INPUT 255 -#define _POSIX_MQ_OPEN_MAX 8 -#define _POSIX_MQ_PRIO_MAX 32 -#define _POSIX_NAME_MAX 14 -#define _POSIX_NGROUPS_MAX 8 -#define _POSIX_OPEN_MAX 20 -#define _POSIX_PATH_MAX 256 -#define _POSIX_PIPE_BUF 512 -#define _POSIX_RE_DUP_MAX 255 -#define _POSIX_RTSIG_MAX 8 -#define _POSIX_SEM_NSEMS_MAX 256 -#define _POSIX_SEM_VALUE_MAX 32767 -#define _POSIX_SIGQUEUE_MAX 32 -#define _POSIX_SSIZE_MAX 32767 -#define _POSIX_SS_REPL_MAX 4 -#define _POSIX_STREAM_MAX 8 -#define _POSIX_SYMLINK_MAX 255 -#define _POSIX_SYMLOOP_MAX 8 +// Maximum Values + +#define _POSIX_CLOCKRES_MIN 20000000 + + +// Minimum Values + +#define _POSIX_AIO_LISTIO_MAX 2 +#define _POSIX_AIO_MAX 1 +#define _POSIX_ARG_MAX 4096 +#define _POSIX_CHILD_MAX 25 +#define _POSIX_DELAYTIMER_MAX 32 +#define _POSIX_HOST_NAME_MAX 255 +#define _POSIX_LINK_MAX 8 +#define _POSIX_LOGIN_NAME_MAX 9 +#define _POSIX_MAX_CANON 255 +#define _POSIX_MAX_INPUT 255 +#define _POSIX_MQ_OPEN_MAX 8 +#define _POSIX_MQ_PRIO_MAX 32 +#define _POSIX_NAME_MAX 14 +#define _POSIX_NGROUPS_MAX 8 +#define _POSIX_OPEN_MAX 20 +#define _POSIX_PATH_MAX 256 +#define _POSIX_PIPE_BUF 512 +#define _POSIX_RE_DUP_MAX 255 +#define _POSIX_RTSIG_MAX 8 +#define _POSIX_SEM_NSEMS_MAX 256 +#define _POSIX_SEM_VALUE_MAX 32767 +#define _POSIX_SIGQUEUE_MAX 32 +#define _POSIX_SSIZE_MAX 32767 +#define _POSIX_SS_REPL_MAX 4 +#define _POSIX_STREAM_MAX 8 +#define _POSIX_SYMLINK_MAX 255 +#define _POSIX_SYMLOOP_MAX 8 #define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4 -#define _POSIX_THREAD_KEYS_MAX 128 -#define _POSIX_THREAD_THREADS_MAX 64 -#define _POSIX_TIMER_MAX 32 -#define _POSIX_TRACE_EVENT_NAME_MAX 30 -#define _POSIX_TRACE_NAME_MAX 8 -#define _POSIX_TRACE_SYS_MAX 8 -#define _POSIX_TRACE_USER_EVENT_MAX 32 -#define _POSIX_TTY_NAME_MAX 9 -#define _POSIX_TZNAME_MAX 6 -#define _POSIX2_BC_BASE_MAX 99 -#define _POSIX2_BC_DIM_MAX 2048 -#define _POSIX2_BC_SCALE_MAX 99 -#define _POSIX2_BC_STRING_MAX 1000 -#define _POSIX2_CHARCLASS_NAME_MAX 14 -#define _POSIX2_COLL_WEIGHTS_MAX 2 -#define _POSIX2_EXPR_NEST_MAX 32 -#define _POSIX2_LINE_MAX 2048 -#define _POSIX2_RE_DUP_MAX 255 -#define _XOPEN_IOV_MAX 16 -#define _XOPEN_NAME_MAX 255 -#define _XOPEN_PATH_MAX 1024 +#define _POSIX_THREAD_KEYS_MAX 128 +#define _POSIX_THREAD_THREADS_MAX 64 +#define _POSIX_TIMER_MAX 32 +#define _POSIX_TRACE_EVENT_NAME_MAX 30 +#define _POSIX_TRACE_NAME_MAX 8 +#define _POSIX_TRACE_SYS_MAX 8 +#define _POSIX_TRACE_USER_EVENT_MAX 32 +#define _POSIX_TTY_NAME_MAX 9 +#define _POSIX_TZNAME_MAX 6 +#define _POSIX2_BC_BASE_MAX 99 +#define _POSIX2_BC_DIM_MAX 2048 +#define _POSIX2_BC_SCALE_MAX 99 +#define _POSIX2_BC_STRING_MAX 1000 +#define _POSIX2_CHARCLASS_NAME_MAX 14 +#define _POSIX2_COLL_WEIGHTS_MAX 2 +#define _POSIX2_EXPR_NEST_MAX 32 +#define _POSIX2_LINE_MAX 2048 +#define _POSIX2_RE_DUP_MAX 255 +#define _XOPEN_IOV_MAX 16 +#define _XOPEN_NAME_MAX 255 +#define _XOPEN_PATH_MAX 1024 -#define ARG_MAX _POSIX_ARG_MAX -#define OPEN_MAX 64 -#define NAME_MAX 255 -#define PATH_MAX 256 -#define PASS_MAX 256 -#define LOGIN_NAME_MAX 256 -#define HOST_NAME_MAX 255 -#define TTY_NAME_MAX PATH_MAX -#define PTHREAD_KEYS_MAX _POSIX_THREAD_KEYS_MAX +// Runtime Invariant Values (Possibly Indeterminate) + +#define AIO_LISTIO_MAX _POSIX_AIO_LISTIO_MAX +#define AIO_MAX _POSIX_AIO_MAX +#define AIO_PRIO_DELTA_MAX 0 +#define ARG_MAX _POSIX_ARG_MAX +#define ATEXIT_MAX 128 +#define CHILD_MAX _POSIX_CHILD_MAX +#define DELAYTIMER_MAX _POSIX_DELAYTIMER_MAX +#define HOST_NAME_MAX 255 +#define IOV_MAX _XOPEN_IOV_MAX +#define LOGIN_NAME_MAX 256 +#define MQ_OPEN_MAX _POSIX_MQ_OPEN_MAX +#define MQ_PRIO_MAX _POSIX_MQ_PRIO_MAX +#define OPEN_MAX 64 +#define PAGESIZE PAGE_SIZE #define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS +#define PTHREAD_KEYS_MAX _POSIX_THREAD_KEYS_MAX +#define PTHREAD_STACK_MIN PAGE_SIZE +#define PTHREAD_THREADS_MAX _POSIX_THREAD_THREADS_MAX +#define RTSIG_MAX _POSIX_RTSIG_MAX +#define SEM_NSEMS_MAX _POSIX_SEM_NSEMS_MAX +#define SEM_VALUE_MAX _POSIX_SEM_VALUE_MAX +#define SIGQUEUE_MAX _POSIX_SIGQUEUE_MAX +#define SS_REPL_MAX _POSIX_SS_REPL_MAX +#define STREAM_MAX _POSIX_STREAM_MAX +#define SYMLOOP_MAX _POSIX_SYMLOOP_MAX +#define TIMER_MAX _POSIX_TIMER_MAX +#define TRACE_EVENT_NAME_MAX _POSIX_TRACE_EVENT_NAME_MAX +#define TRACE_NAME_MAX _POSIX_TRACE_NAME_MAX +#define TRACE_SYS_MAX _POSIX_TRACE_SYS_MAX +#define TRACE_USER_EVENT_MAX _POSIX_TRACE_USER_EVENT_MAX +#define TTY_NAME_MAX PATH_MAX +#define TZNAME_MAX _POSIX_TZNAME_MAX + +#ifndef PAGE_SIZE +#define PAGE_SIZE 4096 +#endif + +// Pathname Variable Values + +#define FILESIZEBITS 32 +#define LINK_MAX _POSIX_LINK_MAX +#define MAX_CANON _POSIX_MAX_CANON +#define MAX_INPUT _POSIX_MAX_INPUT +#define NAME_MAX 255 +#define PATH_MAX _POSIX_PATH_MAX +#define PIPE_BUF PAGE_SIZE +//#define POSIX_ALLOC_SIZE_MIN +//#define POSIX_REC_INCR_XFER_SIZE +//#define POSIX_REC_MAX_XFER_SIZE +//#define POSIX_REC_MIN_XFER_SIZE +//#define POSIX_REC_XFER_ALIGN +#define SYMLINK_MAX _POSIX_SYMLINK_MAX + + +// Runtime Increasable Values + +#define BC_BASE_MAX _POSIX2_BC_BASE_MAX +#define BC_DIM_MAX _POSIX2_BC_DIM_MAX +#define BC_SCALE_MAX _POSIX2_BC_SCALE_MAX +#define BC_STRING_MAX _POSIX2_BC_STRING_MAX +#define CHARCLASS_NAME_MAX _POSIX2_CHARCLASS_NAME_MAX +#define COLL_WEIGHTS_MAX _POSIX2_COLL_WEIGHTS_MAX +#define EXPR_NEST_MAX _POSIX2_EXPR_NEST_MAX +#define LINE_MAX _POSIX2_LINE_MAX +#define NGROUPS_MAX _POSIX_NGROUPS_MAX +#define RE_DUP_MAX _POSIX_RE_DUP_MAX + + +// Legacy things + +#define PASS_MAX 256 + + +// Numerical Limits #define CHAR_MAX SCHAR_MAX #define CHAR_MIN SCHAR_MIN diff --git a/userspace/libraries/LibC/include/unistd.h b/userspace/libraries/LibC/include/unistd.h index 795cc918d1..dc19c436b4 100644 --- a/userspace/libraries/LibC/include/unistd.h +++ b/userspace/libraries/LibC/include/unistd.h @@ -7,89 +7,109 @@ __BEGIN_DECLS -#define _POSIX_VERSION 200809L +#define _POSIX_VERSION 200809L #define _POSIX2_VERSION -1 -#define _XOPEN_VERSION 700 +#define _XOPEN_VERSION 700 -#define _POSIX_ADVISORY_INFO -1 -#define _POSIX_ASYNCHRONOUS_IO -1 -#define _POSIX_BARRIERS -1 -#define _POSIX_CHOWN_RESTRICTED -1 -#define _POSIX_CLOCK_SELECTION -1 -#define _POSIX_CPUTIME -1 -#define _POSIX_FSYNC -1 -#define _POSIX_IPV6 -1 -#define _POSIX_JOB_CONTROL -1 -#define _POSIX_MAPPED_FILES -1 -#define _POSIX_MEMLOCK -1 -#define _POSIX_MEMLOCK_RANGE -1 -#define _POSIX_MEMORY_PROTECTION -1 -#define _POSIX_MESSAGE_PASSING -1 -#define _POSIX_MONOTONIC_CLOCK -1 -#define _POSIX_NO_TRUNC -1 -#define _POSIX_PRIORITIZED_IO -1 -#define _POSIX_PRIORITY_SCHEDULING -1 -#define _POSIX_RAW_SOCKETS -1 -#define _POSIX_READER_WRITER_LOCKS -1 -#define _POSIX_REALTIME_SIGNALS -1 -#define _POSIX_REGEXP -1 -#define _POSIX_SAVED_IDS -1 -#define _POSIX_SEMAPHORES -1 -#define _POSIX_SHARED_MEMORY_OBJECTS -1 -#define _POSIX_SHELL -1 -#define _POSIX_SPAWN -1 -#define _POSIX_SPIN_LOCKS -1 -#define _POSIX_SPORADIC_SERVER -1 -#define _POSIX_SYNCHRONIZED_IO xx -#define _POSIX_THREAD_ATTR_STACKADDR -1 -#define _POSIX_THREAD_ATTR_STACKSIZE -1 -#define _POSIX_THREAD_CPUTIME -1 -#define _POSIX_THREAD_PRIO_INHERIT -1 -#define _POSIX_THREAD_PRIO_PROTECT -1 -#define _POSIX_THREAD_PRIORITY_SCHEDULING -1 -#define _POSIX_THREAD_PROCESS_SHARED -1 -#define _POSIX_THREAD_ROBUST_PRIO_INHERIT -1 -#define _POSIX_THREAD_ROBUST_PRIO_PROTECT -1 -#define _POSIX_THREAD_SAFE_FUNCTIONS -1 -#define _POSIX_THREAD_SPORADIC_SERVER -1 -#define _POSIX_THREADS -1 -#define _POSIX_TIMEOUTS -1 -#define _POSIX_TIMERS -1 -#define _POSIX_TRACE -1 -#define _POSIX_TRACE_EVENT_FILTER -1 -#define _POSIX_TRACE_INHERIT -1 -#define _POSIX_TRACE_LOG -1 -#define _POSIX_TYPED_MEMORY_OBJECTS -1 -#define _POSIX_V6_ILP32_OFF32 -1 -#define _POSIX_V6_ILP32_OFFBIG -1 -#define _POSIX_V6_LP64_OFF64 -1 -#define _POSIX_V6_LPBIG_OFFBIG -1 -#define _POSIX_V7_ILP32_OFF32 -1 -#define _POSIX_V7_ILP32_OFFBIG -1 -#define _POSIX_V7_LP64_OFF64 -1 -#define _POSIX_V7_LPBIG_OFFBIG -1 -#define _POSIX2_C_BIND -1 -#define _POSIX2_C_DEV -1 -#define _POSIX2_CHAR_TERM -1 -#define _POSIX2_FORT_DEV -1 -#define _POSIX2_FORT_RUN -1 -#define _POSIX2_LOCALEDEF -1 -#define _POSIX2_PBS -1 -#define _POSIX2_PBS_ACCOUNTING -1 -#define _POSIX2_PBS_CHECKPOINT -1 -#define _POSIX2_PBS_LOCATE -1 -#define _POSIX2_PBS_MESSAGE -1 -#define _POSIX2_PBS_TRACK -1 -#define _POSIX2_SW_DEV -1 -#define _POSIX2_UPE -1 -#define _XOPEN_CRYPT -1 -#define _XOPEN_ENH_I18N -1 -#define _XOPEN_REALTIME -1 +// -1 not supported for compilation +// 0 might or might not be supported during runtime +// >0 always supported + // MISSING / UNSUPPORTED +#define _POSIX_ADVISORY_INFO -1 /* posix_{fadvice,fallocate,memalign,madvice} */ +#define _POSIX_ASYNCHRONOUS_IO -1 /* aio_{cancel,error,fsync,read,return,suspend,write,listio} */ +#define _POSIX_BARRIERS 200809L +#define _POSIX_CHOWN_RESTRICTED 200809L +#define _POSIX_CLOCK_SELECTION 0 /* pthread_condattr_{getclock,setclock}, clock_nanosleep */ +#define _POSIX_CPUTIME 0 /* working CLOCK_CPUTIME */ +#define _POSIX_FSYNC 200809L +#define _POSIX_IPV6 0 /* IPv6 :D */ +#define _POSIX_JOB_CONTROL 200809L /* tcdrain, tcsendbreak */ +#define _POSIX_MAPPED_FILES 200809L +#define _POSIX_MEMLOCK -1 /* mlockall, munlockall */ +#define _POSIX_MEMLOCK_RANGE -1 /* mlock, munlock */ +#define _POSIX_MEMORY_PROTECTION -1 /* mprotect */ +#define _POSIX_MESSAGE_PASSING -1 /* mq_{close,getattr,notify,open,receive,send,sendattr,unlink} */ +#define _POSIX_MONOTONIC_CLOCK 200809L +#define _POSIX_NO_TRUNC 200809L +#define _POSIX_PRIORITIZED_IO -1 /* aio_{read,write} */ +#define _POSIX_PRIORITY_SCHEDULING -1 /* sched_{get_priority_min,get_priority_max,getparam,getscheduler,rr_get_interval,setparam,setscheduler} */ +#define _POSIX_RAW_SOCKETS 0 /* raw sockets :D */ +#define _POSIX_READER_WRITER_LOCKS 200809L +#define _POSIX_REALTIME_SIGNALS -1 /* siq{queue,timedwait,waitinfo} */ +#define _POSIX_REGEXP -1 /* reg{comp,error,exec,free} */ +#define _POSIX_SAVED_IDS 200809L +#define _POSIX_SEMAPHORES -1 /* sem_{close,destroy,getvalue,init,open,post,trywait,unlink,wait} */ +#define _POSIX_SHARED_MEMORY_OBJECTS -1 /* shm_{open,unlink} */ +#define _POSIX_SHELL 200809L +#define _POSIX_SPAWN -1 /* posix_spawn* */ +#define _POSIX_SPIN_LOCKS 200809L +#define _POSIX_SPORADIC_SERVER -1 /* sched_{setparam,setscheduler} with SCHED_SPORADIC */ +#define _POSIX_SYNCHRONIZED_IO 200809L +#define _POSIX_THREAD_ATTR_STACKADDR 0 /* pthread_attr_{get,set}stack{,addr} */ +#define _POSIX_THREAD_ATTR_STACKSIZE 0 /* pthread_attr_{get,set}stack{,size} */ +#define _POSIX_THREAD_CPUTIME -1 /* pthread_getcpuclockid, clock_{getres,gettime,settime,create} for thread CPU time */ +#define _POSIX_THREAD_PRIO_INHERIT -1 /* pthread_mutexattr_{get,set}protocol */ +#define _POSIX_THREAD_PRIO_PROTECT -1 /* pthread_mutex{,attr}_{get,set}prioceiling, pthread_mutexattr_{get,set}protocol */ +#define _POSIX_THREAD_PRIORITY_SCHEDULING -1 /* pthread_attr_{get,set}{inheritsched,schedpolicy,scope}, pthread_{get,set}schedparam, pthread_setschedprio */ +#define _POSIX_THREAD_PROCESS_SHARED 200809L +#define _POSIX_THREAD_ROBUST_PRIO_INHERIT 0 /* robust mutexes */ +#define _POSIX_THREAD_ROBUST_PRIO_PROTECT 0 /* robust mutexes */ +#define _POSIX_THREAD_SAFE_FUNCTIONS 200809L /* some *_r functions */ +#define _POSIX_THREAD_SPORADIC_SERVER -1 +#define _POSIX_THREADS 200809L +#define _POSIX_TIMEOUTS -1 /* mq_timed{receive,send}, sem_timedwait, posix_trace_timedgetnext_event */ +#define _POSIX_TIMERS -1 /* timer_{create,delete,gettime,getoverrun,settime} */ +#define _POSIX_TRACE -1 /* posix_trace_* */ +#define _POSIX_TRACE_EVENT_FILTER -1 /* posix_trace_* */ +#define _POSIX_TRACE_INHERIT -1 /* posix_trace_* */ +#define _POSIX_TRACE_LOG -1 /* posix_trace_* */ +#define _POSIX_TYPED_MEMORY_OBJECTS -1 /* posix_mem_offset, posix_typed_mem_{get_info,open} */ + +#define _POSIX2_C_BIND 200809L +#define _POSIX2_C_DEV -1 /* c99, lex, yacc */ +#define _POSIX2_CHAR_TERM 200809L +#define _POSIX2_FORT_DEV -1 /* fortran stuff */ +#define _POSIX2_FORT_RUN -1 /* fortran stuff */ +#define _POSIX2_LOCALEDEF -1 /* localedef */ +#define _POSIX2_PBS -1 /* batch stuff */ +#define _POSIX2_PBS_ACCOUNTING -1 /* batch stuff */ +#define _POSIX2_PBS_CHECKPOINT -1 /* batch stuff */ +#define _POSIX2_PBS_LOCATE -1 /* batch stuff */ +#define _POSIX2_PBS_MESSAGE -1 /* batch stuff */ +#define _POSIX2_PBS_TRACK -1 /* batch stuff */ +#define _POSIX2_SW_DEV -1 /* ar, make, nm, strip */ +#define _POSIX2_UPE -1 /* bg, ex, fc, fg, jobs, more, talk, vi */ + +#define _XOPEN_CRYPT -1 /* crypt, encrypt, setkey */ +#define _XOPEN_ENH_I18N -1 +#define _XOPEN_REALTIME -1 #define _XOPEN_REALTIME_THREADS -1 -#define _XOPEN_SHM -1 -#define _XOPEN_STREAMS -1 -#define _XOPEN_UNIX -1 -#define _XOPEN_UUCP -1 +#define _XOPEN_SHM -1 +#define _XOPEN_STREAMS -1 +#define _XOPEN_UNIX 200809L +#define _XOPEN_UUCP -1 + +#if defined(__x86_64__) +# define _POSIX_V6_ILP32_OFF32 -1 +# define _POSIX_V6_ILP32_OFFBIG -1 +# define _POSIX_V6_LP64_OFF64 1 +# define _POSIX_V6_LPBIG_OFFBIG 1 +# define _POSIX_V7_ILP32_OFF32 -1 +# define _POSIX_V7_ILP32_OFFBIG -1 +# define _POSIX_V7_LP64_OFF64 1 +# define _POSIX_V7_LPBIG_OFFBIG 1 +#elif defined(__i686__) +# define _POSIX_V6_ILP32_OFF32 1 +# define _POSIX_V6_ILP32_OFFBIG -1 +# define _POSIX_V6_LP64_OFF64 -1 +# define _POSIX_V6_LPBIG_OFFBIG -1 +# define _POSIX_V7_ILP32_OFF32 1 +# define _POSIX_V7_ILP32_OFFBIG -1 +# define _POSIX_V7_LP64_OFF64 -1 +# define _POSIX_V7_LPBIG_OFFBIG -1 +#else +#error "TODO: _POSIX_ compilation environment" +#endif #include #include @@ -104,31 +124,370 @@ __BEGIN_DECLS #define __need_useconds_t #include -// FIXME: _CS prefixed definitions +enum +{ + _CS_PATH = 1, +#define _CS_PATH _CS_PATH + _CS_POSIX_V6_ILP32_OFF32_CFLAGS, +#define _CS_POSIX_V6_ILP32_OFF32_CFLAGS _CS_POSIX_V6_ILP32_OFF32_CFLAGS + _CS_POSIX_V6_ILP32_OFF32_LDFLAGS, +#define _CS_POSIX_V6_ILP32_OFF32_LDFLAGS _CS_POSIX_V6_ILP32_OFF32_LDFLAGS + _CS_POSIX_V6_ILP32_OFF32_LIBS, +#define _CS_POSIX_V6_ILP32_OFF32_LIBS _CS_POSIX_V6_ILP32_OFF32_LIBS + _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS, +#define _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS + _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS, +#define _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS + _CS_POSIX_V6_ILP32_OFFBIG_LIBS, +#define _CS_POSIX_V6_ILP32_OFFBIG_LIBS _CS_POSIX_V6_ILP32_OFFBIG_LIBS + _CS_POSIX_V6_LP64_OFF64_CFLAGS, +#define _CS_POSIX_V6_LP64_OFF64_CFLAGS _CS_POSIX_V6_LP64_OFF64_CFLAGS + _CS_POSIX_V6_LP64_OFF64_LDFLAGS, +#define _CS_POSIX_V6_LP64_OFF64_LDFLAGS _CS_POSIX_V6_LP64_OFF64_LDFLAGS + _CS_POSIX_V6_LP64_OFF64_LIBS, +#define _CS_POSIX_V6_LP64_OFF64_LIBS _CS_POSIX_V6_LP64_OFF64_LIBS + _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS, +#define _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS + _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS, +#define _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS + _CS_POSIX_V6_LPBIG_OFFBIG_LIBS, +#define _CS_POSIX_V6_LPBIG_OFFBIG_LIBS _CS_POSIX_V6_LPBIG_OFFBIG_LIBS + _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS, +#define _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS + _CS_V6_ENV, +#define _CS_V6_ENV _CS_V6_ENV + _CS_POSIX_V7_ILP32_OFF32_CFLAGS, +#define _CS_POSIX_V7_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS + _CS_POSIX_V7_ILP32_OFF32_LDFLAGS, +#define _CS_POSIX_V7_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS + _CS_POSIX_V7_ILP32_OFF32_LIBS, +#define _CS_POSIX_V7_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS + _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS, +#define _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS + _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS, +#define _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS + _CS_POSIX_V7_ILP32_OFFBIG_LIBS, +#define _CS_POSIX_V7_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS + _CS_POSIX_V7_LP64_OFF64_CFLAGS, +#define _CS_POSIX_V7_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS + _CS_POSIX_V7_LP64_OFF64_LDFLAGS, +#define _CS_POSIX_V7_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS + _CS_POSIX_V7_LP64_OFF64_LIBS, +#define _CS_POSIX_V7_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS + _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS, +#define _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS + _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS, +#define _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS + _CS_POSIX_V7_LPBIG_OFFBIG_LIBS, +#define _CS_POSIX_V7_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS + _CS_POSIX_V7_THREADS_CFLAGS, +#define _CS_POSIX_V7_THREADS_CFLAGS _CS_POSIX_V7_THREADS_CFLAGS + _CS_POSIX_V7_THREADS_LDFLAGS, +#define _CS_POSIX_V7_THREADS_LDFLAGS _CS_POSIX_V7_THREADS_LDFLAGS + _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS, +#define _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS + _CS_V7_ENV, +#define _CS_V7_ENV _CS_V7_ENV +}; enum { - _PC_2_SYMLINKS, + _PC_2_SYMLINKS = 1, +#define _PC_2_SYMLINKS _PC_2_SYMLINKS _PC_ALLOC_SIZE_MIN, +#define _PC_ALLOC_SIZE_MIN _PC_ALLOC_SIZE_MIN _PC_ASYNC_IO, +#define _PC_ASYNC_IO _PC_ASYNC_IO _PC_CHOWN_RESTRICTED, +#define _PC_CHOWN_RESTRICTED _PC_CHOWN_RESTRICTED _PC_FILESIZEBITS, +#define _PC_FILESIZEBITS _PC_FILESIZEBITS _PC_LINK_MAX, +#define _PC_LINK_MAX _PC_LINK_MAX _PC_MAX_CANON, +#define _PC_MAX_CANON _PC_MAX_CANON _PC_MAX_INPUT, +#define _PC_MAX_INPUT _PC_MAX_INPUT _PC_NAME_MAX, +#define _PC_NAME_MAX _PC_NAME_MAX _PC_NO_TRUNC, +#define _PC_NO_TRUNC _PC_NO_TRUNC _PC_PATH_MAX, +#define _PC_PATH_MAX _PC_PATH_MAX _PC_PIPE_BUF, +#define _PC_PIPE_BUF _PC_PIPE_BUF _PC_PRIO_IO, +#define _PC_PRIO_IO _PC_PRIO_IO _PC_REC_INCR_XFER_SIZE, +#define _PC_REC_INCR_XFER_SIZE _PC_REC_INCR_XFER_SIZE _PC_REC_MAX_XFER_SIZE, +#define _PC_REC_MAX_XFER_SIZE _PC_REC_MAX_XFER_SIZE _PC_REC_MIN_XFER_SIZE, +#define _PC_REC_MIN_XFER_SIZE _PC_REC_MIN_XFER_SIZE _PC_REC_XFER_ALIGN, +#define _PC_REC_XFER_ALIGN _PC_REC_XFER_ALIGN _PC_SYMLINK_MAX, +#define _PC_SYMLINK_MAX _PC_SYMLINK_MAX _PC_SYNC_IO, +#define _PC_SYNC_IO _PC_SYNC_IO _PC_TIMESTAMP_RESOLUTION, +#define _PC_TIMESTAMP_RESOLUTION _PC_TIMESTAMP_RESOLUTION _PC_VDISABLE, +#define _PC_VDISABLE _PC_VDISABLE +}; + +enum +{ + _SC_2_C_BIND = 1, +#define _SC_2_C_BIND _SC_2_C_BIND + _SC_2_C_DEV, +#define _SC_2_C_DEV _SC_2_C_DEV + _SC_2_CHAR_TERM, +#define _SC_2_CHAR_TERM _SC_2_CHAR_TERM + _SC_2_FORT_DEV, +#define _SC_2_FORT_DEV _SC_2_FORT_DEV + _SC_2_FORT_RUN, +#define _SC_2_FORT_RUN _SC_2_FORT_RUN + _SC_2_LOCALEDEF, +#define _SC_2_LOCALEDEF _SC_2_LOCALEDEF + _SC_2_PBS, +#define _SC_2_PBS _SC_2_PBS + _SC_2_PBS_ACCOUNTING, +#define _SC_2_PBS_ACCOUNTING _SC_2_PBS_ACCOUNTING + _SC_2_PBS_CHECKPOINT, +#define _SC_2_PBS_CHECKPOINT _SC_2_PBS_CHECKPOINT + _SC_2_PBS_LOCATE, +#define _SC_2_PBS_LOCATE _SC_2_PBS_LOCATE + _SC_2_PBS_MESSAGE, +#define _SC_2_PBS_MESSAGE _SC_2_PBS_MESSAGE + _SC_2_PBS_TRACK, +#define _SC_2_PBS_TRACK _SC_2_PBS_TRACK + _SC_2_SW_DEV, +#define _SC_2_SW_DEV _SC_2_SW_DEV + _SC_2_UPE, +#define _SC_2_UPE _SC_2_UPE + _SC_2_VERSION, +#define _SC_2_VERSION _SC_2_VERSION + _SC_ADVISORY_INFO, +#define _SC_ADVISORY_INFO _SC_ADVISORY_INFO + _SC_AIO_LISTIO_MAX, +#define _SC_AIO_LISTIO_MAX _SC_AIO_LISTIO_MAX + _SC_AIO_MAX, +#define _SC_AIO_MAX _SC_AIO_MAX + _SC_AIO_PRIO_DELTA_MAX, +#define _SC_AIO_PRIO_DELTA_MAX _SC_AIO_PRIO_DELTA_MAX + _SC_ARG_MAX, +#define _SC_ARG_MAX _SC_ARG_MAX + _SC_ASYNCHRONOUS_IO, +#define _SC_ASYNCHRONOUS_IO _SC_ASYNCHRONOUS_IO + _SC_ATEXIT_MAX, +#define _SC_ATEXIT_MAX _SC_ATEXIT_MAX + _SC_BARRIERS, +#define _SC_BARRIERS _SC_BARRIERS + _SC_BC_BASE_MAX, +#define _SC_BC_BASE_MAX _SC_BC_BASE_MAX + _SC_BC_DIM_MAX, +#define _SC_BC_DIM_MAX _SC_BC_DIM_MAX + _SC_BC_SCALE_MAX, +#define _SC_BC_SCALE_MAX _SC_BC_SCALE_MAX + _SC_BC_STRING_MAX, +#define _SC_BC_STRING_MAX _SC_BC_STRING_MAX + _SC_CHILD_MAX, +#define _SC_CHILD_MAX _SC_CHILD_MAX + _SC_CLK_TCK, +#define _SC_CLK_TCK _SC_CLK_TCK + _SC_CLOCK_SELECTION, +#define _SC_CLOCK_SELECTION _SC_CLOCK_SELECTION + _SC_COLL_WEIGHTS_MAX, +#define _SC_COLL_WEIGHTS_MAX _SC_COLL_WEIGHTS_MAX + _SC_CPUTIME, +#define _SC_CPUTIME _SC_CPUTIME + _SC_DELAYTIMER_MAX, +#define _SC_DELAYTIMER_MAX _SC_DELAYTIMER_MAX + _SC_EXPR_NEST_MAX, +#define _SC_EXPR_NEST_MAX _SC_EXPR_NEST_MAX + _SC_FSYNC, +#define _SC_FSYNC _SC_FSYNC + _SC_GETGR_R_SIZE_MAX, +#define _SC_GETGR_R_SIZE_MAX _SC_GETGR_R_SIZE_MAX + _SC_GETPW_R_SIZE_MAX, +#define _SC_GETPW_R_SIZE_MAX _SC_GETPW_R_SIZE_MAX + _SC_HOST_NAME_MAX, +#define _SC_HOST_NAME_MAX _SC_HOST_NAME_MAX + _SC_IOV_MAX, +#define _SC_IOV_MAX _SC_IOV_MAX + _SC_IPV6, +#define _SC_IPV6 _SC_IPV6 + _SC_JOB_CONTROL, +#define _SC_JOB_CONTROL _SC_JOB_CONTROL + _SC_LINE_MAX, +#define _SC_LINE_MAX _SC_LINE_MAX + _SC_LOGIN_NAME_MAX, +#define _SC_LOGIN_NAME_MAX _SC_LOGIN_NAME_MAX + _SC_MAPPED_FILES, +#define _SC_MAPPED_FILES _SC_MAPPED_FILES + _SC_MEMLOCK, +#define _SC_MEMLOCK _SC_MEMLOCK + _SC_MEMLOCK_RANGE, +#define _SC_MEMLOCK_RANGE _SC_MEMLOCK_RANGE + _SC_MEMORY_PROTECTION, +#define _SC_MEMORY_PROTECTION _SC_MEMORY_PROTECTION + _SC_MESSAGE_PASSING, +#define _SC_MESSAGE_PASSING _SC_MESSAGE_PASSING + _SC_MONOTONIC_CLOCK, +#define _SC_MONOTONIC_CLOCK _SC_MONOTONIC_CLOCK + _SC_MQ_OPEN_MAX, +#define _SC_MQ_OPEN_MAX _SC_MQ_OPEN_MAX + _SC_MQ_PRIO_MAX, +#define _SC_MQ_PRIO_MAX _SC_MQ_PRIO_MAX + _SC_NGROUPS_MAX, +#define _SC_NGROUPS_MAX _SC_NGROUPS_MAX + _SC_OPEN_MAX, +#define _SC_OPEN_MAX _SC_OPEN_MAX + _SC_PAGE_SIZE, +#define _SC_PAGE_SIZE _SC_PAGE_SIZE + _SC_PAGESIZE, +#define _SC_PAGESIZE _SC_PAGESIZE + _SC_PRIORITIZED_IO, +#define _SC_PRIORITIZED_IO _SC_PRIORITIZED_IO + _SC_PRIORITY_SCHEDULING, +#define _SC_PRIORITY_SCHEDULING _SC_PRIORITY_SCHEDULING + _SC_RAW_SOCKETS, +#define _SC_RAW_SOCKETS _SC_RAW_SOCKETS + _SC_RE_DUP_MAX, +#define _SC_RE_DUP_MAX _SC_RE_DUP_MAX + _SC_READER_WRITER_LOCKS, +#define _SC_READER_WRITER_LOCKS _SC_READER_WRITER_LOCKS + _SC_REALTIME_SIGNALS, +#define _SC_REALTIME_SIGNALS _SC_REALTIME_SIGNALS + _SC_REGEXP, +#define _SC_REGEXP _SC_REGEXP + _SC_RTSIG_MAX, +#define _SC_RTSIG_MAX _SC_RTSIG_MAX + _SC_SAVED_IDS, +#define _SC_SAVED_IDS _SC_SAVED_IDS + _SC_SEM_NSEMS_MAX, +#define _SC_SEM_NSEMS_MAX _SC_SEM_NSEMS_MAX + _SC_SEM_VALUE_MAX, +#define _SC_SEM_VALUE_MAX _SC_SEM_VALUE_MAX + _SC_SEMAPHORES, +#define _SC_SEMAPHORES _SC_SEMAPHORES + _SC_SHARED_MEMORY_OBJECTS, +#define _SC_SHARED_MEMORY_OBJECTS _SC_SHARED_MEMORY_OBJECTS + _SC_SHELL, +#define _SC_SHELL _SC_SHELL + _SC_SIGQUEUE_MAX, +#define _SC_SIGQUEUE_MAX _SC_SIGQUEUE_MAX + _SC_SPAWN, +#define _SC_SPAWN _SC_SPAWN + _SC_SPIN_LOCKS, +#define _SC_SPIN_LOCKS _SC_SPIN_LOCKS + _SC_SPORADIC_SERVER, +#define _SC_SPORADIC_SERVER _SC_SPORADIC_SERVER + _SC_SS_REPL_MAX, +#define _SC_SS_REPL_MAX _SC_SS_REPL_MAX + _SC_STREAM_MAX, +#define _SC_STREAM_MAX _SC_STREAM_MAX + _SC_SYMLOOP_MAX, +#define _SC_SYMLOOP_MAX _SC_SYMLOOP_MAX + _SC_SYNCHRONIZED_IO, +#define _SC_SYNCHRONIZED_IO _SC_SYNCHRONIZED_IO + _SC_THREAD_ATTR_STACKADDR, +#define _SC_THREAD_ATTR_STACKADDR _SC_THREAD_ATTR_STACKADDR + _SC_THREAD_ATTR_STACKSIZE, +#define _SC_THREAD_ATTR_STACKSIZE _SC_THREAD_ATTR_STACKSIZE + _SC_THREAD_CPUTIME, +#define _SC_THREAD_CPUTIME _SC_THREAD_CPUTIME + _SC_THREAD_DESTRUCTOR_ITERATIONS, +#define _SC_THREAD_DESTRUCTOR_ITERATIONS _SC_THREAD_DESTRUCTOR_ITERATIONS + _SC_THREAD_KEYS_MAX, +#define _SC_THREAD_KEYS_MAX _SC_THREAD_KEYS_MAX + _SC_THREAD_PRIO_INHERIT, +#define _SC_THREAD_PRIO_INHERIT _SC_THREAD_PRIO_INHERIT + _SC_THREAD_PRIO_PROTECT, +#define _SC_THREAD_PRIO_PROTECT _SC_THREAD_PRIO_PROTECT + _SC_THREAD_PRIORITY_SCHEDULING, +#define _SC_THREAD_PRIORITY_SCHEDULING _SC_THREAD_PRIORITY_SCHEDULING + _SC_THREAD_PROCESS_SHARED, +#define _SC_THREAD_PROCESS_SHARED _SC_THREAD_PROCESS_SHARED + _SC_THREAD_ROBUST_PRIO_INHERIT, +#define _SC_THREAD_ROBUST_PRIO_INHERIT _SC_THREAD_ROBUST_PRIO_INHERIT + _SC_THREAD_ROBUST_PRIO_PROTECT, +#define _SC_THREAD_ROBUST_PRIO_PROTECT _SC_THREAD_ROBUST_PRIO_PROTECT + _SC_THREAD_SAFE_FUNCTIONS, +#define _SC_THREAD_SAFE_FUNCTIONS _SC_THREAD_SAFE_FUNCTIONS + _SC_THREAD_SPORADIC_SERVER, +#define _SC_THREAD_SPORADIC_SERVER _SC_THREAD_SPORADIC_SERVER + _SC_THREAD_STACK_MIN, +#define _SC_THREAD_STACK_MIN _SC_THREAD_STACK_MIN + _SC_THREAD_THREADS_MAX, +#define _SC_THREAD_THREADS_MAX _SC_THREAD_THREADS_MAX + _SC_THREADS, +#define _SC_THREADS _SC_THREADS + _SC_TIMEOUTS, +#define _SC_TIMEOUTS _SC_TIMEOUTS + _SC_TIMER_MAX, +#define _SC_TIMER_MAX _SC_TIMER_MAX + _SC_TIMERS, +#define _SC_TIMERS _SC_TIMERS + _SC_TRACE, +#define _SC_TRACE _SC_TRACE + _SC_TRACE_EVENT_FILTER, +#define _SC_TRACE_EVENT_FILTER _SC_TRACE_EVENT_FILTER + _SC_TRACE_EVENT_NAME_MAX, +#define _SC_TRACE_EVENT_NAME_MAX _SC_TRACE_EVENT_NAME_MAX + _SC_TRACE_INHERIT, +#define _SC_TRACE_INHERIT _SC_TRACE_INHERIT + _SC_TRACE_LOG, +#define _SC_TRACE_LOG _SC_TRACE_LOG + _SC_TRACE_NAME_MAX, +#define _SC_TRACE_NAME_MAX _SC_TRACE_NAME_MAX + _SC_TRACE_SYS_MAX, +#define _SC_TRACE_SYS_MAX _SC_TRACE_SYS_MAX + _SC_TRACE_USER_EVENT_MAX, +#define _SC_TRACE_USER_EVENT_MAX _SC_TRACE_USER_EVENT_MAX + _SC_TTY_NAME_MAX, +#define _SC_TTY_NAME_MAX _SC_TTY_NAME_MAX + _SC_TYPED_MEMORY_OBJECTS, +#define _SC_TYPED_MEMORY_OBJECTS _SC_TYPED_MEMORY_OBJECTS + _SC_TZNAME_MAX, +#define _SC_TZNAME_MAX _SC_TZNAME_MAX + _SC_V7_ILP32_OFF32, +#define _SC_V7_ILP32_OFF32 _SC_V7_ILP32_OFF32 + _SC_V7_ILP32_OFFBIG, +#define _SC_V7_ILP32_OFFBIG _SC_V7_ILP32_OFFBIG + _SC_V7_LP64_OFF64, +#define _SC_V7_LP64_OFF64 _SC_V7_LP64_OFF64 + _SC_V7_LPBIG_OFFBIG, +#define _SC_V7_LPBIG_OFFBIG _SC_V7_LPBIG_OFFBIG + _SC_V6_ILP32_OFF32, +#define _SC_V6_ILP32_OFF32 _SC_V6_ILP32_OFF32 + _SC_V6_ILP32_OFFBIG, +#define _SC_V6_ILP32_OFFBIG _SC_V6_ILP32_OFFBIG + _SC_V6_LP64_OFF64, +#define _SC_V6_LP64_OFF64 _SC_V6_LP64_OFF64 + _SC_V6_LPBIG_OFFBIG, +#define _SC_V6_LPBIG_OFFBIG _SC_V6_LPBIG_OFFBIG + _SC_VERSION, +#define _SC_VERSION _SC_VERSION + _SC_XOPEN_CRYPT, +#define _SC_XOPEN_CRYPT _SC_XOPEN_CRYPT + _SC_XOPEN_ENH_I18N, +#define _SC_XOPEN_ENH_I18N _SC_XOPEN_ENH_I18N + _SC_XOPEN_REALTIME, +#define _SC_XOPEN_REALTIME _SC_XOPEN_REALTIME + _SC_XOPEN_REALTIME_THREADS, +#define _SC_XOPEN_REALTIME_THREADS _SC_XOPEN_REALTIME_THREADS + _SC_XOPEN_SHM, +#define _SC_XOPEN_SHM _SC_XOPEN_SHM + _SC_XOPEN_STREAMS, +#define _SC_XOPEN_STREAMS _SC_XOPEN_STREAMS + _SC_XOPEN_UNIX, +#define _SC_XOPEN_UNIX _SC_XOPEN_UNIX + _SC_XOPEN_UUCP, +#define _SC_XOPEN_UUCP _SC_XOPEN_UUCP + _SC_XOPEN_VERSION, +#define _SC_XOPEN_VERSION _SC_XOPEN_VERSION }; #define F_OK 0x01 diff --git a/userspace/libraries/LibC/unistd.cpp b/userspace/libraries/LibC/unistd.cpp index 7105805340..6560b78bc5 100644 --- a/userspace/libraries/LibC/unistd.cpp +++ b/userspace/libraries/LibC/unistd.cpp @@ -807,3 +807,199 @@ int linkat(int fd1, const char *path1, int fd2, const char *path2, int flag) { return syscall(SYS_HARDLINKAT, fd1, path1, fd2, path2, flag); } + +size_t confstr(int name, char* buf, size_t len) +{ + (void)buf; + (void)len; + + switch (name) + { +#define CONFSTR_CASE(name) case name: return 0; + CONFSTR_CASE(_CS_PATH) + CONFSTR_CASE(_CS_POSIX_V6_ILP32_OFF32_CFLAGS) + CONFSTR_CASE(_CS_POSIX_V6_ILP32_OFF32_LDFLAGS) + CONFSTR_CASE(_CS_POSIX_V6_ILP32_OFF32_LIBS) + CONFSTR_CASE(_CS_POSIX_V6_ILP32_OFFBIG_CFLAGS) + CONFSTR_CASE(_CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS) + CONFSTR_CASE(_CS_POSIX_V6_ILP32_OFFBIG_LIBS) + CONFSTR_CASE(_CS_POSIX_V6_LP64_OFF64_CFLAGS) + CONFSTR_CASE(_CS_POSIX_V6_LP64_OFF64_LDFLAGS) + CONFSTR_CASE(_CS_POSIX_V6_LP64_OFF64_LIBS) + CONFSTR_CASE(_CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS) + CONFSTR_CASE(_CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS) + CONFSTR_CASE(_CS_POSIX_V6_LPBIG_OFFBIG_LIBS) + CONFSTR_CASE(_CS_POSIX_V6_WIDTH_RESTRICTED_ENVS) + CONFSTR_CASE(_CS_V6_ENV) + CONFSTR_CASE(_CS_POSIX_V7_ILP32_OFF32_CFLAGS) + CONFSTR_CASE(_CS_POSIX_V7_ILP32_OFF32_LDFLAGS) + CONFSTR_CASE(_CS_POSIX_V7_ILP32_OFF32_LIBS) + CONFSTR_CASE(_CS_POSIX_V7_ILP32_OFFBIG_CFLAGS) + CONFSTR_CASE(_CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS) + CONFSTR_CASE(_CS_POSIX_V7_ILP32_OFFBIG_LIBS) + CONFSTR_CASE(_CS_POSIX_V7_LP64_OFF64_CFLAGS) + CONFSTR_CASE(_CS_POSIX_V7_LP64_OFF64_LDFLAGS) + CONFSTR_CASE(_CS_POSIX_V7_LP64_OFF64_LIBS) + CONFSTR_CASE(_CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS) + CONFSTR_CASE(_CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS) + CONFSTR_CASE(_CS_POSIX_V7_LPBIG_OFFBIG_LIBS) + CONFSTR_CASE(_CS_POSIX_V7_THREADS_CFLAGS) + CONFSTR_CASE(_CS_POSIX_V7_THREADS_LDFLAGS) + CONFSTR_CASE(_CS_POSIX_V7_WIDTH_RESTRICTED_ENVS) + CONFSTR_CASE(_CS_V7_ENV) +#undef CONFSTR_CASE + } + + errno = EINVAL; + return 0; +} + +long pathconf(const char* path, int name); + +long sysconf(int name) +{ + switch (name) + { +#define POSIX2_CASE(name) case _SC_2_##name: return _POSIX2_##name; + POSIX2_CASE(C_BIND) + POSIX2_CASE(C_DEV) + POSIX2_CASE(CHAR_TERM) + POSIX2_CASE(FORT_DEV) + POSIX2_CASE(FORT_RUN) + POSIX2_CASE(LOCALEDEF) + POSIX2_CASE(PBS) + POSIX2_CASE(PBS_ACCOUNTING) + POSIX2_CASE(PBS_CHECKPOINT) + POSIX2_CASE(PBS_LOCATE) + POSIX2_CASE(PBS_MESSAGE) + POSIX2_CASE(PBS_TRACK) + POSIX2_CASE(SW_DEV) + POSIX2_CASE(UPE) + POSIX2_CASE(VERSION) +#undef POSIX2_CASE + +#define POSIX_CASE(name) case _SC_##name: return _POSIX_##name; + POSIX_CASE(ADVISORY_INFO) + POSIX_CASE(AIO_LISTIO_MAX) + POSIX_CASE(AIO_MAX) + POSIX_CASE(ARG_MAX) + POSIX_CASE(ASYNCHRONOUS_IO) + POSIX_CASE(BARRIERS) + POSIX_CASE(CHILD_MAX) + POSIX_CASE(CLOCK_SELECTION) + POSIX_CASE(CPUTIME) + POSIX_CASE(DELAYTIMER_MAX) + POSIX_CASE(FSYNC) + POSIX_CASE(HOST_NAME_MAX) + POSIX_CASE(IPV6) + POSIX_CASE(JOB_CONTROL) + POSIX_CASE(LOGIN_NAME_MAX) + POSIX_CASE(MAPPED_FILES) + POSIX_CASE(MEMLOCK) + POSIX_CASE(MEMLOCK_RANGE) + POSIX_CASE(MEMORY_PROTECTION) + POSIX_CASE(MESSAGE_PASSING) + POSIX_CASE(MONOTONIC_CLOCK) + POSIX_CASE(MQ_OPEN_MAX) + POSIX_CASE(MQ_PRIO_MAX) + POSIX_CASE(NGROUPS_MAX) + POSIX_CASE(OPEN_MAX) + POSIX_CASE(PRIORITIZED_IO) + POSIX_CASE(PRIORITY_SCHEDULING) + POSIX_CASE(RAW_SOCKETS) + POSIX_CASE(RE_DUP_MAX) + POSIX_CASE(READER_WRITER_LOCKS) + POSIX_CASE(REALTIME_SIGNALS) + POSIX_CASE(REGEXP) + POSIX_CASE(RTSIG_MAX) + POSIX_CASE(SAVED_IDS) + POSIX_CASE(SEM_NSEMS_MAX) + POSIX_CASE(SEM_VALUE_MAX) + POSIX_CASE(SEMAPHORES) + POSIX_CASE(SHARED_MEMORY_OBJECTS) + POSIX_CASE(SHELL) + POSIX_CASE(SIGQUEUE_MAX) + POSIX_CASE(SPAWN) + POSIX_CASE(SPIN_LOCKS) + POSIX_CASE(SPORADIC_SERVER) + POSIX_CASE(SS_REPL_MAX) + POSIX_CASE(STREAM_MAX) + POSIX_CASE(SYMLOOP_MAX) + POSIX_CASE(SYNCHRONIZED_IO) + POSIX_CASE(THREAD_ATTR_STACKADDR) + POSIX_CASE(THREAD_ATTR_STACKSIZE) + POSIX_CASE(THREAD_CPUTIME) + POSIX_CASE(THREAD_DESTRUCTOR_ITERATIONS) + POSIX_CASE(THREAD_KEYS_MAX) + POSIX_CASE(THREAD_PRIO_INHERIT) + POSIX_CASE(THREAD_PRIO_PROTECT) + POSIX_CASE(THREAD_PRIORITY_SCHEDULING) + POSIX_CASE(THREAD_PROCESS_SHARED) + POSIX_CASE(THREAD_ROBUST_PRIO_INHERIT) + POSIX_CASE(THREAD_ROBUST_PRIO_PROTECT) + POSIX_CASE(THREAD_SAFE_FUNCTIONS) + POSIX_CASE(THREAD_SPORADIC_SERVER) + POSIX_CASE(THREAD_THREADS_MAX) + POSIX_CASE(THREADS) + POSIX_CASE(TIMEOUTS) + POSIX_CASE(TIMER_MAX) + POSIX_CASE(TIMERS) + POSIX_CASE(TRACE) + POSIX_CASE(TRACE_EVENT_FILTER) + POSIX_CASE(TRACE_EVENT_NAME_MAX) + POSIX_CASE(TRACE_INHERIT) + POSIX_CASE(TRACE_LOG) + POSIX_CASE(TRACE_NAME_MAX) + POSIX_CASE(TRACE_SYS_MAX) + POSIX_CASE(TRACE_USER_EVENT_MAX) + POSIX_CASE(TTY_NAME_MAX) + POSIX_CASE(TYPED_MEMORY_OBJECTS) + POSIX_CASE(TZNAME_MAX) + POSIX_CASE(V7_ILP32_OFF32) + POSIX_CASE(V7_ILP32_OFFBIG) + POSIX_CASE(V7_LP64_OFF64) + POSIX_CASE(V7_LPBIG_OFFBIG) + POSIX_CASE(V6_ILP32_OFF32) + POSIX_CASE(V6_ILP32_OFFBIG) + POSIX_CASE(V6_LP64_OFF64) + POSIX_CASE(V6_LPBIG_OFFBIG) + POSIX_CASE(VERSION) +#undef POSIX_CASE + +#define LIMITS_CASE(name) case _SC_##name: return name; + LIMITS_CASE(AIO_PRIO_DELTA_MAX) + LIMITS_CASE(ATEXIT_MAX) + LIMITS_CASE(BC_BASE_MAX) + LIMITS_CASE(BC_DIM_MAX) + LIMITS_CASE(BC_SCALE_MAX) + LIMITS_CASE(BC_STRING_MAX) + LIMITS_CASE(COLL_WEIGHTS_MAX) + LIMITS_CASE(EXPR_NEST_MAX) + LIMITS_CASE(IOV_MAX) + LIMITS_CASE(LINE_MAX) +#undef LIMITS_CASE + +#define XOPEN_CASE(name) case _SC_XOPEN_##name: return _XOPEN_##name; + XOPEN_CASE(CRYPT) + XOPEN_CASE(ENH_I18N) + XOPEN_CASE(REALTIME) + XOPEN_CASE(REALTIME_THREADS) + XOPEN_CASE(SHM) + XOPEN_CASE(STREAMS) + XOPEN_CASE(UNIX) + XOPEN_CASE(UUCP) + XOPEN_CASE(VERSION) +#undef XOPEN_CASE + + case _SC_PAGE_SIZE: + case _SC_PAGESIZE: return getpagesize(); + + case _SC_CLK_TCK: return 100; + case _SC_GETGR_R_SIZE_MAX: return 1024; + case _SC_GETPW_R_SIZE_MAX: return 1024; + case _SC_THREAD_STACK_MIN: return PTHREAD_STACK_MIN; + } + + errno = EINVAL; + return -1; +}