posix: sysconf: match _SC* defines with newlib/picolib
It's possible for newlib/picolib libc libraries to internally call sysconf() which would execute zephyr's implementation. However, if the _SC* defines do not have matching values, then the incorrect switch case executes. This issue arises when using newlib/picolib libc that includes sysconf implementation for ARM. With current defaults, the zephyr sysconf() overrides the original libc sysconf() so we must ensure proper operation. We will switch to the #define list just like newlib/picolib. We can't currently use their unistd.h directly due to a domino of declaration conflicts. For the "small" macro implementation, we have to drop using CONCAT to prevent pre-expansion of the new #defines Signed-off-by: Nicholas Lowell <Nicholas.Lowell@lexmark.com>
This commit is contained in:
parent
c14f97f194
commit
c5f1c43b8c
3 changed files with 170 additions and 146 deletions
|
@ -13,133 +13,166 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum {
|
/* Values assigned are intended to match the values assigned in newlib and picolib
|
||||||
_SC_ADVISORY_INFO,
|
* Even though the POSIX standard does not require specific values, this seems to be
|
||||||
_SC_ASYNCHRONOUS_IO,
|
* required for proper sysconf() operation when called from within newlib/picolib itself.
|
||||||
_SC_BARRIERS,
|
*/
|
||||||
_SC_CLOCK_SELECTION,
|
#define _SC_ARG_MAX 0
|
||||||
_SC_CPUTIME,
|
#define _SC_CHILD_MAX 1
|
||||||
_SC_FSYNC,
|
#define _SC_CLK_TCK 2
|
||||||
_SC_IPV6,
|
#define _SC_NGROUPS_MAX 3
|
||||||
_SC_JOB_CONTROL,
|
#define _SC_OPEN_MAX 4
|
||||||
_SC_MAPPED_FILES,
|
#define _SC_JOB_CONTROL 5
|
||||||
_SC_MEMLOCK,
|
#define _SC_SAVED_IDS 6
|
||||||
_SC_MEMLOCK_RANGE,
|
#define _SC_VERSION 7
|
||||||
_SC_MEMORY_PROTECTION,
|
#define _SC_PAGESIZE 8
|
||||||
_SC_MESSAGE_PASSING,
|
#define _SC_PAGE_SIZE _SC_PAGESIZE
|
||||||
_SC_MONOTONIC_CLOCK,
|
/* These are non-POSIX values we accidentally introduced in 2000 without
|
||||||
_SC_PRIORITIZED_IO,
|
* guarding them. Keeping them unguarded for backward compatibility.
|
||||||
_SC_PRIORITY_SCHEDULING,
|
*/
|
||||||
_SC_RAW_SOCKETS,
|
#define _SC_NPROCESSORS_CONF 9
|
||||||
_SC_RE_DUP_MAX,
|
#define _SC_NPROCESSORS_ONLN 10
|
||||||
_SC_READER_WRITER_LOCKS,
|
#define _SC_PHYS_PAGES 11
|
||||||
_SC_REALTIME_SIGNALS,
|
#define _SC_AVPHYS_PAGES 12
|
||||||
_SC_REGEXP,
|
/* End of non-POSIX values. */
|
||||||
_SC_SAVED_IDS,
|
#define _SC_MQ_OPEN_MAX 13
|
||||||
_SC_SEMAPHORES,
|
#define _SC_MQ_PRIO_MAX 14
|
||||||
_SC_SHARED_MEMORY_OBJECTS,
|
#define _SC_RTSIG_MAX 15
|
||||||
_SC_SHELL,
|
#define _SC_SEM_NSEMS_MAX 16
|
||||||
_SC_SPAWN,
|
#define _SC_SEM_VALUE_MAX 17
|
||||||
_SC_SPIN_LOCKS,
|
#define _SC_SIGQUEUE_MAX 18
|
||||||
_SC_SPORADIC_SERVER,
|
#define _SC_TIMER_MAX 19
|
||||||
_SC_SS_REPL_MAX,
|
#define _SC_TZNAME_MAX 20
|
||||||
_SC_SYNCHRONIZED_IO,
|
#define _SC_ASYNCHRONOUS_IO 21
|
||||||
_SC_THREAD_ATTR_STACKADDR,
|
#define _SC_FSYNC 22
|
||||||
_SC_THREAD_ATTR_STACKSIZE,
|
#define _SC_MAPPED_FILES 23
|
||||||
_SC_THREAD_CPUTIME,
|
#define _SC_MEMLOCK 24
|
||||||
_SC_THREAD_PRIO_INHERIT,
|
#define _SC_MEMLOCK_RANGE 25
|
||||||
_SC_THREAD_PRIO_PROTECT,
|
#define _SC_MEMORY_PROTECTION 26
|
||||||
_SC_THREAD_PRIORITY_SCHEDULING,
|
#define _SC_MESSAGE_PASSING 27
|
||||||
_SC_THREAD_PROCESS_SHARED,
|
#define _SC_PRIORITIZED_IO 28
|
||||||
_SC_THREAD_ROBUST_PRIO_INHERIT,
|
#define _SC_REALTIME_SIGNALS 29
|
||||||
_SC_THREAD_ROBUST_PRIO_PROTECT,
|
#define _SC_SEMAPHORES 30
|
||||||
_SC_THREAD_SAFE_FUNCTIONS,
|
#define _SC_SHARED_MEMORY_OBJECTS 31
|
||||||
_SC_THREAD_SPORADIC_SERVER,
|
#define _SC_SYNCHRONIZED_IO 32
|
||||||
_SC_THREADS,
|
#define _SC_TIMERS 33
|
||||||
_SC_TIMEOUTS,
|
#define _SC_AIO_LISTIO_MAX 34
|
||||||
_SC_TIMERS,
|
#define _SC_AIO_MAX 35
|
||||||
_SC_TRACE,
|
#define _SC_AIO_PRIO_DELTA_MAX 36
|
||||||
_SC_TRACE_EVENT_FILTER,
|
#define _SC_DELAYTIMER_MAX 37
|
||||||
_SC_TRACE_EVENT_NAME_MAX,
|
#define _SC_THREAD_KEYS_MAX 38
|
||||||
_SC_TRACE_INHERIT,
|
#define _SC_THREAD_STACK_MIN 39
|
||||||
_SC_TRACE_LOG,
|
#define _SC_THREAD_THREADS_MAX 40
|
||||||
_SC_TRACE_NAME_MAX,
|
#define _SC_TTY_NAME_MAX 41
|
||||||
_SC_TRACE_SYS_MAX,
|
#define _SC_THREADS 42
|
||||||
_SC_TRACE_USER_EVENT_MAX,
|
#define _SC_THREAD_ATTR_STACKADDR 43
|
||||||
_SC_TYPED_MEMORY_OBJECTS,
|
#define _SC_THREAD_ATTR_STACKSIZE 44
|
||||||
_SC_VERSION,
|
#define _SC_THREAD_PRIORITY_SCHEDULING 45
|
||||||
_SC_V7_ILP32_OFF32,
|
#define _SC_THREAD_PRIO_INHERIT 46
|
||||||
_SC_V7_ILP32_OFFBIG,
|
/* _SC_THREAD_PRIO_PROTECT was _SC_THREAD_PRIO_CEILING in early drafts */
|
||||||
_SC_V7_LP64_OFF64,
|
#define _SC_THREAD_PRIO_PROTECT 47
|
||||||
_SC_V7_LPBIG_OFFBIG,
|
#define _SC_THREAD_PRIO_CEILING _SC_THREAD_PRIO_PROTECT
|
||||||
_SC_V6_ILP32_OFF32,
|
#define _SC_THREAD_PROCESS_SHARED 48
|
||||||
_SC_V6_ILP32_OFFBIG,
|
#define _SC_THREAD_SAFE_FUNCTIONS 49
|
||||||
_SC_V6_LP64_OFF64,
|
#define _SC_GETGR_R_SIZE_MAX 50
|
||||||
_SC_V6_LPBIG_OFFBIG,
|
#define _SC_GETPW_R_SIZE_MAX 51
|
||||||
_SC_BC_BASE_MAX,
|
#define _SC_LOGIN_NAME_MAX 52
|
||||||
_SC_BC_DIM_MAX,
|
#define _SC_THREAD_DESTRUCTOR_ITERATIONS 53
|
||||||
_SC_BC_SCALE_MAX,
|
#define _SC_ADVISORY_INFO 54
|
||||||
_SC_BC_STRING_MAX,
|
#define _SC_ATEXIT_MAX 55
|
||||||
_SC_2_C_BIND,
|
#define _SC_BARRIERS 56
|
||||||
_SC_2_C_DEV,
|
#define _SC_BC_BASE_MAX 57
|
||||||
_SC_2_CHAR_TERM,
|
#define _SC_BC_DIM_MAX 58
|
||||||
_SC_COLL_WEIGHTS_MAX,
|
#define _SC_BC_SCALE_MAX 59
|
||||||
_SC_DELAYTIMER_MAX,
|
#define _SC_BC_STRING_MAX 60
|
||||||
_SC_EXPR_NEST_MAX,
|
#define _SC_CLOCK_SELECTION 61
|
||||||
_SC_2_FORT_DEV,
|
#define _SC_COLL_WEIGHTS_MAX 62
|
||||||
_SC_2_FORT_RUN,
|
#define _SC_CPUTIME 63
|
||||||
_SC_LINE_MAX,
|
#define _SC_EXPR_NEST_MAX 64
|
||||||
_SC_2_LOCALEDEF,
|
#define _SC_HOST_NAME_MAX 65
|
||||||
_SC_2_PBS,
|
#define _SC_IOV_MAX 66
|
||||||
_SC_2_PBS_ACCOUNTING,
|
#define _SC_IPV6 67
|
||||||
_SC_2_PBS_CHECKPOINT,
|
#define _SC_LINE_MAX 68
|
||||||
_SC_2_PBS_LOCATE,
|
#define _SC_MONOTONIC_CLOCK 69
|
||||||
_SC_2_PBS_MESSAGE,
|
#define _SC_RAW_SOCKETS 70
|
||||||
_SC_2_PBS_TRACK,
|
#define _SC_READER_WRITER_LOCKS 71
|
||||||
_SC_2_SW_DEV,
|
#define _SC_REGEXP 72
|
||||||
_SC_2_UPE,
|
#define _SC_RE_DUP_MAX 73
|
||||||
_SC_2_VERSION,
|
#define _SC_SHELL 74
|
||||||
_SC_XOPEN_CRYPT,
|
#define _SC_SPAWN 75
|
||||||
_SC_XOPEN_ENH_I18N,
|
#define _SC_SPIN_LOCKS 76
|
||||||
_SC_XOPEN_REALTIME,
|
#define _SC_SPORADIC_SERVER 77
|
||||||
_SC_XOPEN_REALTIME_THREADS,
|
#define _SC_SS_REPL_MAX 78
|
||||||
_SC_XOPEN_SHM,
|
#define _SC_SYMLOOP_MAX 79
|
||||||
_SC_XOPEN_STREAMS,
|
#define _SC_THREAD_CPUTIME 80
|
||||||
_SC_XOPEN_UNIX,
|
#define _SC_THREAD_SPORADIC_SERVER 81
|
||||||
_SC_XOPEN_UUCP,
|
#define _SC_TIMEOUTS 82
|
||||||
_SC_XOPEN_VERSION,
|
#define _SC_TRACE 83
|
||||||
_SC_CLK_TCK,
|
#define _SC_TRACE_EVENT_FILTER 84
|
||||||
_SC_GETGR_R_SIZE_MAX,
|
#define _SC_TRACE_EVENT_NAME_MAX 85
|
||||||
_SC_GETPW_R_SIZE_MAX,
|
#define _SC_TRACE_INHERIT 86
|
||||||
_SC_AIO_LISTIO_MAX,
|
#define _SC_TRACE_LOG 87
|
||||||
_SC_AIO_MAX,
|
#define _SC_TRACE_NAME_MAX 88
|
||||||
_SC_AIO_PRIO_DELTA_MAX,
|
#define _SC_TRACE_SYS_MAX 89
|
||||||
_SC_ARG_MAX,
|
#define _SC_TRACE_USER_EVENT_MAX 90
|
||||||
_SC_ATEXIT_MAX,
|
#define _SC_TYPED_MEMORY_OBJECTS 91
|
||||||
_SC_CHILD_MAX,
|
#define _SC_V7_ILP32_OFF32 92
|
||||||
_SC_HOST_NAME_MAX,
|
#define _SC_V6_ILP32_OFF32 _SC_V7_ILP32_OFF32
|
||||||
_SC_IOV_MAX,
|
#define _SC_XBS5_ILP32_OFF32 _SC_V7_ILP32_OFF32
|
||||||
_SC_LOGIN_NAME_MAX,
|
#define _SC_V7_ILP32_OFFBIG 93
|
||||||
_SC_NGROUPS_MAX,
|
#define _SC_V6_ILP32_OFFBIG _SC_V7_ILP32_OFFBIG
|
||||||
_SC_MQ_OPEN_MAX,
|
#define _SC_XBS5_ILP32_OFFBIG _SC_V7_ILP32_OFFBIG
|
||||||
_SC_MQ_PRIO_MAX,
|
#define _SC_V7_LP64_OFF64 94
|
||||||
_SC_OPEN_MAX,
|
#define _SC_V6_LP64_OFF64 _SC_V7_LP64_OFF64
|
||||||
_SC_PAGE_SIZE,
|
#define _SC_XBS5_LP64_OFF64 _SC_V7_LP64_OFF64
|
||||||
_SC_PAGESIZE,
|
#define _SC_V7_LPBIG_OFFBIG 95
|
||||||
_SC_THREAD_DESTRUCTOR_ITERATIONS,
|
#define _SC_V6_LPBIG_OFFBIG _SC_V7_LPBIG_OFFBIG
|
||||||
_SC_THREAD_KEYS_MAX,
|
#define _SC_XBS5_LPBIG_OFFBIG _SC_V7_LPBIG_OFFBIG
|
||||||
_SC_THREAD_STACK_MIN,
|
#define _SC_XOPEN_CRYPT 96
|
||||||
_SC_THREAD_THREADS_MAX,
|
#define _SC_XOPEN_ENH_I18N 97
|
||||||
_SC_RTSIG_MAX,
|
#define _SC_XOPEN_LEGACY 98
|
||||||
_SC_SEM_NSEMS_MAX,
|
#define _SC_XOPEN_REALTIME 99
|
||||||
_SC_SEM_VALUE_MAX,
|
#define _SC_STREAM_MAX 100
|
||||||
_SC_SIGQUEUE_MAX,
|
#define _SC_PRIORITY_SCHEDULING 101
|
||||||
_SC_STREAM_MAX,
|
#define _SC_XOPEN_REALTIME_THREADS 102
|
||||||
_SC_SYMLOOP_MAX,
|
#define _SC_XOPEN_SHM 103
|
||||||
_SC_TIMER_MAX,
|
#define _SC_XOPEN_STREAMS 104
|
||||||
_SC_TTY_NAME_MAX,
|
#define _SC_XOPEN_UNIX 105
|
||||||
_SC_TZNAME_MAX,
|
#define _SC_XOPEN_VERSION 106
|
||||||
};
|
#define _SC_2_CHAR_TERM 107
|
||||||
|
#define _SC_2_C_BIND 108
|
||||||
|
#define _SC_2_C_DEV 109
|
||||||
|
#define _SC_2_FORT_DEV 110
|
||||||
|
#define _SC_2_FORT_RUN 111
|
||||||
|
#define _SC_2_LOCALEDEF 112
|
||||||
|
#define _SC_2_PBS 113
|
||||||
|
#define _SC_2_PBS_ACCOUNTING 114
|
||||||
|
#define _SC_2_PBS_CHECKPOINT 115
|
||||||
|
#define _SC_2_PBS_LOCATE 116
|
||||||
|
#define _SC_2_PBS_MESSAGE 117
|
||||||
|
#define _SC_2_PBS_TRACK 118
|
||||||
|
#define _SC_2_SW_DEV 119
|
||||||
|
#define _SC_2_UPE 120
|
||||||
|
#define _SC_2_VERSION 121
|
||||||
|
#define _SC_THREAD_ROBUST_PRIO_INHERIT 122
|
||||||
|
#define _SC_THREAD_ROBUST_PRIO_PROTECT 123
|
||||||
|
#define _SC_XOPEN_UUCP 124
|
||||||
|
#define _SC_LEVEL1_ICACHE_SIZE 125
|
||||||
|
#define _SC_LEVEL1_ICACHE_ASSOC 126
|
||||||
|
#define _SC_LEVEL1_ICACHE_LINESIZE 127
|
||||||
|
#define _SC_LEVEL1_DCACHE_SIZE 128
|
||||||
|
#define _SC_LEVEL1_DCACHE_ASSOC 129
|
||||||
|
#define _SC_LEVEL1_DCACHE_LINESIZE 130
|
||||||
|
#define _SC_LEVEL2_CACHE_SIZE 131
|
||||||
|
#define _SC_LEVEL2_CACHE_ASSOC 132
|
||||||
|
#define _SC_LEVEL2_CACHE_LINESIZE 133
|
||||||
|
#define _SC_LEVEL3_CACHE_SIZE 134
|
||||||
|
#define _SC_LEVEL3_CACHE_ASSOC 135
|
||||||
|
#define _SC_LEVEL3_CACHE_LINESIZE 136
|
||||||
|
#define _SC_LEVEL4_CACHE_SIZE 137
|
||||||
|
#define _SC_LEVEL4_CACHE_ASSOC 138
|
||||||
|
#define _SC_LEVEL4_CACHE_LINESIZE 139
|
||||||
|
#define _SC_POSIX_26_VERSION 140
|
||||||
|
|
||||||
#define __z_posix_sysconf_SC_ADVISORY_INFO (-1L)
|
#define __z_posix_sysconf_SC_ADVISORY_INFO (-1L)
|
||||||
#define __z_posix_sysconf_SC_ASYNCHRONOUS_IO \
|
#define __z_posix_sysconf_SC_ASYNCHRONOUS_IO \
|
||||||
|
@ -295,10 +328,6 @@ enum {
|
||||||
#define __z_posix_sysconf_SC_TTY_NAME_MAX TTY_NAME_MAX
|
#define __z_posix_sysconf_SC_TTY_NAME_MAX TTY_NAME_MAX
|
||||||
#define __z_posix_sysconf_SC_TZNAME_MAX TZNAME_MAX
|
#define __z_posix_sysconf_SC_TZNAME_MAX TZNAME_MAX
|
||||||
|
|
||||||
#ifdef CONFIG_POSIX_SYSCONF_IMPL_MACRO
|
|
||||||
#define sysconf(x) (long)CONCAT(__z_posix_sysconf, x)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -64,7 +64,8 @@ size_t confstr(int name, char *buf, size_t len);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_POSIX_SYSCONF_IMPL_MACRO
|
#ifdef CONFIG_POSIX_SYSCONF_IMPL_MACRO
|
||||||
#define sysconf(x) (long)CONCAT(__z_posix_sysconf, x)
|
/* Can't use CONCAT(), must concat directly to prevent expansion of 'x' */
|
||||||
|
#define sysconf(x) (long)__z_posix_sysconf##x
|
||||||
#else
|
#else
|
||||||
long sysconf(int opt);
|
long sysconf(int opt);
|
||||||
#endif /* CONFIG_POSIX_SYSCONF_IMPL_FULL */
|
#endif /* CONFIG_POSIX_SYSCONF_IMPL_FULL */
|
||||||
|
|
|
@ -6,13 +6,12 @@
|
||||||
|
|
||||||
#undef _POSIX_C_SOURCE
|
#undef _POSIX_C_SOURCE
|
||||||
#define _POSIX_C_SOURCE 200809L
|
#define _POSIX_C_SOURCE 200809L
|
||||||
#include <zephyr/posix/pthread.h>
|
|
||||||
#include <zephyr/posix/sys/sysconf.h>
|
#include <zephyr/posix/sys/sysconf.h>
|
||||||
#include <zephyr/posix/unistd.h>
|
#include <zephyr/posix/unistd.h>
|
||||||
|
|
||||||
#ifdef CONFIG_POSIX_SYSCONF_IMPL_FULL
|
#ifdef CONFIG_POSIX_SYSCONF_IMPL_FULL
|
||||||
|
/* Can't use CONCAT(), must concat directly to prevent expansion of 'x' */
|
||||||
#define z_sysconf(x) (long)CONCAT(__z_posix_sysconf, x)
|
#define z_sysconf(x) (long)__z_posix_sysconf##x
|
||||||
|
|
||||||
long sysconf(int x)
|
long sysconf(int x)
|
||||||
{
|
{
|
||||||
|
@ -125,21 +124,17 @@ long sysconf(int x)
|
||||||
return z_sysconf(_SC_TYPED_MEMORY_OBJECTS);
|
return z_sysconf(_SC_TYPED_MEMORY_OBJECTS);
|
||||||
case _SC_VERSION:
|
case _SC_VERSION:
|
||||||
return z_sysconf(_SC_VERSION);
|
return z_sysconf(_SC_VERSION);
|
||||||
case _SC_V6_ILP32_OFF32:
|
|
||||||
return z_sysconf(_SC_V6_ILP32_OFF32);
|
|
||||||
case _SC_V6_ILP32_OFFBIG:
|
|
||||||
return z_sysconf(_SC_V6_ILP32_OFFBIG);
|
|
||||||
case _SC_V6_LP64_OFF64:
|
|
||||||
return z_sysconf(_SC_V6_LP64_OFF64);
|
|
||||||
case _SC_V6_LPBIG_OFFBIG:
|
|
||||||
return z_sysconf(_SC_V6_LPBIG_OFFBIG);
|
|
||||||
case _SC_V7_ILP32_OFF32:
|
case _SC_V7_ILP32_OFF32:
|
||||||
|
/* case _SC_V6_ILP32_OFF32 */
|
||||||
return z_sysconf(_SC_V7_ILP32_OFF32);
|
return z_sysconf(_SC_V7_ILP32_OFF32);
|
||||||
case _SC_V7_ILP32_OFFBIG:
|
case _SC_V7_ILP32_OFFBIG:
|
||||||
|
/* case _SC_V6_ILP32_OFFBIG */
|
||||||
return z_sysconf(_SC_V7_ILP32_OFFBIG);
|
return z_sysconf(_SC_V7_ILP32_OFFBIG);
|
||||||
case _SC_V7_LP64_OFF64:
|
case _SC_V7_LP64_OFF64:
|
||||||
|
/* case _SC_V6_LP64_OFF64 */
|
||||||
return z_sysconf(_SC_V7_LP64_OFF64);
|
return z_sysconf(_SC_V7_LP64_OFF64);
|
||||||
case _SC_V7_LPBIG_OFFBIG:
|
case _SC_V7_LPBIG_OFFBIG:
|
||||||
|
/* case _SC_V6_LPBIG_OFFBIG */
|
||||||
return z_sysconf(_SC_V7_LPBIG_OFFBIG);
|
return z_sysconf(_SC_V7_LPBIG_OFFBIG);
|
||||||
case _SC_BC_BASE_MAX:
|
case _SC_BC_BASE_MAX:
|
||||||
return z_sysconf(_SC_BC_BASE_MAX);
|
return z_sysconf(_SC_BC_BASE_MAX);
|
||||||
|
@ -237,10 +232,9 @@ long sysconf(int x)
|
||||||
return z_sysconf(_SC_MQ_PRIO_MAX);
|
return z_sysconf(_SC_MQ_PRIO_MAX);
|
||||||
case _SC_OPEN_MAX:
|
case _SC_OPEN_MAX:
|
||||||
return z_sysconf(_SC_OPEN_MAX);
|
return z_sysconf(_SC_OPEN_MAX);
|
||||||
case _SC_PAGE_SIZE:
|
|
||||||
return z_sysconf(_SC_PAGE_SIZE);
|
|
||||||
case _SC_PAGESIZE:
|
case _SC_PAGESIZE:
|
||||||
return z_sysconf(_SC_PAGESIZE);
|
/* case _SC_PAGE_SIZE */
|
||||||
|
return z_sysconf(_SC_PAGE_SIZE);
|
||||||
case _SC_THREAD_DESTRUCTOR_ITERATIONS:
|
case _SC_THREAD_DESTRUCTOR_ITERATIONS:
|
||||||
return z_sysconf(_SC_THREAD_DESTRUCTOR_ITERATIONS);
|
return z_sysconf(_SC_THREAD_DESTRUCTOR_ITERATIONS);
|
||||||
case _SC_THREAD_KEYS_MAX:
|
case _SC_THREAD_KEYS_MAX:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue