hardcoded /tmp instead of TMPDIR

Oskar Liljeblad oskar at osk.mine.nu
Thu Sep 5 20:16:55 UTC 2002


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 (oskar at osk.mine.nu)
-------------- next part --------------
--- 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);


More information about the mc-devel mailing list