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;
 | 
			
		||||
{
 | 
			
		||||
	int pid, exitstatus, waitval;
 | 
			
		||||
	int (*sigint)(), (*sigquit)();
 | 
			
		||||
	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) {
 | 
			
		||||
		for (i = 3; i <= 20; i++) close(i);
 | 
			
		||||
		execl("/bin/sh", "sh", "-c", str, (char *) 0);
 | 
			
		||||
		/* get here if execl fails ... */
 | 
			
		||||
		_exit(127);	/* see manual page */
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	sigint  = signal( SIGINT,  SIG_IGN );
 | 
			
		||||
	sigquit = signal( SIGQUIT, SIG_IGN );
 | 
			
		||||
 | 
			
		||||
	while ((waitval = wait(&exitstatus)) != pid) {
 | 
			
		||||
		if (waitval == -1) break;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -21,5 +28,9 @@ system(str)
 | 
			
		|||
		/* no child ??? or maybe interrupted ??? */
 | 
			
		||||
		exitstatus = -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	signal( SIGINT,  sigint );
 | 
			
		||||
	signal( SIGQUIT, sigquit );
 | 
			
		||||
 | 
			
		||||
	return exitstatus;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -145,7 +145,8 @@ char	*id;
 | 
			
		|||
		return(-1);
 | 
			
		||||
	while (*++cp != ':')
 | 
			
		||||
		;
 | 
			
		||||
	for (++cp ; *cp ; cp++) {
 | 
			
		||||
	while (*cp) {
 | 
			
		||||
		cp++;
 | 
			
		||||
		while (ISSPACE(*cp))
 | 
			
		||||
			cp++;
 | 
			
		||||
		if (strncmp(cp, id, CAPABLEN) == 0) {
 | 
			
		||||
| 
						 | 
				
			
			@ -178,7 +179,8 @@ char	*id;
 | 
			
		|||
		return(-1);
 | 
			
		||||
	while (*++cp != ':')
 | 
			
		||||
		;
 | 
			
		||||
	for (++cp ; *cp ; cp++) {
 | 
			
		||||
	while (*cp) {
 | 
			
		||||
		cp++;
 | 
			
		||||
		while (ISSPACE(*cp))
 | 
			
		||||
			cp++;
 | 
			
		||||
		if (strncmp(cp, id, CAPABLEN) == 0)
 | 
			
		||||
| 
						 | 
				
			
			@ -207,7 +209,8 @@ char	**area;
 | 
			
		|||
		return(NULL);
 | 
			
		||||
	while (*++cp != ':')
 | 
			
		||||
		;
 | 
			
		||||
	for (++cp ; *cp ; cp++) {
 | 
			
		||||
	while (*cp) {
 | 
			
		||||
		cp++;
 | 
			
		||||
		while (ISSPACE(*cp))
 | 
			
		||||
			cp++;
 | 
			
		||||
		if (strncmp(cp, id, CAPABLEN) == 0) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue