Skip to content

Commit 3cc2e14

Browse files
awojasinskipdgendt
authored andcommitted
posix: Add basic sysconf() function implementation
The patch introduces basic implementation of sysconf() function. It's based on macro - that means that every function call is resolved at compile time - and is not fully complient with POSIX standard (the errno value is not handled and passing invalid name argument results in compilation error). Treat this commit as a starting point for proper sysconf() implementation. The one introduced in the patch could stay as a defult implementation. sysconf() documentation: https://pubs.opengroup.org/onlinepubs/9699919799/functions/sysconf.html https://man7.org/linux/man-pages/man3/sysconf.3.html Fixes zephyrproject-rtos#56670 Signed-off-by: Adam Wojasinski <[email protected]>
1 parent 56e8801 commit 3cc2e14

File tree

2 files changed

+349
-0
lines changed

2 files changed

+349
-0
lines changed

include/zephyr/posix/unistd.h

+332
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,217 @@
1111
#ifdef CONFIG_NETWORKING
1212
/* For zsock_gethostname() */
1313
#include <zephyr/net/socket.h>
14+
#include <zephyr/net/hostname.h>
1415
#endif
1516

1617
#ifdef CONFIG_POSIX_API
1718
#include <zephyr/fs/fs.h>
1819
#endif
1920

