some small fixes
This commit is contained in:
parent
01252cb592
commit
78237f3ef8
2 changed files with 18 additions and 4 deletions
|
@ -5,15 +5,22 @@ system(str)
|
||||||
char *str;
|
char *str;
|
||||||
{
|
{
|
||||||
int pid, exitstatus, waitval;
|
int pid, exitstatus, waitval;
|
||||||
|
int (*sigint)(), (*sigquit)();
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if ((pid = fork()) < 0) return -1;
|
if ((pid = fork()) < 0) return -1; /* How do we distinguish this
|
||||||
|
from exit status -1?
|
||||||
|
*/
|
||||||
if (pid == 0) {
|
if (pid == 0) {
|
||||||
for (i = 3; i <= 20; i++) close(i);
|
for (i = 3; i <= 20; i++) close(i);
|
||||||
execl("/bin/sh", "sh", "-c", str, (char *) 0);
|
execl("/bin/sh", "sh", "-c", str, (char *) 0);
|
||||||
/* get here if execl fails ... */
|
/* get here if execl fails ... */
|
||||||
_exit(127); /* see manual page */
|
_exit(127); /* see manual page */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sigint = signal( SIGINT, SIG_IGN );
|
||||||
|
sigquit = signal( SIGQUIT, SIG_IGN );
|
||||||
|
|
||||||
while ((waitval = wait(&exitstatus)) != pid) {
|
while ((waitval = wait(&exitstatus)) != pid) {
|
||||||
if (waitval == -1) break;
|
if (waitval == -1) break;
|
||||||
}
|
}
|
||||||
|
@ -21,5 +28,9 @@ system(str)
|
||||||
/* no child ??? or maybe interrupted ??? */
|
/* no child ??? or maybe interrupted ??? */
|
||||||
exitstatus = -1;
|
exitstatus = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
signal( SIGINT, sigint );
|
||||||
|
signal( SIGQUIT, sigquit );
|
||||||
|
|
||||||
return exitstatus;
|
return exitstatus;
|
||||||
}
|
}
|
||||||
|
|
|
@ -145,7 +145,8 @@ char *id;
|
||||||
return(-1);
|
return(-1);
|
||||||
while (*++cp != ':')
|
while (*++cp != ':')
|
||||||
;
|
;
|
||||||
for (++cp ; *cp ; cp++) {
|
while (*cp) {
|
||||||
|
cp++;
|
||||||
while (ISSPACE(*cp))
|
while (ISSPACE(*cp))
|
||||||
cp++;
|
cp++;
|
||||||
if (strncmp(cp, id, CAPABLEN) == 0) {
|
if (strncmp(cp, id, CAPABLEN) == 0) {
|
||||||
|
@ -178,7 +179,8 @@ char *id;
|
||||||
return(-1);
|
return(-1);
|
||||||
while (*++cp != ':')
|
while (*++cp != ':')
|
||||||
;
|
;
|
||||||
for (++cp ; *cp ; cp++) {
|
while (*cp) {
|
||||||
|
cp++;
|
||||||
while (ISSPACE(*cp))
|
while (ISSPACE(*cp))
|
||||||
cp++;
|
cp++;
|
||||||
if (strncmp(cp, id, CAPABLEN) == 0)
|
if (strncmp(cp, id, CAPABLEN) == 0)
|
||||||
|
@ -207,7 +209,8 @@ char **area;
|
||||||
return(NULL);
|
return(NULL);
|
||||||
while (*++cp != ':')
|
while (*++cp != ':')
|
||||||
;
|
;
|
||||||
for (++cp ; *cp ; cp++) {
|
while (*cp) {
|
||||||
|
cp++;
|
||||||
while (ISSPACE(*cp))
|
while (ISSPACE(*cp))
|
||||||
cp++;
|
cp++;
|
||||||
if (strncmp(cp, id, CAPABLEN) == 0) {
|
if (strncmp(cp, id, CAPABLEN) == 0) {
|
||||||
|
|
Loading…
Reference in a new issue