Skip to content

posix: implement confstr() #68599

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion doc/services/portability/posix/option_groups/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ process applications.
:header: API, Supported
:widths: 50,10

confstr(),
confstr(),yes
environ,
errno,yes
getenv(),
Expand Down
23 changes: 23 additions & 0 deletions include/zephyr/posix/unistd.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
69 changes: 69 additions & 0 deletions lib/posix/options/confstr.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/*
* Copyright (c) 2024 Perrot Gaetan
*
* SPDX-License-Identifier: Apache-2.0
*/

#include <zephyr/posix/unistd.h>
#include <errno.h>

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;
}
23 changes: 23 additions & 0 deletions tests/posix/common/src/confstr.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/*
* Copyright (c) 2024 Perrot Gaetan
*
* SPDX-License-Identifier: Apache-2.0
*/

#include <zephyr/ztest.h>
#include <zephyr/posix/unistd.h>
#include <errno.h>

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);
}
36 changes: 18 additions & 18 deletions tests/posix/headers/src/unistd_h.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down Expand Up @@ -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 */
Expand Down