21+
#ifdef CONFIG_POSIX_SYSCONF
22+
#include <zephyr/posix/signal.h>
23+
#endif
24+
2025
#ifdef __cplusplus
2126
extern "C" {
2227
#endif
2328

29+
/* Version test macros */
30+
#define _POSIX_VERSION 200809L
31+
#define _POSIX2_VERSION (-1L)
32+
#define _XOPEN_VERSION (-1L)
33+
34+
/* Internal helper macro to set constant if required Kconfig symbol is enabled */
35+
#define Z_SC_VAL_IFDEF(_def, _val) COND_CODE_1(_def, (_val), (-1L))
36+
37+
/* Constants for Opitions and Option Groups */
38+
#define _POSIX_ADVISORY_INFO (-1L)
39+
#define _POSIX_ASYNCHRONOUS_IO (-1L)
40+
#define _POSIX_BARRIERS Z_SC_VAL_IFDEF(CONFIG_PTHREAD_IPC, _POSIX_VERSION)
41+
#define _POSIX_CHOWN_RESTRICTED (-1L)
42+
#define _POSIX_CLOCK_SELECTION Z_SC_VAL_IFDEF(CONFIG_POSIX_CLOCK, _POSIX_VERSION)
43+
#define _POSIX_CPUTIME (-1L)
44+
#define _POSIX_FSYNC (-1L)
45+
#define _POSIX_IPV6 Z_SC_VAL_IFDEF(CONFIG_NET_IPV6, _POSIX_VERSION)
46+
#define _POSIX_JOB_CONTROL (-1L)
47+
#define _POSIX_MAPPED_FILES _POSIX_VERSION
48+
#define _POSIX_MEMLOCK (-1L)
49+
#define _POSIX_MEMLOCK_RANGE (-1L)
50+
#define _POSIX_MEMORY_PROTECTION (-1L)
51+
#define _POSIX_MESSAGE_PASSING Z_SC_VAL_IFDEF(CONFIG_POSIX_MQUEUE, _POSIX_VERSION)
52+
#define _POSIX_MONOTONIC_CLOCK Z_SC_VAL_IFDEF(CONFIG_POSIX_CLOCK, _POSIX_VERSION)
53+
#define _POSIX_NO_TRUNC (-1L)
54+
#define _POSIX_PRIORITIZED_IO (-1L)
55+
#define _POSIX_PRIORITY_SCHEDULING (-1L)
56+
#define _POSIX_RAW_SOCKETS Z_SC_VAL_IFDEF(CONFIG_NET_SOCKETS_PACKET, _POSIX_VERSION)
57+
#define _POSIX_READER_WRITER_LOCKS Z_SC_VAL_IFDEF(CONFIG_PTHREAD_IPC, _POSIX_VERSION)
58+
#define _POSIX_REALTIME_SIGNALS (-1L)
59+
#define _POSIX_REGEXP (-1L)
60+
#define _POSIX_SAVED_IDS (-1L)
61+
#define _POSIX_SEMAPHORES Z_SC_VAL_IFDEF(CONFIG_PTHREAD_IPC, _POSIX_VERSION)
62+
#define _POSIX_SHARED_MEMORY_OBJECTS (-1L)
63+
#define _POSIX_SHELL (-1L)
64+
#define _POSIX_SPAWN (-1L)
65+
#define _POSIX_SPIN_LOCKS Z_SC_VAL_IFDEF(CONFIG_PTHREAD_SPINLOCK, _POSIX_VERSION)
66+
#define _POSIX_SPORADIC_SERVER (-1L)
67+
#define _POSIX_SYNCHRONIZED_IO (-1L)
68+
#define _POSIX_THREAD_ATTR_STACKADDR Z_SC_VAL_IFDEF(CONFIG_PTHREAD_IPC, _POSIX_VERSION)
69+
#define _POSIX_THREAD_ATTR_STACKSIZE Z_SC_VAL_IFDEF(CONFIG_PTHREAD_IPC, _POSIX_VERSION)
70+
#define _POSIX_THREAD_CPUTIME (-1L)
71+
#define _POSIX_THREAD_PRIO_INHERIT _POSIX_VERSION
72+
#define _POSIX_THREAD_PRIO_PROTECT (-1L)
73+
#define _POSIX_THREAD_PRIORITY_SCHEDULING Z_SC_VAL_IFDEF(CONFIG_PTHREAD_IPC, _POSIX_VERSION)
74+
#define _POSIX_THREAD_PROCESS_SHARED (-1L)
75+
#define _POSIX_THREAD_ROBUST_PRIO_INHERIT (-1L)
76+
#define _POSIX_THREAD_ROBUST_PRIO_PROTECT (-1L)
77+
#define _POSIX_THREAD_SAFE_FUNCTIONS Z_SC_VAL_IFDEF(CONFIG_PTHREAD_IPC, _POSIX_VERSION)
78+
#define _POSIX_THREAD_SPORADIC_SERVER (-1L)
79+
80+
#ifndef _POSIX_THREADS
81+
#define _POSIX_THREADS Z_SC_VAL_IFDEF(CONFIG_PTHREAD_IPC, _POSIX_VERSION)
82+
#endif
83+
84+
#define _POSIX_TIMEOUTS Z_SC_VAL_IFDEF(CONFIG_POSIX_CLOCK, _POSIX_VERSION)
85+
#define _POSIX_TIMERS Z_SC_VAL_IFDEF(CONFIG_POSIX_CLOCK, _POSIX_VERSION)
86+
#define _POSIX_TRACE (-1L)
87+
#define _POSIX_TRACE_EVENT_FILTER (-1L)
88+
#define _POSIX_TRACE_INHERIT (-1L)
89+
#define _POSIX_TRACE_LOG (-1L)
90+
#define _POSIX_TYPED_MEMORY_OBJECTS (-1L)
91+
#define _POSIX_V6_ILP32_OFF32 (-1L)
92+
#define _POSIX_V6_ILP32_OFFBIG (-1L)
93+
#define _POSIX_V6_LP64_OFF64 (-1L)
94+
#define _POSIX_V6_LPBIG_OFFBIG (-1L)
95+
#define _POSIX_V7_ILP32_OFF32 (-1L)
96+
#define _POSIX_V7_ILP32_OFFBIG (-1L)
97+
#define _POSIX_V7_LP64_OFF64 (-1L)
98+
#define _POSIX_V7_LPBIG_OFFBIG (-1L)
99+
#define _POSIX2_C_BIND _POSIX_VERSION
100+
#define _POSIX2_C_DEV (-1L)
101+
#define _POSIX2_CHAR_TERM (-1L)
102+
#define _POSIX2_FORT_DEV (-1L)
103+
#define _POSIX2_FORT_RUN (-1L)
104+
#define _POSIX2_LOCALEDEF (-1L)
105+
#define _POSIX2_PBS (-1L)
106+
#define _POSIX2_PBS_ACCOUNTING (-1L)
107+
#define _POSIX2_PBS_CHECKPOINT (-1L)
108+
#define _POSIX2_PBS_LOCATE (-1L)
109+
#define _POSIX2_PBS_MESSAGE (-1L)
110+
#define _POSIX2_PBS_TRACK (-1L)
111+
#define _POSIX2_SW_DEV (-1L)
112+
#define _POSIX2_UPE (-1L)
113+
#define _XOPEN_CRYPT (-1L)
114+
#define _XOPEN_ENH_I18N (-1L)
115+
#define _XOPEN_REALTIME (-1L)
116+
#define _XOPEN_REALTIME_THREADS (-1L)
117+
#define _XOPEN_SHM (-1L)
118+
#define _XOPEN_STREAMS (-1L)
119+
#define _XOPEN_UNIX (-1L)
120+
#define _XOPEN_UUCP (-1L)
121+
122+
/* Maximum values */
123+
#define _POSIX_CLOCKRES_MIN (20000000L)
124+
125+
/* Minimum values */
126+
#define _POSIX_AIO_LISTIO_MAX (2)
127+
#define _POSIX_AIO_MAX (1)
128+
#define _POSIX_ARG_MAX (4096)
129+
#define _POSIX_CHILD_MAX (25)
130+
#define _POSIX_DELAYTIMER_MAX (32)
131+
#define _POSIX_HOST_NAME_MAX (255)
132+
#define _POSIX_LINK_MAX (8)
133+
#define _POSIX_LOGIN_NAME_MAX (9)
134+
#define _POSIX_MAX_CANON (255)
135+
#define _POSIX_MAX_INPUT (255)
136+
#define _POSIX_MQ_OPEN_MAX CONFIG_MSG_COUNT_MAX
137+
#define _POSIX_MQ_PRIO_MAX (32)
138+
#define _POSIX_NAME_MAX (14)
139+
#define _POSIX_NGROUPS_MAX (8)
140+
#define _POSIX_OPEN_MAX CONFIG_POSIX_MAX_FDS
141+
#define _POSIX_PATH_MAX (256)
142+
#define _POSIX_PIPE_BUF (512)
143+
#define _POSIX_RE_DUP_MAX (255)
144+
#define _POSIX_RTSIG_MAX CONFIG_POSIX_RTSIG_MAX
145+
#define _POSIX_SEM_NSEMS_MAX CONFIG_SEM_NAMELEN_MAX
146+
#define _POSIX_SEM_VALUE_MAX CONFIG_SEM_VALUE_MAX
147+
#define _POSIX_SIGQUEUE_MAX (32)
148+
#define _POSIX_SSIZE_MAX (32767)
149+
#define _POSIX_SS_REPL_MAX (4)
150+
#define _POSIX_STREAM_MAX (8)
151+
#define _POSIX_SYMLINK_MAX (255)
152+
#define _POSIX_SYMLOOP_MAX (8)
153+
#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS (4)
154+
#define _POSIX_THREAD_KEYS_MAX (128)
155+
#define _POSIX_THREAD_THREADS_MAX (64)
156+
#define _POSIX_TIMER_MAX (32)
157+
#define _POSIX_TRACE_EVENT_NAME_MAX (30)
158+
#define _POSIX_TRACE_NAME_MAX (8)
159+
#define _POSIX_TRACE_SYS_MAX (8)
160+
#define _POSIX_TRACE_USER_EVENT_MAX (32)
161+
#define _POSIX_TTY_NAME_MAX (9)
162+
#define _POSIX_TZNAME_MAX (6)
163+
#define _POSIX2_BC_BASE_MAX (99)
164+
#define _POSIX2_BC_DIM_MAX (2048)
165+
#define _POSIX2_BC_SCALE_MAX (99)
166+
#define _POSIX2_BC_STRING_MAX (1000)
167+
#define _POSIX2_CHARCLASS_NAME_MAX (14)
168+
#define _POSIX2_COLL_WEIGHTS_MAX (2)
169+
#define _POSIX2_EXPR_NEST_MAX (32)
170+
#define _POSIX2_LINE_MAX (2048)
171+
#define _XOPEN_IOV_MAX (16)
172+
#define _XOPEN_NAME_MAX (255)
173+
#define _XOPEN_PATH_MAX (1024)
174+
175+
/* Other invariant values */
176+
#define NL_LANGMAX (14)
177+
#define NL_MSGMAX (32767)
178+
#define NL_SETMAX (255)
179+
#define NL_TEXTMAX (_POSIX2_LINE_MAX)
180+
#define NZERO (20)
181+
182+
/* Runtime invariant values */
183+
#define AIO_LISTIO_MAX _POSIX_AIO_LISTIO_MAX
184+
#define AIO_MAX _POSIX_AIO_MAX
185+
#define AIO_PRIO_DELTA_MAX (0)
186+
#define DELAYTIMER_MAX _POSIX_DELAYTIMER_MAX
187+
#define HOST_NAME_MAX COND_CODE_1(CONFIG_NETWORKING, \
188+
(NET_HOSTNAME_MAX_LEN), \
189+
(_POSIX_HOST_NAME_MAX))
190+
#define LOGIN_NAME_MAX _POSIX_LOGIN_NAME_MAX
191+
#define MQ_OPEN_MAX _POSIX_MQ_OPEN_MAX
192+
#define MQ_PRIO_MAX _POSIX_MQ_PRIO_MAX
193+
194+
#ifndef PAGE_SIZE
195+
#define PAGE_SIZE BIT(CONFIG_POSIX_PAGE_SIZE_BITS)
196+
#endif
197+
198+
#ifndef PAGESIZE
199+
#define PAGESIZE PAGE_SIZE
200+
#endif
201+
202+
#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS
203+
#define PTHREAD_KEYS_MAX COND_CODE_1(CONFIG_PTHREAD_IPC, \
204+
(CONFIG_MAX_PTHREAD_KEY_COUNT), \
205+
(_POSIX_THREAD_KEYS_MAX))
206+
#define PTHREAD_THREADS_MAX COND_CODE_1(CONFIG_PTHREAD_IPC, CONFIG_MAX_PTHREAD_COUNT, 0)
207+
#define SEM_NSEMS_MAX _POSIX_SEM_NSEMS_MAX
208+
#define SEM_VALUE_MAX CONFIG_SEM_VALUE_MAX
209+
#define SIGQUEUE_MAX _POSIX_SIGQUEUE_MAX
210+
#define STREAM_MAX _POSIX_STREAM_MAX
211+
#define SYMLOOP_MAX _POSIX_SYMLOOP_MAX
212+
#define TIMER_MAX CONFIG_MAX_TIMER_COUNT
213+
#define TTY_NAME_MAX _POSIX_TTY_NAME_MAX
214+
#define TZNAME_MAX _POSIX_TZNAME_MAX
215+
216+
/* Pathname variable values */
217+
#define FILESIZEBITS (32)
218+
#define POSIX_ALLOC_SIZE_MIN (256)
219+
#define POSIX_REC_INCR_XFER_SIZE (1024)
220+
#define POSIX_REC_MAX_XFER_SIZE (32767)
221+
#define POSIX_REC_MIN_XFER_SIZE (1)
222+
#define POSIX_REC_XFER_ALIGN (4)
223+
#define SYMLINK_MAX _POSIX_SYMLINK_MAX
224+
24225
#ifdef CONFIG_POSIX_API
25226
/* File related operations */
26227
int close(int file);
@@ -55,6 +256,137 @@ pid_t getpid(void);
55256
unsigned sleep(unsigned int seconds);
56257
int usleep(useconds_t useconds);
57258

