https://github.com/MidnightCommander/mc/commit/7a3a763f0ea07a825ca2af4642e31f9e358a9fd0 https://bugs.gentoo.org/941099 https://midnight-commander.org/ticket/4535 From e2d96fa802abebf888dcc2cc938cfd06abca8eb0 Mon Sep 17 00:00:00 2001 From: "Yury V. Zaytsev" Date: Sun, 1 Sep 2024 12:01:37 +0200 Subject: [PATCH 1/3] Ticket #4575: adjust mc-wrapper to fit changes in #4535. Signed-off-by: Yury V. Zaytsev --- a/contrib/mc-wrapper.csh.in +++ b/contrib/mc-wrapper.csh.in @@ -1,9 +1,9 @@ -set MC_USER=`whoami` - -if ($?TMPDIR) then - setenv MC_PWD_FILE $TMPDIR/mc-$MC_USER/mc.pwd.$$ +if ($?MC_TMPDIR) then + setenv MC_PWD_FILE "`mktemp '$MC_TMPDIR/mc.pwd.XXXXXX'`" +else if ($?TMPDIR) then + setenv MC_PWD_FILE "`mktemp '$TMPDIR/mc.pwd.XXXXXX'`" else - setenv MC_PWD_FILE /tmp/mc-$MC_USER/mc.pwd.$$ + setenv MC_PWD_FILE "`mktemp '/tmp/mc.pwd.XXXXXX'`" endif @bindir@/mc -P "$MC_PWD_FILE" $* @@ -11,11 +11,10 @@ endif if (-r "$MC_PWD_FILE") then setenv MC_PWD "`cat '$MC_PWD_FILE'`" if ("$MC_PWD" != "$cwd" && -d "$MC_PWD") then - cd "$MC_PWD" + cd "$MC_PWD" || true endif unsetenv MC_PWD endif rm -f "$MC_PWD_FILE" unsetenv MC_PWD_FILE -unsetenv MC_USER --- a/contrib/mc-wrapper.sh.in +++ b/contrib/mc-wrapper.sh.in @@ -1,15 +1,20 @@ -MC_USER=`whoami` -MC_PWD_FILE="${TMPDIR-/tmp}/mc-$MC_USER/mc.pwd.$$" +if test -n "$MC_TMPDIR"; then + MC_PWD_FILE="`mktemp "${MC_TMPDIR}/mc.pwd.XXXXXX"`" +elif test -n "$TMPDIR"; then + MC_PWD_FILE="`mktemp "${TMPDIR}/mc.pwd.XXXXXX"`" +else + MC_PWD_FILE="`mktemp "/tmp/mc.pwd.XXXXXX"`" +fi + @bindir@/mc -P "$MC_PWD_FILE" "$@" if test -r "$MC_PWD_FILE"; then MC_PWD="`cat "$MC_PWD_FILE"`" if test -n "$MC_PWD" && test "$MC_PWD" != "$PWD" && test -d "$MC_PWD"; then - cd "$MC_PWD" + cd "$MC_PWD" || true fi unset MC_PWD fi rm -f "$MC_PWD_FILE" unset MC_PWD_FILE -unset MC_USER From a3ce493ae25f35f29919332d4794c17109f56901 Mon Sep 17 00:00:00 2001 From: "Yury V. Zaytsev" Date: Thu, 29 Aug 2024 12:13:40 +0200 Subject: [PATCH 2/3] vfs: fix tempdir path building to account for trailing slash on macOS Signed-off-by: Yury V. Zaytsev --- a/lib/vfs/interface.c +++ b/lib/vfs/interface.c @@ -775,6 +775,7 @@ mc_tmpdir (void) static const char *tmpdir = NULL; const char *sys_tmp; struct stat st; + gchar *template; /* Check if already correctly initialized */ if (tmpdir != NULL && lstat (tmpdir, &st) == 0 && S_ISDIR (st.st_mode) && @@ -789,7 +790,10 @@ mc_tmpdir (void) sys_tmp = TMPDIR_DEFAULT; } - g_snprintf (buffer, sizeof (buffer), "%s/mc-XXXXXX", sys_tmp); + template = g_build_filename (sys_tmp, "mc-XXXXXX", (char *) NULL); + g_strlcpy (buffer, template, sizeof (buffer)); + g_free (template); + tmpdir = g_mkdtemp (buffer); if (tmpdir != NULL) g_setenv ("MC_TMPDIR", tmpdir, TRUE); --- a/tests/lib/vfs/tempdir.c +++ b/tests/lib/vfs/tempdir.c @@ -45,6 +45,9 @@ static void setup (void) { + /* Ensure that tests behave consistently irrespectively of the environment */ + g_unsetenv ("MC_TMPDIR"); + str_init_strings (NULL); vfs_init (); From d081bc68aa6ad3ded515ea490118b0a38a1ec204 Mon Sep 17 00:00:00 2001 From: "Yury V. Zaytsev" Date: Mon, 2 Sep 2024 16:51:17 +0200 Subject: [PATCH 3/3] main: remove `O_EXCL` for wd-file since creation is now managed by wrapper Signed-off-by: Yury V. Zaytsev --- a/src/main.c +++ b/src/main.c @@ -509,8 +509,7 @@ main (int argc, char *argv[]) { int last_wd_fd; - last_wd_fd = open (mc_args__last_wd_file, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, - S_IRUSR | S_IWUSR); + last_wd_fd = open (mc_args__last_wd_file, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR); if (last_wd_fd != -1) { ssize_t ret1;