From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp55.i.mail.ru (smtp55.i.mail.ru [217.69.128.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 84AC0469719 for ; Sun, 1 Mar 2020 21:26:48 +0300 (MSK) From: Vladislav Shpilevoy Date: Sun, 1 Mar 2020 19:26:44 +0100 Message-Id: <79a3046f338c6dcb366df8c63a5b7b8eb8120f21.1583087036.git.v.shpilevoy@tarantool.org> In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [Tarantool-patches] [PATCH 1/2] fio: respect $TMPDIR in fio.tempdir(), when it is set List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: tarantool-patches@dev.tarantool.org, korablev@tarantool.org, imun@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)