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
include fixes
[unix-history]
/
usr
/
src
/
bin
/
csh
/
proc.c
diff --git
a/usr/src/bin/csh/proc.c
b/usr/src/bin/csh/proc.c
index
3ad725f
..
ee9735d
100644
(file)
--- a/
usr/src/bin/csh/proc.c
+++ b/
usr/src/bin/csh/proc.c
@@
-1,9
+1,9
@@
-static char *sccsid = "@(#)proc.c 4.1
0 (Berkeley) 83/06/1
1";
+static char *sccsid = "@(#)proc.c 4.1
2 (Berkeley) 83/07/0
1";
#include "sh.h"
#include "sh.dir.h"
#include "sh.proc.h"
#include "sh.h"
#include "sh.dir.h"
#include "sh.proc.h"
-#include <wait.h>
+#include <
sys/
wait.h>
#include <sys/ioctl.h>
/*
#include <sys/ioctl.h>
/*
@@
-192,6
+192,8
@@
pjwait(pp)
register struct process *fp;
int jobflags, reason;
register struct process *fp;
int jobflags, reason;
+ while (pp->p_pid != pp->p_jobid)
+ pp = pp->p_friends;
fp = pp;
do {
if ((fp->p_flags&(PFOREGND|PRUNNING)) == PRUNNING)
fp = pp;
do {
if ((fp->p_flags&(PFOREGND|PRUNNING)) == PRUNNING)
@@
-254,7
+256,7
@@
dowait()
loop:
sighold(SIGCHLD);
for (pp = proclist.p_next; pp; pp = pp->p_next)
loop:
sighold(SIGCHLD);
for (pp = proclist.p_next; pp; pp = pp->p_next)
- if (pp->p_pid &&
pp->p_pid == pp->p_jobid &&
+ if (pp->p_pid &&
/* pp->p_pid == pp->p_jobid && */
pp->p_flags&PRUNNING) {
sigpause(sigblock(0) &~ mask(SIGCHLD));
goto loop;
pp->p_flags&PRUNNING) {
sigpause(sigblock(0) &~ mask(SIGCHLD));
goto loop;
@@
-811,6
+813,7
@@
pkill(v, signum)
register struct process *pp, *np;
register int jobflags = 0;
int pid;
register struct process *pp, *np;
register int jobflags = 0;
int pid;
+ char *cp;
extern char *sys_errlist[];
int err = 0;
extern char *sys_errlist[];
int err = 0;
@@
-818,8
+821,9
@@
pkill(v, signum)
sighold(SIGINT);
sighold(SIGCHLD);
while (*v) {
sighold(SIGINT);
sighold(SIGCHLD);
while (*v) {
- if (**v == '%') {
- np = pp = pfind(*v);
+ cp = globone(*v);
+ if (*cp == '%') {
+ np = pp = pfind(cp);
do
jobflags |= np->p_flags;
while ((np = np->p_friends) != pp);
do
jobflags |= np->p_flags;
while ((np = np->p_friends) != pp);
@@
-830,7
+834,7
@@
pkill(v, signum)
case SIGTTIN:
case SIGTTOU:
if ((jobflags & PRUNNING) == 0) {
case SIGTTIN:
case SIGTTOU:
if ((jobflags & PRUNNING) == 0) {
- printf("%s: Already stopped\n",
*v
);
+ printf("%s: Already stopped\n",
cp
);
err++;
goto cont;
}
err++;
goto cont;
}
@@
-838,10
+842,10
@@
pkill(v, signum)
killpg(pp->p_jobid, signum);
if (signum == SIGTERM || signum == SIGHUP)
killpg(pp->p_jobid, SIGCONT);
killpg(pp->p_jobid, signum);
if (signum == SIGTERM || signum == SIGHUP)
killpg(pp->p_jobid, SIGCONT);
- } else if (!digit(*
*v
))
+ } else if (!digit(*
cp
))
bferr("Arguments should be jobs or process id's");
else {
bferr("Arguments should be jobs or process id's");
else {
- pid = atoi(
*v
);
+ pid = atoi(
cp
);
if (kill(pid, signum) < 0) {
printf("%d: ", pid);
printf("%s\n", sys_errlist[errno]);
if (kill(pid, signum) < 0) {
printf("%d: ", pid);
printf("%s\n", sys_errlist[errno]);
@@
-852,6
+856,7
@@
pkill(v, signum)
kill(pid, SIGCONT);
}
cont:
kill(pid, SIGCONT);
}
cont:
+ xfree(cp);
v++;
}
sigrelse(SIGCHLD);
v++;
}
sigrelse(SIGCHLD);