mirror of
https://github.com/rkd77/elinks.git
synced 2024-12-04 14:46:47 -05:00
Merge pull request #108 from sgerwk/master
close stdin before calling a background program
This commit is contained in:
commit
c82a820e62
@ -356,6 +356,30 @@ exe(char *path)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
int
|
||||||
|
exe_no_stdin(char *path) {
|
||||||
|
int ret;
|
||||||
|
#if defined(F_GETFD) && defined(FD_CLOEXEC)
|
||||||
|
int flags;
|
||||||
|
|
||||||
|
flags = fcntl(STDIN_FILENO, F_GETFD, &flags);
|
||||||
|
fcntl(STDIN_FILENO, F_SETFD, flags | FD_CLOEXEC);
|
||||||
|
ret = exe(path);
|
||||||
|
fcntl(STDIN_FILENO, F_SETFD, flags);
|
||||||
|
#else
|
||||||
|
pid_t pid;
|
||||||
|
|
||||||
|
pid = fork();
|
||||||
|
if (pid == 0) {
|
||||||
|
close(STDIN_FILENO);
|
||||||
|
exit(exe(path));
|
||||||
|
}
|
||||||
|
else if (pid > 0)
|
||||||
|
waitpid(pid, &ret, 0);
|
||||||
|
#endif
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static char *clipboard;
|
static char *clipboard;
|
||||||
|
|
||||||
char *
|
char *
|
||||||
|
@ -47,6 +47,7 @@ char *get_window_title(int codepage);
|
|||||||
void block_stdin(void);
|
void block_stdin(void);
|
||||||
void unblock_stdin(void);
|
void unblock_stdin(void);
|
||||||
int exe(char *);
|
int exe(char *);
|
||||||
|
int exe_no_stdin(char *);
|
||||||
int resize_window(int, int, int, int);
|
int resize_window(int, int, int, int);
|
||||||
int can_resize_window(int);
|
int can_resize_window(int);
|
||||||
int can_open_os_shell(int);
|
int can_open_os_shell(int);
|
||||||
|
@ -226,10 +226,15 @@ void
|
|||||||
exec_thread(char *path, int p)
|
exec_thread(char *path, int p)
|
||||||
{
|
{
|
||||||
int plen = strlen(path + 1) + 2;
|
int plen = strlen(path + 1) + 2;
|
||||||
|
pid_t pid;
|
||||||
|
int flags;
|
||||||
|
|
||||||
#if defined(HAVE_SETPGID) && !defined(CONFIG_OS_BEOS) && !defined(HAVE_BEGINTHREAD)
|
#if defined(HAVE_SETPGID) && !defined(CONFIG_OS_BEOS) && !defined(HAVE_BEGINTHREAD)
|
||||||
if (path[0] == TERM_EXEC_NEWWIN) setpgid(0, 0);
|
if (path[0] == TERM_EXEC_NEWWIN) setpgid(0, 0);
|
||||||
#endif
|
#endif
|
||||||
|
if (path[0] == TERM_EXEC_BG)
|
||||||
|
exe_no_stdin(path + 1);
|
||||||
|
else
|
||||||
exe(path + 1);
|
exe(path + 1);
|
||||||
if (path[plen]) unlink(path + plen);
|
if (path[plen]) unlink(path + plen);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user