https://github.com/MidnightCommander/mc/commit/7a3a763f0ea07a825ca2af4642e31f9e358a9fd0
https://bugs.gentoo.org/941099
https://github.com/MidnightCommander/mc/issues/4535

From e2d96fa802abebf888dcc2cc938cfd06abca8eb0 Mon Sep 17 00:00:00 2001
From: "Yury V. Zaytsev" <yury@shurup.com>
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 <yury@shurup.com>
--- 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" <yury@shurup.com>
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 <yury@shurup.com>
--- 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" <yury@shurup.com>
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 <yury@shurup.com>
--- 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;
