From: Edward Liaw via ltp <ltp@lists.linux.it>
To: ltp@lists.linux.it
Cc: kernel-team@android.com
Subject: [LTP] [PATCH v1] tst_tmpdir: add TST_GET_TMPDIR_ROOT() to get the TMPDIR env var
Date: Tue, 1 Nov 2022 00:08:41 +0000 [thread overview]
Message-ID: <20221101000841.1207999-1-edliaw@google.com> (raw)
Signed-off-by: Edward Liaw <edliaw@google.com>
---
include/old/old_tmpdir.h | 5 +++
include/tst_test.h | 5 +++
lib/tst_cgroup.c | 10 +----
lib/tst_supported_fs_types.c | 5 +--
lib/tst_tmpdir.c | 45 +++++++++++--------
.../security/filecaps/filecaps_common.h | 5 +--
testcases/kernel/syscalls/getcwd/getcwd02.c | 27 ++---------
.../open_posix_testsuite/include/tempfile.h | 10 +----
8 files changed, 47 insertions(+), 65 deletions(-)
diff --git a/include/old/old_tmpdir.h b/include/old/old_tmpdir.h
index 9c61172fd..b1cf79344 100644
--- a/include/old/old_tmpdir.h
+++ b/include/old/old_tmpdir.h
@@ -45,6 +45,11 @@ void tst_rmdir(void);
*/
char *tst_get_tmpdir(void);
+/*
+ * Returns path to the test temporary directory root.
+ */
+const char *tst_get_tmpdir_root(void);
+
/*
* Returns 1 if temp directory was created.
*/
diff --git a/include/tst_test.h b/include/tst_test.h
index a69965b95..26a5ec752 100644
--- a/include/tst_test.h
+++ b/include/tst_test.h
@@ -362,6 +362,11 @@ void tst_set_max_runtime(int max_runtime);
*/
char *tst_get_tmpdir(void);
+/*
+ * Returns path to the test temporary directory root.
+ */
+const char *tst_get_tmpdir_root(void);
+
/*
* Validates exit status of child processes
*/
diff --git a/lib/tst_cgroup.c b/lib/tst_cgroup.c
index 6642d6be4..50699bc63 100644
--- a/lib/tst_cgroup.c
+++ b/lib/tst_cgroup.c
@@ -645,10 +645,7 @@ static void cgroup_mount_v2(void)
{
int ret;
char mnt_path[PATH_MAX];
- const char *tmpdir = getenv("TMPDIR");
-
- if (!tmpdir)
- tmpdir = "/tmp";
+ const char *tmpdir = tst_get_tmpdir_root();
sprintf(mnt_path, "%s/%s%s",
tmpdir, cgroup_mount_ltp_prefix, cgroup_v2_ltp_mount);
@@ -698,10 +695,7 @@ static void cgroup_mount_v1(struct cgroup_ctrl *const ctrl)
{
char mnt_path[PATH_MAX];
int made_dir = 0;
- const char *tmpdir = getenv("TMPDIR");
-
- if (!tmpdir)
- tmpdir = "/tmp";
+ const char *tmpdir = tst_get_tmpdir_root();
if (ctrl->ctrl_indx == CTRL_BLKIO && controllers[CTRL_IO].ctrl_root) {
tst_res(TCONF,
diff --git a/lib/tst_supported_fs_types.c b/lib/tst_supported_fs_types.c
index 7781f94c3..d4911fa3b 100644
--- a/lib/tst_supported_fs_types.c
+++ b/lib/tst_supported_fs_types.c
@@ -74,14 +74,11 @@ int tst_fs_in_skiplist(const char *fs_type, const char *const *skiplist)
static enum tst_fs_impl has_kernel_support(const char *fs_type)
{
static int fuse_supported = -1;
- const char *tmpdir = getenv("TMPDIR");
+ const char *tmpdir = tst_get_tmpdir_root();
char buf[128];
char template[PATH_MAX];
int ret;
- if (!tmpdir)
- tmpdir = "/tmp";
-
snprintf(template, sizeof(template), "%s/mountXXXXXX", tmpdir);
if (!mkdtemp(template))
tst_brk(TBROK | TERRNO, "mkdtemp(%s) failed", template);
diff --git a/lib/tst_tmpdir.c b/lib/tst_tmpdir.c
index 6e38ae977..9c90f481a 100644
--- a/lib/tst_tmpdir.c
+++ b/lib/tst_tmpdir.c
@@ -122,6 +122,28 @@ char *tst_get_tmpdir(void)
return ret;
}
+const char *tst_get_tmpdir_root(void)
+{
+ char *c;
+ const char *env_tmpdir = getenv("TMPDIR");
+
+ if (!env_tmpdir)
+ env_tmpdir = TEMPDIR;
+
+ c = strchr(env_tmpdir, '/');
+ /*
+ * We force environment variable TMPDIR to be an absolute pathname,
+ * which does not make much sense, but it will greatly simplify code in
+ * tst_rmdir().
+ */
+ if (c != env_tmpdir) {
+ tst_brkm(TBROK, NULL, "You must specify an absolute "
+ "pathname for environment variable TMPDIR");
+ return NULL;
+ }
+ return env_tmpdir;
+}
+
const char *tst_get_startwd(void)
{
return test_start_work_dir;
@@ -245,31 +267,16 @@ static int rmobj(const char *obj, char **errmsg)
void tst_tmpdir(void)
{
char template[PATH_MAX];
- char *env_tmpdir;
- char *errmsg, *c;
+ const char *env_tmpdir;
+ char *errmsg;
/*
* Create a template for the temporary directory. Use the
* environment variable TMPDIR if it is available, otherwise
* use our default TEMPDIR.
*/
- env_tmpdir = getenv("TMPDIR");
- if (env_tmpdir) {
- c = strchr(env_tmpdir, '/');
- /*
- * Now we force environment variable TMPDIR to be an absolute
- * pathname, which dose not make much sense, but it will
- * greatly simplify code in tst_rmdir().
- */
- if (c != env_tmpdir) {
- tst_brkm(TBROK, NULL, "You must specify an absolute "
- "pathname for environment variable TMPDIR");
- return;
- }
- snprintf(template, PATH_MAX, "%s/%.3sXXXXXX", env_tmpdir, TCID);
- } else {
- snprintf(template, PATH_MAX, "%s/%.3sXXXXXX", TEMPDIR, TCID);
- }
+ env_tmpdir = tst_get_tmpdir_root();
+ snprintf(template, PATH_MAX, "%s/%.3sXXXXXX", env_tmpdir, TCID);
/* Make the temporary directory in one shot using mkdtemp. */
if (mkdtemp(template) == NULL) {
diff --git a/testcases/kernel/security/filecaps/filecaps_common.h b/testcases/kernel/security/filecaps/filecaps_common.h
index 920f6ac6a..0f011868e 100644
--- a/testcases/kernel/security/filecaps/filecaps_common.h
+++ b/testcases/kernel/security/filecaps/filecaps_common.h
@@ -1,5 +1,6 @@
#include <limits.h>
#include <stdlib.h>
+#include <old_tmpdir.h>
static char *fifofile;
@@ -9,10 +10,8 @@ static const char *get_caps_fifo(void)
fifofile = getenv("FIFOFILE");
if (!fifofile) {
- const char *tmpdir = getenv("TMPDIR");
+ const char *tmpdir = tst_get_tmpdir_root();
- if (!tmpdir)
- tmpdir = "/tmp";
fifofile = malloc(PATH_MAX);
snprintf(fifofile, PATH_MAX, "%s/caps_fifo", tmpdir);
}
diff --git a/testcases/kernel/syscalls/getcwd/getcwd02.c b/testcases/kernel/syscalls/getcwd/getcwd02.c
index e843a4896..cb111a698 100644
--- a/testcases/kernel/syscalls/getcwd/getcwd02.c
+++ b/testcases/kernel/syscalls/getcwd/getcwd02.c
@@ -42,28 +42,6 @@ static int dir_exists(const char *dirpath)
return 0;
}
-static const char *get_tmpdir_path(void)
-{
- char *tmpdir = "/tmp";
-
- if (dir_exists(tmpdir))
- goto done;
-
- /* fallback to $TMPDIR */
- tmpdir = getenv("TMPDIR");
- if (!tmpdir)
- tst_brk(TBROK | TERRNO, "Failed to get $TMPDIR");
-
- if (tmpdir[0] != '/')
- tst_brk(TBROK, "$TMPDIR must be an absolute path");
-
- if (!dir_exists(tmpdir))
- tst_brk(TBROK | TERRNO, "TMPDIR '%s' doesn't exist", tmpdir);
-
-done:
- return tmpdir;
-}
-
static void verify_getcwd(unsigned int n)
{
struct t_case *tc = &tcases[n];
@@ -92,7 +70,10 @@ end:
static void setup(void)
{
- const char *tmpdir = get_tmpdir_path();
+ const char *tmpdir = tst_get_tmpdir_root();
+
+ if (!dir_exists(tmpdir))
+ tst_brk(TBROK | TERRNO, "TMPDIR '%s' doesn't exist", tmpdir);
SAFE_CHDIR(tmpdir);
diff --git a/testcases/open_posix_testsuite/include/tempfile.h b/testcases/open_posix_testsuite/include/tempfile.h
index 0fd27cee3..63e179baf 100644
--- a/testcases/open_posix_testsuite/include/tempfile.h
+++ b/testcases/open_posix_testsuite/include/tempfile.h
@@ -6,14 +6,8 @@
#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
+#include <old_tmpdir.h>
#define PTS_GET_TMP_FILENAME(target, prefix) \
snprintf(target, sizeof(target), \
- "%s/" prefix "_pid-%d", pts_get_tmpdir(), getpid());
-
-static inline const char *pts_get_tmpdir(void)
-{
- const char *tmpdir_env;
- tmpdir_env = getenv("TMPDIR");
- return tmpdir_env ? tmpdir_env : "/tmp";
-}
+ "%s/" prefix "_pid-%d", tst_get_tmpdir_root(), getpid());
--
2.38.1.273.g43a17bfeac-goog
--
Mailing list info: https://lists.linux.it/listinfo/ltp
next reply other threads:[~2022-11-01 0:09 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-01 0:08 Edward Liaw via ltp [this message]
2022-11-02 13:07 ` [LTP] [PATCH v1] tst_tmpdir: add TST_GET_TMPDIR_ROOT() to get the TMPDIR env var Cyril Hrubis
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221101000841.1207999-1-edliaw@google.com \
--to=ltp@lists.linux.it \
--cc=edliaw@google.com \
--cc=kernel-team@android.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.