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; } } |