1873420caSDag-Erling Smørgrav /*-
2873420caSDag-Erling Smørgrav * Copyright (c) 2025 Klara, Inc.
3873420caSDag-Erling Smørgrav *
4873420caSDag-Erling Smørgrav * SPDX-License-Identifier: BSD-2-Clause
5873420caSDag-Erling Smørgrav */
6873420caSDag-Erling Smørgrav
7873420caSDag-Erling Smørgrav #include <errno.h>
8873420caSDag-Erling Smørgrav #include <stdlib.h>
9873420caSDag-Erling Smørgrav #include <string.h>
10873420caSDag-Erling Smørgrav
11873420caSDag-Erling Smørgrav #include <atf-c.h>
12873420caSDag-Erling Smørgrav
13873420caSDag-Erling Smørgrav ATF_TC_WITHOUT_HEAD(getenv_r_ok);
ATF_TC_BODY(getenv_r_ok,tc)14873420caSDag-Erling Smørgrav ATF_TC_BODY(getenv_r_ok, tc)
15873420caSDag-Erling Smørgrav {
16873420caSDag-Erling Smørgrav const char *ident = atf_tc_get_ident(tc);
17873420caSDag-Erling Smørgrav char buf[256];
18873420caSDag-Erling Smørgrav
19873420caSDag-Erling Smørgrav ATF_REQUIRE_EQ(0, setenv("ATF_TC_IDENT", ident, 1));
20873420caSDag-Erling Smørgrav ATF_REQUIRE_EQ(0, getenv_r("ATF_TC_IDENT", buf, sizeof(buf)));
21873420caSDag-Erling Smørgrav ATF_REQUIRE_STREQ(ident, buf);
22873420caSDag-Erling Smørgrav }
23873420caSDag-Erling Smørgrav
24873420caSDag-Erling Smørgrav ATF_TC_WITHOUT_HEAD(getenv_r_einval);
ATF_TC_BODY(getenv_r_einval,tc)25873420caSDag-Erling Smørgrav ATF_TC_BODY(getenv_r_einval, tc)
26873420caSDag-Erling Smørgrav {
27873420caSDag-Erling Smørgrav char buf[256];
28873420caSDag-Erling Smørgrav
29873420caSDag-Erling Smørgrav errno = 0;
30873420caSDag-Erling Smørgrav ATF_REQUIRE_EQ(-1, getenv_r(NULL, buf, sizeof(buf)));
31873420caSDag-Erling Smørgrav ATF_REQUIRE_EQ(EINVAL, errno);
32873420caSDag-Erling Smørgrav errno = 0;
33873420caSDag-Erling Smørgrav ATF_REQUIRE_EQ(-1, getenv_r("", buf, sizeof(buf)));
34873420caSDag-Erling Smørgrav ATF_REQUIRE_EQ(EINVAL, errno);
35873420caSDag-Erling Smørgrav errno = 0;
36873420caSDag-Erling Smørgrav ATF_REQUIRE_EQ(-1, getenv_r("A=B", buf, sizeof(buf)));
37873420caSDag-Erling Smørgrav ATF_REQUIRE_EQ(EINVAL, errno);
38873420caSDag-Erling Smørgrav }
39873420caSDag-Erling Smørgrav
40873420caSDag-Erling Smørgrav ATF_TC_WITHOUT_HEAD(getenv_r_enoent);
ATF_TC_BODY(getenv_r_enoent,tc)41873420caSDag-Erling Smørgrav ATF_TC_BODY(getenv_r_enoent, tc)
42873420caSDag-Erling Smørgrav {
43873420caSDag-Erling Smørgrav char buf[256];
44873420caSDag-Erling Smørgrav
45873420caSDag-Erling Smørgrav errno = 0;
46873420caSDag-Erling Smørgrav ATF_REQUIRE_EQ(-1, getenv_r("no such variable", buf, sizeof(buf)));
47873420caSDag-Erling Smørgrav ATF_REQUIRE_EQ(ENOENT, errno);
48873420caSDag-Erling Smørgrav }
49873420caSDag-Erling Smørgrav
50873420caSDag-Erling Smørgrav ATF_TC_WITHOUT_HEAD(getenv_r_erange);
ATF_TC_BODY(getenv_r_erange,tc)51873420caSDag-Erling Smørgrav ATF_TC_BODY(getenv_r_erange, tc)
52873420caSDag-Erling Smørgrav {
53873420caSDag-Erling Smørgrav const char *ident = atf_tc_get_ident(tc);
54873420caSDag-Erling Smørgrav char buf[256];
55873420caSDag-Erling Smørgrav
56873420caSDag-Erling Smørgrav ATF_REQUIRE_EQ(0, setenv("ATF_TC_IDENT", ident, 1));
57873420caSDag-Erling Smørgrav errno = 0;
58*26aec3f3SMark Johnston ATF_REQUIRE_EQ(-1, getenv_r("ATF_TC_IDENT", buf, strlen(ident)));
59873420caSDag-Erling Smørgrav ATF_REQUIRE_EQ(ERANGE, errno);
60873420caSDag-Erling Smørgrav }
61873420caSDag-Erling Smørgrav
ATF_TP_ADD_TCS(tp)62873420caSDag-Erling Smørgrav ATF_TP_ADD_TCS(tp)
63873420caSDag-Erling Smørgrav {
64873420caSDag-Erling Smørgrav ATF_TP_ADD_TC(tp, getenv_r_ok);
65873420caSDag-Erling Smørgrav ATF_TP_ADD_TC(tp, getenv_r_einval);
66873420caSDag-Erling Smørgrav ATF_TP_ADD_TC(tp, getenv_r_enoent);
67873420caSDag-Erling Smørgrav ATF_TP_ADD_TC(tp, getenv_r_erange);
68873420caSDag-Erling Smørgrav return (atf_no_error());
69873420caSDag-Erling Smørgrav }
70