projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
check buffer size.
[unix-history]
/
usr
/
src
/
usr.bin
/
mail
/
popen.c
diff --git
a/usr/src/usr.bin/mail/popen.c
b/usr/src/usr.bin/mail/popen.c
index
d8fdf01
..
5e58f1f
100644
(file)
--- a/
usr/src/usr.bin/mail/popen.c
+++ b/
usr/src/usr.bin/mail/popen.c
@@
-1,3
+1,7
@@
+#ifndef lint
+static char sccsid[] = "@(#)popen.c 1.7 (Berkeley) %G%";
+#endif
+
#include <stdio.h>
#include <signal.h>
#include <errno.h>
#include <stdio.h>
#include <signal.h>
#include <errno.h>
@@
-5,11
+9,15
@@
#define RDR 0
#define WTR 1
static int popen_pid[20];
#define RDR 0
#define WTR 1
static int popen_pid[20];
-static char *sccsid = "@(#)popen.c 1.2.1.2 %G%";
-# ifndef VMUNIX
-# define vfork fork
-# endif VMUNIX
+#ifdef VMUNIX
+#define mask(s) (1<<((s)-1))
+#else
+#define vfork fork
+#endif VMUNIX
+#ifndef SIGRETRO
+#define sigchild()
+#endif
FILE *
popen(cmd,mode)
FILE *
popen(cmd,mode)
@@
-25,6
+33,7
@@
char *mode;
hisside = tst(p[RDR], p[WTR]);
if((pid = vfork()) == 0) {
/* myside and hisside reverse roles in child */
hisside = tst(p[RDR], p[WTR]);
if((pid = vfork()) == 0) {
/* myside and hisside reverse roles in child */
+ sigchild();
close(myside);
dup2(hisside, tst(0, 1));
close(hisside);
close(myside);
dup2(hisside, tst(0, 1));
close(hisside);
@@
-42,24
+51,20
@@
pclose(ptr)
FILE *ptr;
{
register f, r;
FILE *ptr;
{
register f, r;
- int status;
+ int status
, omask
;
extern int errno;
f = fileno(ptr);
fclose(ptr);
# ifdef VMUNIX
extern int errno;
f = fileno(ptr);
fclose(ptr);
# ifdef VMUNIX
- sighold(SIGINT);
- sighold(SIGQUIT);
- sighold(SIGHUP);
+ omask = sigblock(mask(SIGINT)|mask(SIGQUIT)|mask(SIGHUP));
# endif VMUNIX
while((r = wait(&status)) != popen_pid[f] && r != -1 && errno != EINTR)
;
if(r == -1)
status = -1;
# ifdef VMUNIX
# endif VMUNIX
while((r = wait(&status)) != popen_pid[f] && r != -1 && errno != EINTR)
;
if(r == -1)
status = -1;
# ifdef VMUNIX
- sigrelse(SIGINT);
- sigrelse(SIGQUIT);
- sigrelse(SIGHUP);
+ sigsetmask(omask);
# endif VMUNIX
return(status);
}
# endif VMUNIX
return(status);
}