@@ -39,6 +39,7 @@ For running LTP network tests see `testcases/network/README.md`.
`PATH="$PATH:$LTPROOT/testcases/bin"`
| 'TMPDIR' | Base directory for template directory (C: '.needs_tmpdir = 1'
and others, which imply it, shell: 'TST_NEEDS_TMPDIR=1').
+ Must be an absolute path (default: '/tmp').
| 'TST_NO_CLEANUP' | Disable running test cleanup (defined in 'TST_CLEANUP').
|==============================================================================
@@ -45,6 +45,11 @@ void tst_rmdir(void);
*/
char *tst_get_tmpdir(void);
+/*
+ * Returns path to the test temporary directory root (TMPDIR).
+ */
+const char *tst_get_tmpdir_root(void);
+
/*
* Returns 1 if temp directory was created.
*/
@@ -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 (TMPDIR).
+ */
+const char *tst_get_tmpdir_root(void);
+
/*
* Validates exit status of child processes
*/
@@ -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,
@@ -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);
@@ -122,6 +122,21 @@ char *tst_get_tmpdir(void)
return ret;
}
+const char *tst_get_tmpdir_root(void)
+{
+ const char *env_tmpdir = getenv("TMPDIR");
+
+ if (!env_tmpdir)
+ env_tmpdir = TEMPDIR;
+
+ if (env_tmpdir[0] != '/') {
+ 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 +260,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) {
@@ -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);
}
@@ -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);
Signed-off-by: Edward Liaw <edliaw@google.com> --- doc/user-guide.txt | 1 + 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 | 38 +++++++++---------- .../security/filecaps/filecaps_common.h | 5 +-- testcases/kernel/syscalls/getcwd/getcwd02.c | 27 ++----------- 8 files changed, 39 insertions(+), 57 deletions(-)