From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org> To: tarantool-patches@dev.tarantool.org, korablev@tarantool.org, imun@tarantool.org Subject: [Tarantool-patches] [PATCH 1/2] fio: respect $TMPDIR in fio.tempdir(), when it is set Date: Sun, 1 Mar 2020 19:26:44 +0100 [thread overview] Message-ID: <79a3046f338c6dcb366df8c63a5b7b8eb8120f21.1583087036.git.v.shpilevoy@tarantool.org> (raw) In-Reply-To: <cover.1583087036.git.v.shpilevoy@tarantool.org> TMPDIR is an environment variable used to tell what a directory should be used to create temporary files. It is described in the POSIX standard, and should be used by programs creating temporary files. Part of #4794 --- src/lib/core/coio_file.c | 11 ++++--- test/app/fio.result | 68 ++++++++++++++++++++++++++++++++++++++++ test/app/fio.test.lua | 28 +++++++++++++++++ 3 files changed, 103 insertions(+), 4 deletions(-) diff --git a/src/lib/core/coio_file.c b/src/lib/core/coio_file.c index 62388344e..e2345567c 100644 --- a/src/lib/core/coio_file.c +++ b/src/lib/core/coio_file.c @@ -466,13 +466,16 @@ coio_tempdir(char *path, size_t path_len) { INIT_COEIO_FILE(eio); - if (path_len < sizeof("/tmp/XXXXXX") + 1) { + const char *tmpdir = getenv("TMPDIR"); + if (tmpdir == NULL) + tmpdir = "/tmp"; + int rc = snprintf(path, path_len, "%s/XXXXXX", tmpdir); + if (rc < 0) + return -1; + if ((size_t) rc >= path_len) { errno = ENOMEM; return -1; } - - snprintf(path, path_len, "/tmp/XXXXXX"); - eio.tempdir.tpl = path; eio_req *req = eio_custom(coio_do_tempdir, 0, coio_complete, &eio); diff --git a/test/app/fio.result b/test/app/fio.result index f83c43f44..2c9851d9e 100644 --- a/test/app/fio.result +++ b/test/app/fio.result @@ -1456,3 +1456,71 @@ fio.mktree('/dev/null/dir') - false - 'Error creating directory /dev/null: File exists' ... +-- +-- gh-4794: fio.tempdir() should use $TEMPDIR. +-- +cwd = fio.cwd() +--- +... +old_tmpdir = os.getenv('TMPDIR') +--- +... +tmpdir = cwd..'/tmp' +--- +... +fio.mkdir(tmpdir) +--- +- true +... +os.setenv('TMPDIR', tmpdir) +--- +... +dir = fio.tempdir() +--- +... +dir:find(tmpdir) ~= nil or {dir, tmpdir} +--- +- true +... +fio.stat(dir) ~= nil or fio.stat(dir) +--- +- true +... +tmpdir = cwd..'/tmp2' +--- +... +os.setenv('TMPDIR', tmpdir) +--- +... +fio.tempdir() +--- +- null +- 'fio: No such file or directory' +... +os.setenv('TMPDIR', nil) +--- +... +dir = fio.tempdir() +--- +... +dir:find('/tmp') ~= nil or dir +--- +- true +... +tmpdir = cwd..'/'..string.rep('t', 5000) +--- +... +os.setenv('TMPDIR', tmpdir) +--- +... +fio.tempdir() +--- +- null +- 'fio: Cannot allocate memory' +... +tmpdir = nil +--- +... +os.setenv('TMPDIR', old_tmpdir) +--- +... diff --git a/test/app/fio.test.lua b/test/app/fio.test.lua index 56c957d8a..fb6a412b3 100644 --- a/test/app/fio.test.lua +++ b/test/app/fio.test.lua @@ -474,3 +474,31 @@ test_run:cmd("clear filter") -- fio.mktree('/dev/null') fio.mktree('/dev/null/dir') + +-- +-- gh-4794: fio.tempdir() should use $TEMPDIR. +-- +cwd = fio.cwd() +old_tmpdir = os.getenv('TMPDIR') + +tmpdir = cwd..'/tmp' +fio.mkdir(tmpdir) +os.setenv('TMPDIR', tmpdir) +dir = fio.tempdir() +dir:find(tmpdir) ~= nil or {dir, tmpdir} +fio.stat(dir) ~= nil or fio.stat(dir) + +tmpdir = cwd..'/tmp2' +os.setenv('TMPDIR', tmpdir) +fio.tempdir() + +os.setenv('TMPDIR', nil) +dir = fio.tempdir() +dir:find('/tmp') ~= nil or dir + +tmpdir = cwd..'/'..string.rep('t', 5000) +os.setenv('TMPDIR', tmpdir) +fio.tempdir() +tmpdir = nil + +os.setenv('TMPDIR', old_tmpdir) -- 2.21.1 (Apple Git-122.3)
next prev parent reply other threads:[~2020-03-01 18:26 UTC|newest] Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-03-01 18:26 [Tarantool-patches] [PATCH 0/2] fio.tempdir() improvements Vladislav Shpilevoy 2020-03-01 18:26 ` Vladislav Shpilevoy [this message] 2020-03-01 18:26 ` [Tarantool-patches] [PATCH 2/2] fio: allow to pass a template to fio.tempdir() Vladislav Shpilevoy 2020-03-01 23:14 ` [Tarantool-patches] [PATCH 0/2] fio.tempdir() improvements Igor Munkin
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=79a3046f338c6dcb366df8c63a5b7b8eb8120f21.1583087036.git.v.shpilevoy@tarantool.org \ --to=v.shpilevoy@tarantool.org \ --cc=imun@tarantool.org \ --cc=korablev@tarantool.org \ --cc=tarantool-patches@dev.tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH 1/2] fio: respect $TMPDIR in fio.tempdir(), when it is set' \ /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
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox