]> git.wh0rd.org Git - nano.git/commitdiff
Rocco's mods to open_pipe
authorChris Allegretta <chrisa@asty.org>
Mon, 25 Mar 2002 13:40:39 +0000 (13:40 +0000)
committerChris Allegretta <chrisa@asty.org>
Mon, 25 Mar 2002 13:40:39 +0000 (13:40 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1145 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
files.c

index 11fcb2a5934bb1fbeaeb6bf8cd306c7c7082152e..e07551219625e2308848a93167ad12eacd0ced62 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,9 +2,10 @@ CVS code -
 - General
        - Type misalignments and mem leaks in renumber_all, do_justify
          and do_spell (Rocco & Steven Kneizys).
-       - New "External Command" code, originally by Dwayne Rightler.
-         New function files.c:open_pipe(), changes to do_insertfile(),
-         new list extcmd_list, cmd is ^X after ^R by default.
+       - New "External Command" code, originally by Dwayne Rightler,
+         Chris & Rocco. New function files.c:open_pipe(), changes to
+         do_insertfile(), new list extcmd_list, cmd is ^X after ^R by
+         default.
        - Added separate regex variable (color_regex and colormatches)
          so that color syntax and regex search/replace can coexist.
 - files.c:
diff --git a/files.c b/files.c
index 4913a0d803eb21f913465e805ba2cc3b6ca453d4..527117b21874d315df3264b719e69bf2c30cec6b 100644 (file)
--- a/files.c
+++ b/files.c
@@ -26,6 +26,7 @@
 #include <stdio.h>
 #include <unistd.h>
 #include <sys/types.h>
+#include <sys/wait.h>
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <errno.h>
@@ -292,6 +293,7 @@ int read_file(int fd, char *filename, int quiet)
 int open_pipe(char *command)
 {
     int fd[2], pid;
+    int fork_status;
   
   /* Make our pipes. */
 
@@ -311,15 +313,22 @@ int open_pipe(char *command)
        execl("/bin/sh","/bin/sh","-c",command,0);
        exit(0);
     }
-    else if (pid == -1) {
+
+    /* Else continue as parent */
+
+    close(fd[1]);
+
+    if (pid == -1) {
+       close(fd[0]);
        statusbar(_("Could not fork"));
        return 1;
     }
 
-    /* Else continue as parent */
-    close(fd[1]);
     read_file(fd[0],"stdin",0);
     set_modified();
+
+    wait(&fork_status);
+
     return 0;
 }
 #endif /* NANO_SMALL */