259+
#ifdef CONFIG_POSIX_SYSCONF
260+
#define __z_posix_sysconf_SC_ADVISORY_INFO _POSIX_ADVISORY_INFO
261+
#define __z_posix_sysconf_SC_ASYNCHRONOUS_IO _POSIX_ASYNCHRONOUS_IO
262+
#define __z_posix_sysconf_SC_BARRIERS _POSIX_BARRIERS
263+
#define __z_posix_sysconf_SC_CLOCK_SELECTION _POSIX_CLOCK_SELECTION
264+
#define __z_posix_sysconf_SC_CPUTIME _POSIX_CPUTIME
265+
#define __z_posix_sysconf_SC_FSYNC _POSIX_FSYNC
266+
#define __z_posix_sysconf_SC_IPV6 _POSIX_IPV6
267+
#define __z_posix_sysconf_SC_JOB_CONTROL _POSIX_JOB_CONTROL
268+
#define __z_posix_sysconf_SC_MAPPED_FILE _POSIX_MAPPED_FILES
269+
#define __z_posix_sysconf_SC_MEMLOCK _POSIX_MEMLOCK
270+
#define __z_posix_sysconf_SC_MEMLOCK_RANGE _POSIX_MEMLOCK_RANGE
271+
#define __z_posix_sysconf_SC_MEMORY_PROTECTION _POSIX_MEMORY_PROTECTION
272+
#define __z_posix_sysconf_SC_MESSAGE_PASSING _POSIX_MESSAGE_PASSING
273+
#define __z_posix_sysconf_SC_MONOTONIC_CLOCK _POSIX_MONOTONIC_CLOCK
274+
#define __z_posix_sysconf_SC_PRIORITIZED_IO _POSIX_PRIORITIZED_IO
275+
#define __z_posix_sysconf_SC_PRIORITY_SCHEDULING _POSIX_PRIORITY_SCHEDULING
276+
#define __z_posix_sysconf_SC_RAW_SOCKETS _POSIX_RAW_SOCKETS
277+
#define __z_posix_sysconf_SC_RE_DUP_MAX _POSIX_RE_DUP_MAX
278+
#define __z_posix_sysconf_SC_READER_WRITER_LOCKS _POSIX_READER_WRITER_LOCKS
279+
#define __z_posix_sysconf_SC_REALTIME_SIGNALS _POSIX_REALTIME_SIGNALS
280+
#define __z_posix_sysconf_SC_REGEXP _POSIX_REGEXP
281+
#define __z_posix_sysconf_SC_SAVED_IDS _POSIX_SAVED_IDS
282+
#define __z_posix_sysconf_SC_SEMAPHORES _POSIX_SEMAPHORES
283+
#define __z_posix_sysconf_SC_SHARED_MEMORY_OBJECTS _POSIX_SHARED_MEMORY_OBJECTS
284+
#define __z_posix_sysconf_SC_SHELL _POSIX_SHELL
285+
#define __z_posix_sysconf_SC_SPAWN _POSIX_SPAWN
286+
#define __z_posix_sysconf_SC_SPIN_LOCKS _POSIX_SPIN_LOCKS
287+
#define __z_posix_sysconf_SC_SPORADIC_SERVER _POSIX_SPORADIC_SERVER
288+
#define __z_posix_sysconf_SC_SS_REPL_MAX _POSIX_SS_REPL_MAX
289+
#define __z_posix_sysconf_SC_SYNCHRONIZED_IO _POSIX_SYNCHRONIZED_IO
290+
#define __z_posix_sysconf_SC_THREAD_ATTR_STACKADDR _POSIX_THREAD_ATTR_STACKADDR
291+
#define __z_posix_sysconf_SC_THREAD_ATTR_STACKSIZE _POSIX_THREAD_ATTR_STACKSIZE
292+
#define __z_posix_sysconf_SC_THREAD_CPUTIME _POSIX_THREAD_CPUTIME
293+
#define __z_posix_sysconf_SC_THREAD_PRIO_INHERIT _POSIX_THREAD_PRIO_INHERIT
294+
#define __z_posix_sysconf_SC_THREAD_PRIO_PROTECT _POSIX_THREAD_PRIO_PROTECT
295+
#define __z_posix_sysconf_SC_THREAD_PRIORITY_SCHEDULING _POSIX_THREAD_PRIORITY_SCHEDULING
296+
#define __z_posix_sysconf_SC_THREAD_PROCESS_SHARED _POSIX_THREAD_PROCESS_SHARED
297+
#define __z_posix_sysconf_SC_THREAD_ROBUST_PRIO_INHERIT _POSIX_THREAD_ROBUST_PRIO_INHERIT
298+
#define __z_posix_sysconf_SC_THREAD_ROBUST_PRIO_PROTECT _POSIX_THREAD_ROBUST_PRIO_PROTECT
299+
#define __z_posix_sysconf_SC_THREAD_SAFE_FUNCTIONS _POSIX_THREAD_SAFE_FUNCTIONS
300+
#define __z_posix_sysconf_SC_THREAD_SPORADIC_SERVER _POSIX_THREAD_SPORADIC_SERVER
301+
#define __z_posix_sysconf_SC_THREADS _POSIX_THREADS
302+
#define __z_posix_sysconf_SC_TIMEOUTS _POSIX_TIMEOUTS
303+
#define __z_posix_sysconf_SC_TIMERS _POSIX_TIMERS
304+
#define __z_posix_sysconf_SC_TRACE _POSIX_TRACE
305+
#define __z_posix_sysconf_SC_TRACE_EVENT_FILTER _POSIX_TRACE_EVENT_FILTER
306+
#define __z_posix_sysconf_SC_TRACE_EVENT_NAME_MAX _POSIX_TRACE_EVENT_NAME_MAX
307+
#define __z_posix_sysconf_SC_TRACE_INHERIT _POSIX_TRACE_INHERIT
308+
#define __z_posix_sysconf_SC_TRACE_LOG _POSIX_TRACE_LOG
309+
#define __z_posix_sysconf_SC_TRACE_NAME_MAX _POSIX_TRACE_NAME_MAX
310+
#define __z_posix_sysconf_SC_TRACE_SYS_MAX _POSIX_TRACE_SYS_MAX
311+
#define __z_posix_sysconf_SC_TRACE_USER_EVENT_MAX _POSIX_TRACE_USER_EVENT_MAX
312+
#define __z_posix_sysconf_SC_TYPED_MEMORY_OBJECTS _POSIX_TYPED_MEMORY_OBJECTS
313+
#define __z_posix_sysconf_SC_VERSION _POSIX_VERSION
314+
#define __z_posix_sysconf_SC_V7_ILP32_OFF32 _POSIX_V7_ILP32_OFF32
315+
#define __z_posix_sysconf_SC_V7_ILP32_OFFBIG _POSIX_V7_ILP32_OFFBIG
316+
#define __z_posix_sysconf_SC_V7_LP64_OFF64 _POSIX_V7_LP64_OFF64
317+
#define __z_posix_sysconf_SC_V7_LPBIG_OFFBIG _POSIX_V7_LPBIG_OFFBIG
318+
#define __z_posix_sysconf_SC_V6_ILP32_OFF32 _POSIX_V6_ILP32_OFF32
319+
#define __z_posix_sysconf_SC_V6_ILP32_OFFBIG _POSIX_V6_ILP32_OFFBIG
320+
#define __z_posix_sysconf_SC_V6_LP64_OFF64 _POSIX_V6_LP64_OFF64
321+
#define __z_posix_sysconf_SC_V6_LPBIG_OFFBIG _POSIX_V6_LPBIG_OFFBIG
322+
#define __z_posix_sysconf_SC_BC_BASE_MAX _POSIX2_BC_BASE_MAX
323+
#define __z_posix_sysconf_SC_BC_DIM_MAX _POSIX2_BC_DIM_MAX
324+
#define __z_posix_sysconf_SC_BC_SCALE_MAX _POSIX2_BC_SCALE_MAX
325+
#define __z_posix_sysconf_SC_BC_STRING_MAX _POSIX2_BC_STRING_MAX
326+
#define __z_posix_sysconf_SC_2_C_BIND _POSIX2_C_BIND
327+
#define __z_posix_sysconf_SC_2_C_DEV _POSIX2_C_DEV
328+
#define __z_posix_sysconf_SC_2_CHAR_TERM _POSIX2_CHAR_TERM
329+
#define __z_posix_sysconf_SC_COLL_WEIGHTS_MAX _POSIX2_COLL_WEIGHTS_MAX
330+
#define __z_posix_sysconf_SC_DELAYTIMER_MAX _POSIX2_DELAYTIMER_MAX
331+
#define __z_posix_sysconf_SC_EXPR_NEST_MAX _POSIX2_EXPR_NEST_MAX
332+
#define __z_posix_sysconf_SC_2_FORT_DEV _POSIX2_FORT_DEV
333+
#define __z_posix_sysconf_SC_2_FORT_RUN _POSIX2_FORT_RUN
334+
#define __z_posix_sysconf_SC_LINE_MAX _POSIX2_LINE_MAX
335+
#define __z_posix_sysconf_SC_2_LOCALEDEF _POSIX2_LOCALEDEF
336+
#define __z_posix_sysconf_SC_2_PBS _POSIX2_PBS
337+
#define __z_posix_sysconf_SC_2_PBS_ACCOUNTING _POSIX2_PBS_ACCOUNTING
338+
#define __z_posix_sysconf_SC_2_PBS_CHECKPOINT _POSIX2_PBS_CHECKPOINT
339+
#define __z_posix_sysconf_SC_2_PBS_LOCATE _POSIX2_PBS_LOCATE
340+
#define __z_posix_sysconf_SC_2_PBS_MESSAGE _POSIX2_PBS_MESSAGE
341+
#define __z_posix_sysconf_SC_2_PBS_TRACK _POSIX2_PBS_TRACK
342+
#define __z_posix_sysconf_SC_2_SW_DEV _POSIX2_SW_DEV
343+
#define __z_posix_sysconf_SC_2_UPE _POSIX2_UPE
344+
#define __z_posix_sysconf_SC_2_VERSION _POSIX2_VERSION
345+
#define __z_posix_sysconf_SC_XOPEN_CRYPT _XOPEN_CRYPT
346+
#define __z_posix_sysconf_SC_XOPEN_ENH_I18N _XOPEN_ENH_I18N
347+
#define __z_posix_sysconf_SC_XOPEN_REALTIME _XOPEN_REALTIME
348+
#define __z_posix_sysconf_SC_XOPEN_REALTIME_THREADS _XOPEN_REALTIME_THREADS
349+
#define __z_posix_sysconf_SC_XOPEN_SHM _XOPEN_SHM
350+
#define __z_posix_sysconf_SC_XOPEN_STREAMS _XOPEN_STREAMS
351+
#define __z_posix_sysconf_SC_XOPEN_UNIX _XOPEN_UNIX
352+
#define __z_posix_sysconf_SC_XOPEN_UUCP _XOPEN_UUCP
353+
#define __z_posix_sysconf_SC_XOPEN_VERSION _XOPEN_VERSION
354+
#define __z_posix_sysconf_SC_CLK_TCK (100L)
355+
#define __z_posix_sysconf_SC_GETGR_R_SIZE_MAX (0L)
356+
#define __z_posix_sysconf_SC_GETPW_R_SIZE_MAX (0L)
357+
#define __z_posix_sysconf_SC_AIO_LISTIO_MAX AIO_LISTIO_MAX
358+
#define __z_posix_sysconf_SC_AIO_MAX AIO_MAX
359+
#define __z_posix_sysconf_SC_AIO_PRIO_DELTA_MAX AIO_PRIO_DELTA_MAX
360+
#define __z_posix_sysconf_SC_ARG_MAX ARG_MAX
361+
#define __z_posix_sysconf_SC_ATEXIT_MAX ATEXIT_MAX
362+
#define __z_posix_sysconf_SC_CHILD_MAX CHILD_MAX
363+
#define __z_posix_sysconf_SC_HOST_NAME_MAX HOST_NAME_MAX
364+
#define __z_posix_sysconf_SC_IOV_MAX IOV_MAX
365+
#define __z_posix_sysconf_SC_LOGIN_NAME_MAX LOGIN_NAME_MAX
366+
#define __z_posix_sysconf_SC_NGROUPS_MAX _POSIX_NGROUPS_MAX
367+
#define __z_posix_sysconf_SC_MQ_OPEN_MAX MQ_OPEN_MAX
368+
#define __z_posix_sysconf_SC_MQ_PRIO_MAX MQ_PRIO_MAX
369+
#define __z_posix_sysconf_SC_OPEN_MAX CONFIG_POSIX_MAX_FDS
370+
#define __z_posix_sysconf_SC_PAGE_SIZE PAGE_SIZE
371+
#define __z_posix_sysconf_SC_PAGESIZE PAGESIZE
372+
#define __z_posix_sysconf_SC_THREAD_DESTRUCTOR_ITERATIONS PTHREAD_DESTRUCTOR_ITERATIONS
373+
#define __z_posix_sysconf_SC_THREAD_KEYS_MAX PTHREAD_KEYS_MAX
374+
#define __z_posix_sysconf_SC_THREAD_STACK_MIN PTHREAD_STACK_MIN
375+
#define __z_posix_sysconf_SC_THREAD_THREADS_MAX PTHREAD_THREADS_MAX
376+
#define __z_posix_sysconf_SC_RTSIG_MAX RTSIG_MAX
377+
#define __z_posix_sysconf_SC_SEM_NSEMS_MAX SEM_NSEMS_MAX
378+
#define __z_posix_sysconf_SC_SEM_VALUE_MAX SEM_VALUE_MAX
379+
#define __z_posix_sysconf_SC_SIGQUEUE_MAX SIGQUEUE_MAX
380+
#define __z_posix_sysconf_SC_STREAM_MAX STREAM_MAX
381+
#define __z_posix_sysconf_SC_SYMLOOP_MAX SYMLOOP_MAX
382+
#define __z_posix_sysconf_SC_TIMER_MAX TIMER_MAX
383+
#define __z_posix_sysconf_SC_TTY_NAME_MAX TTY_NAME_MAX
384+
#define __z_posix_sysconf_SC_TZNAME_MAX TZNAME_MAX
385+
386+
#define sysconf(x) (long)CONCAT(__z_posix_sysconf, x)
387+
388+
#endif /* CONFIG_POSIX_SYSCONF */
389+
58390
#ifdef __cplusplus
59391
}
60392
#endif

lib/posix/Kconfig

+17
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,23 @@ config PTHREAD_IPC
3939
the pthread mutex, condition variable and barrier IPC
4040
mechanisms.
4141

42+
config POSIX_SYSCONF
43+
bool "Support for sysconf"
44+
default y if POSIX_API
45+
help
46+
The sysconf() function provides a method for the application to determine
47+
the current value of a configurable system limit or option (variable).
48+
49+
config POSIX_PAGE_SIZE_BITS
50+
int "Number of bits to use for PAGE_SIZE"
51+
range 6 16
52+
default 12 if POSIX_API
53+
default 6
54+
help
55+
Define PAGE_SIZE as BIT(n), where n is the value configured here.
56+
PAGE_SIZE is supported in the range [64, 65536]
57+
If CONFIG_POSIX_API=y, PAGE_SIZE defaults to 4096, otherwise, it is 64 bytes.
58+
4259
source "lib/posix/Kconfig.barrier"
4360
source "lib/posix/Kconfig.clock"
4461
source "lib/posix/Kconfig.cond"

0 commit comments

Comments
 (0)