diff options
| author | Tharre <tharre3@gmail.com> | 2015-01-09 08:53:58 +0100 | 
|---|---|---|
| committer | Tharre <tharre3@gmail.com> | 2015-01-09 08:53:58 +0100 | 
| commit | a5277a4901ffa93e8b7996b9e3dd030b72551210 (patch) | |
| tree | 41ecbab47908f0a230a55163ea011cfeda38e298 /src | |
| parent | 874c529ecb640f7541dc122e584376fd2acdec8d (diff) | |
| download | redo-a5277a4901ffa93e8b7996b9e3dd030b72551210.tar.gz redo-a5277a4901ffa93e8b7996b9e3dd030b72551210.tar.xz redo-a5277a4901ffa93e8b7996b9e3dd030b72551210.zip | |
Randomize argument processing order
Diffstat (limited to 'src')
| -rw-r--r-- | src/redo.c | 13 | 
1 files changed, 10 insertions, 3 deletions
| @@ -44,7 +44,6 @@ void prepare_env() {  	free(cwd);  	/* set REDO_MAGIC */ -	srand(time(NULL));  	char magic_str[digits(UINT_MAX) + 1];  	sprintf(magic_str, "%u", rand());  	if (setenv("REDO_MAGIC", magic_str, 0)) @@ -52,6 +51,7 @@ void prepare_env() {  }  int main(int argc, char *argv[]) { +	srand(time(NULL));  	char *argv_base = xbasename(argv[0]);  	if (!strcmp(argv_base, "redo")) { @@ -66,6 +66,7 @@ int main(int argc, char *argv[]) {  		char *parent = getenv("REDO_PARENT_TARGET");  		char ident; +		char **temp;  		if      (!strcmp(argv_base, "redo-ifchange"))  			ident = 'c';  		else if (!strcmp(argv_base, "redo-ifcreate")) @@ -82,8 +83,14 @@ int main(int argc, char *argv[]) {  			add_dep(parent, parent, ident);  		else  			for (int i = 1; i < argc; ++i) { -				update_target(argv[i], ident); -				add_dep(argv[i], parent, ident); +				do { +					temp = &argv[rand() % (argc-1) + 1]; +				} while (!*temp); + +				update_target(*temp, ident); +				add_dep(*temp, parent, ident); + +				*temp = NULL;  			}  	} | 
