Redo open_pipe with just pipes and no FIFOs
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1138 35c25a1d-7b9e-4130-9fde-d3aeb78583b8master
parent
cf1d812ccb
commit
b23d14460e
49
files.c
49
files.c
|
@ -291,37 +291,34 @@ int read_file(int fd, char *filename, int quiet)
|
||||||
#ifndef NANO_SMALL
|
#ifndef NANO_SMALL
|
||||||
int open_pipe(char *command)
|
int open_pipe(char *command)
|
||||||
{
|
{
|
||||||
int forkpid, fd;
|
int fd[2], pid;
|
||||||
char *pipefile, *execute;
|
|
||||||
|
/* Make our pipes. */
|
||||||
|
|
||||||
execute = charalloc(strlen(command) + 24);
|
if (pipe(fd) == -1) {
|
||||||
if ((pipefile = safe_tempnam(0, "nano.")) == NULL) {
|
statusbar("Could not pipe");
|
||||||
statusbar(_("Could not create a temporary filename: %s"),
|
|
||||||
strerror(errno));
|
|
||||||
free(execute);
|
|
||||||
free(pipefile);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
sprintf(execute,"%s 2>&1 > %s",command,pipefile);
|
|
||||||
umask(0);
|
|
||||||
mkfifo(pipefile,0700);
|
|
||||||
forkpid = fork();
|
|
||||||
if (forkpid == -1) {
|
|
||||||
statusbar(_("Could not fork"));
|
|
||||||
free(execute);
|
|
||||||
free(pipefile);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else if (forkpid == 0) {
|
|
||||||
execl("/bin/sh","/bin/sh","-c",execute,0);
|
/* Fork a child */
|
||||||
|
|
||||||
|
if ((pid = fork()) == 0) {
|
||||||
|
close(fd[0]);
|
||||||
|
dup2(fd[1], fileno(stdout));
|
||||||
|
dup2(fd[1], fileno(stderr));
|
||||||
|
/* If execl() returns at all, there was an error. */
|
||||||
|
|
||||||
|
execl("/bin/sh","/bin/sh","-c",command,0);
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
fd = open(pipefile,O_RDONLY);
|
else if (pid == -1) {
|
||||||
read_file(fd,"stdin",0);
|
statusbar(_("Could not fork"));
|
||||||
unlink(pipefile);
|
return 1;
|
||||||
free(execute);
|
}
|
||||||
free(pipefile);
|
|
||||||
|
/* Else continue as parent */
|
||||||
|
close(fd[1]);
|
||||||
|
read_file(fd[0],"stdin",0);
|
||||||
set_modified();
|
set_modified();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue