LibC: Add all of the missing POSIX definitions in unistd.h and limits.h

This commit is contained in:
2025-06-01 05:05:08 +03:00
parent df7f245cf8
commit 91756c057e
4 changed files with 768 additions and 139 deletions

View File

@@ -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;
}