Implement -E eofstr for xargs(1)
This commit is contained in:
		
							
								
								
									
										12
									
								
								xargs.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								xargs.c
									
									
									
									
									
								
							| @@ -27,12 +27,13 @@ static char *argb; | ||||
| static size_t argbsz = 1; | ||||
| static size_t argbpos; | ||||
| static int nerrors = 0; | ||||
| static char *eofstr; | ||||
| static int rflag = 0; | ||||
|  | ||||
| static void | ||||
| usage(void) | ||||
| { | ||||
| 	eprintf("usage: %s [-r] [cmd [arg...]]\n", argv0); | ||||
| 	eprintf("usage: %s [-r] [-E eofstr] [cmd [arg...]]\n", argv0); | ||||
| } | ||||
|  | ||||
| int | ||||
| @@ -46,6 +47,9 @@ main(int argc, char *argv[]) | ||||
| 	case 'r': | ||||
| 		rflag = 1; | ||||
| 		break; | ||||
| 	case 'E': | ||||
| 		eofstr = EARGF(usage()); | ||||
| 		break; | ||||
| 	default: | ||||
| 		usage(); | ||||
| 	} ARGEND; | ||||
| @@ -186,9 +190,8 @@ poparg(void) | ||||
| 	while ((ch = inputc()) != EOF) { | ||||
| 		switch (ch) { | ||||
| 		case ' ': case '\t': case '\n': | ||||
| 			fillbuf('\0'); | ||||
| 			deinputc(ch); | ||||
| 			return argb; | ||||
| 			goto out; | ||||
| 		case '\'': | ||||
| 			if (parsequote('\'') == -1) | ||||
| 				enprintf(EXIT_FAILURE, | ||||
| @@ -209,8 +212,11 @@ poparg(void) | ||||
| 			break; | ||||
| 		} | ||||
| 	} | ||||
| out: | ||||
| 	if (argbpos > 0) { | ||||
| 		fillbuf('\0'); | ||||
| 		if (eofstr && strcmp(argb, eofstr) == 0) | ||||
| 			return NULL; | ||||
| 		return argb; | ||||
| 	} | ||||
| 	return NULL; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user