diff --git a/doc/services/portability/posix/option_groups/index.rst b/doc/services/portability/posix/option_groups/index.rst index 55b11d3da20e..aae3fc4d3815 100644 --- a/doc/services/portability/posix/option_groups/index.rst +++ b/doc/services/portability/posix/option_groups/index.rst @@ -163,7 +163,7 @@ process applications. :header: API, Supported :widths: 50,10 - confstr(), + confstr(),yes environ, errno,yes getenv(), diff --git a/include/zephyr/posix/unistd.h b/include/zephyr/posix/unistd.h index 36918c563654..e308bcf8e9de 100644 --- a/include/zephyr/posix/unistd.h +++ b/include/zephyr/posix/unistd.h @@ -26,6 +26,29 @@ extern "C" { #endif +/* confstr constantes */ +enum { + _CS_PATH, + _CS_POSIX_V7_ILP32_OFF32_CFLAGS, + _CS_POSIX_V7_ILP32_OFF32_LDFLAGS, + _CS_POSIX_V7_ILP32_OFF32_LIBS, + _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS, + _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS, + _CS_POSIX_V7_ILP32_OFFBIG_LIBS, + _CS_POSIX_V7_LP64_OFF64_CFLAGS, + _CS_POSIX_V7_LP64_OFF64_LDFLAGS, + _CS_POSIX_V7_LP64_OFF64_LIBS, + _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS, + _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS, + _CS_POSIX_V7_LPBIG_OFFBIG_LIBS, + _CS_POSIX_V7_THREADS_CFLAGS, + _CS_POSIX_V7_THREADS_LDFLAGS, + _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS, + _CS_V7_ENV +}; + +size_t confstr(int name, char *buf, size_t len); + /* Version test macros */ #define _POSIX_VERSION 200809L #define _POSIX2_VERSION (-1L) diff --git a/lib/posix/options/confstr.c b/lib/posix/options/confstr.c new file mode 100644 index 000000000000..3bf9dfa3b6ea --- /dev/null +++ b/lib/posix/options/confstr.c @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2024 Perrot Gaetan + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include + +size_t confstr(int name, char *buf, size_t len) +{ + switch (name) { + case _CS_PATH: + /* Implementation for _CS_PATH */ + break; + case _CS_POSIX_V7_ILP32_OFF32_CFLAGS: + /* Implementation for _CS_POSIX_V7_ILP32_OFF32_CFLAGS */ + break; + case _CS_POSIX_V7_ILP32_OFF32_LDFLAGS: + /* Implementation for _CS_POSIX_V7_ILP32_OFF32_LDFLAGS */ + break; + case _CS_POSIX_V7_ILP32_OFF32_LIBS: + /* Implementation for _CS_POSIX_V7_ILP32_OFF32_LIBS */ + break; + case _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS: + /* Implementation for _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS */ + break; + case _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS: + /* Implementation for _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS */ + break; + case _CS_POSIX_V7_ILP32_OFFBIG_LIBS: + /* Implementation for _CS_POSIX_V7_ILP32_OFFBIG_LIBS */ + break; + case _CS_POSIX_V7_LP64_OFF64_CFLAGS: + /* Implementation for _CS_POSIX_V7_LP64_OFF64_CFLAGS */ + break; + case _CS_POSIX_V7_LP64_OFF64_LDFLAGS: + /* Implementation for _CS_POSIX_V7_LP64_OFF64_LDFLAGS */ + break; + case _CS_POSIX_V7_LP64_OFF64_LIBS: + /* Implementation for _CS_POSIX_V7_LP64_OFF64_LIBS */ + break; + case _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS: + /* Implementation for _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS */ + break; + case _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS: + /* Implementation for _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS */ + break; + case _CS_POSIX_V7_LPBIG_OFFBIG_LIBS: + /* Implementation for _CS_POSIX_V7_LPBIG_OFFBIG_LIBS */ + break; + case _CS_POSIX_V7_THREADS_CFLAGS: + /* Implementation for _CS_POSIX_V7_THREADS_CFLAGS */ + break; + case _CS_POSIX_V7_THREADS_LDFLAGS: + /* Implementation for _CS_POSIX_V7_THREADS_LDFLAGS */ + break; + case _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS: + /* Implementation for _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS */ + break; + case _CS_V7_ENV: + /* Implementation for _CS_V7_ENV */ + break; + default: + errno = EINVAL; + break; + } + return 0; +} diff --git a/tests/posix/common/src/confstr.c b/tests/posix/common/src/confstr.c new file mode 100644 index 000000000000..65327cf04459 --- /dev/null +++ b/tests/posix/common/src/confstr.c @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2024 Perrot Gaetan + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +ZTEST(posix_apis, test_posix_confstr) +{ + size_t ret; + char *buf = NULL; + + ret = confstr(_CS_PATH, buf, 0); + zassert_equal(ret, 0,"ztress_execute failed (ret: %d)", ret); + zassert_not_equal(errno, EINVAL); + + ret = confstr(200, buf, 0); + zassert_equal(ret, 0); + zassert_equal(errno, EINVAL); +} diff --git a/tests/posix/headers/src/unistd_h.c b/tests/posix/headers/src/unistd_h.c index a0b51c332065..97f1d4808df4 100644 --- a/tests/posix/headers/src/unistd_h.c +++ b/tests/posix/headers/src/unistd_h.c @@ -117,24 +117,24 @@ ZTEST(posix_headers, test_unistd_h) /* zassert_not_equal(-1, W_OK); */ /* not implemented */ /* zassert_not_equal(-1, X_OK); */ /* not implemented */ - /* zassert_not_equal(INT_MIN, _CS_PATH); */ /* not implemented */ + zassert_not_equal(INT_MIN, _CS_PATH); - /* zassert_not_equal(INT_MIN, _CS_POSIX_V7_ILP32_OFF32_CFLAGS); */ /* not implemented */ - /* zassert_not_equal(INT_MIN, _CS_POSIX_V7_ILP32_OFF32_LDFLAGS); */ /* not implemented */ - /* zassert_not_equal(INT_MIN, _CS_POSIX_V7_ILP32_OFF32_LIBS); */ /* not implemented */ - /* zassert_not_equal(INT_MIN, _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS); */ /* not implemented */ - /* zassert_not_equal(INT_MIN, _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS); */ /* not implemented */ - /* zassert_not_equal(INT_MIN, _CS_POSIX_V7_ILP32_OFFBIG_LIBS); */ /* not implemented */ - /* zassert_not_equal(INT_MIN, _CS_POSIX_V7_LP64_OFF64_CFLAGS); */ /* not implemented */ - /* zassert_not_equal(INT_MIN, _CS_POSIX_V7_LP64_OFF64_LDFLAGS); */ /* not implemented */ - /* zassert_not_equal(INT_MIN, _CS_POSIX_V7_LP64_OFF64_LIBS); */ /* not implemented */ - /* zassert_not_equal(INT_MIN, _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS); */ /* not implemented */ - /* zassert_not_equal(INT_MIN, _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS); */ /* not implemented */ - /* zassert_not_equal(INT_MIN, _CS_POSIX_V7_LPBIG_OFFBIG_LIBS); */ /* not implemented */ - /* zassert_not_equal(INT_MIN, _CS_POSIX_V7_THREADS_CFLAGS); */ /* not implemented */ - /* zassert_not_equal(INT_MIN, _CS_POSIX_V7_THREADS_LDFLAGS); */ /* not implemented */ - /* zassert_not_equal(INT_MIN, _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS); */ /* not implemented */ - /* zassert_not_equal(INT_MIN, _CS_V7_ENV); */ /* not implemented */ + zassert_not_equal(INT_MIN, _CS_POSIX_V7_ILP32_OFF32_CFLAGS); + zassert_not_equal(INT_MIN, _CS_POSIX_V7_ILP32_OFF32_LDFLAGS); + zassert_not_equal(INT_MIN, _CS_POSIX_V7_ILP32_OFF32_LIBS); + zassert_not_equal(INT_MIN, _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS); + zassert_not_equal(INT_MIN, _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS); + zassert_not_equal(INT_MIN, _CS_POSIX_V7_ILP32_OFFBIG_LIBS); + zassert_not_equal(INT_MIN, _CS_POSIX_V7_LP64_OFF64_CFLAGS); + zassert_not_equal(INT_MIN, _CS_POSIX_V7_LP64_OFF64_LDFLAGS); + zassert_not_equal(INT_MIN, _CS_POSIX_V7_LP64_OFF64_LIBS); + zassert_not_equal(INT_MIN, _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS); + zassert_not_equal(INT_MIN, _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS); + zassert_not_equal(INT_MIN, _CS_POSIX_V7_LPBIG_OFFBIG_LIBS); + zassert_not_equal(INT_MIN, _CS_POSIX_V7_THREADS_CFLAGS); + zassert_not_equal(INT_MIN, _CS_POSIX_V7_THREADS_LDFLAGS); + zassert_not_equal(INT_MIN, _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS); + zassert_not_equal(INT_MIN, _CS_V7_ENV); /* zassert_not_equal(-1, F_LOCK); */ /* not implemented */ /* zassert_not_equal(-1, F_TEST); */ /* not implemented */ @@ -308,7 +308,7 @@ ZTEST(posix_headers, test_unistd_h) /* zassert_not_null(chdir); */ /* not implemented */ /* zassert_not_null(chown); */ /* not implemented */ zassert_not_null(close); - /* zassert_not_null(confstr); */ /* not implemented */ + zassert_not_null(confstr); /* zassert_not_null(crypt); */ /* not implemented */ /* zassert_not_null(dup); */ /* not implemented */ /* zassert_not_null(dup2); */ /* not implemented */