According to the bug report at

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=142179&repeatmerged=yes

MC does not use $TMP. (The reporter must have meant $TMPDIR.)
I did a grep (with MC of course :) for files with /tmp and
found one place in subshell.c. This patch ought to fix it. I tested
it (with tcsh as shell of course) and it works fine.

Oskar Liljeblad ([EMAIL PROTECTED])
--- subshell.c.orig     2002-09-05 21:59:39.000000000 +0200
+++ subshell.c  2002-09-05 22:12:31.000000000 +0200
@@ -337,9 +337,8 @@
     int pty_slave = -1;
 
     /* Braindead tcsh can't redirect output to a file descriptor? */
-    char tcsh_fifo[sizeof "/tmp/mc.pipe.1234567890"];
+    char *tcsh_fifo = NULL;
 
-    
 #ifdef SYNC_PTY_SIDES
        /* Used to wait for a SIGUSR1 signal from the subprocess */
        sigset_t sigusr1_mask, old_mask;
@@ -401,11 +400,20 @@
 
        if (subshell_type == TCSH)
        {
-           g_snprintf (tcsh_fifo, sizeof (tcsh_fifo), "/tmp/mc.pipe.%d", getpid ());
+           char *tmpdir;
+
+           tmpdir = getenv("TMPDIR");
+           if (!tmpdir) {
+               tmpdir = TMPDIR_DEFAULT;
+           }
+
+           tcsh_fifo = g_strdup_printf("%s/mc.pipe.%d", tmpdir, getpid ());
+           printf("--> %s <--\r\n", tcsh_fifo);
            if (mkfifo (tcsh_fifo, 0600) == -1)
            {
                perror (__FILE__": mkfifo");
                use_subshell = FALSE;
+               g_free (tcsh_fifo);
                return;
            }
 
@@ -417,6 +425,7 @@
                fprintf (stderr, _("Couldn't open named pipe %s\n"), tcsh_fifo);
                perror (__FILE__": open");
                use_subshell = FALSE;
+               g_free (tcsh_fifo);
                return;
            }
        }
@@ -511,6 +520,7 @@
                    "set echo_style=both;"
                    "alias precmd 'echo $cwd:q >>%s;kill -STOP $$'\n",
                    tcsh_fifo);
+       g_free (tcsh_fifo);
 
        write_it:
        write (subshell_pty, precmd, strlen (precmd));
@@ -704,10 +714,17 @@
 
     if (quit && subshell_type == TCSH)
     {
+       char *tmpdir;
+
+       tmpdir = getenv("TMPDIR");
+       if (!tmpdir) {
+            tmpdir = TMPDIR_DEFAULT;
+       }
+
        /* We abuse of pty_buffer here, but it doesn't matter at this stage */
-       g_snprintf (pty_buffer, pty_buffer_size, "/tmp/mc.pipe.%d", getpid ());
+       g_snprintf (pty_buffer, pty_buffer_size, "%s/mc.pipe.%d", tmpdir, getpid ());
        if (unlink (pty_buffer) == -1)
-           perror (__FILE__": couldn't remove named pipe /tmp/mc.pipe.NNN");
+           perror (__FILE__": couldn't remove named pipe mc.pipe.NNN from tmpdir");
     }
 
     g_free (subshell_prompt);

Reply via email to