diff options
author | Joel Rosdahl <joel@rosdahl.net> | 2019-04-25 21:21:53 +0200 |
---|---|---|
committer | Joel Rosdahl <joel@rosdahl.net> | 2019-04-25 21:21:53 +0200 |
commit | e96d60be2a1c479594b7e4b4e7b0e87f6a374182 (patch) | |
tree | 0c5f0ee7602ae36bded50a6f007d0b0e7dafe4fc | |
parent | 5a84ff25cbc0c43ad46367b89ce053f2111e8cba (diff) | |
download | ccache-e96d60be2a1c479594b7e4b4e7b0e87f6a374182.tar.gz |
Calculate length correctly in win32argvtos
-rw-r--r-- | src/execute.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/execute.c b/src/execute.c index af95a343..3ee09534 100644 --- a/src/execute.c +++ b/src/execute.c @@ -30,7 +30,6 @@ win32argvtos(char *prefix, char **argv, int *length) { int i = 0; int k = 0; - *length = 0; char *arg = prefix ? prefix : argv[i++]; do { int bs = 0; @@ -53,9 +52,9 @@ win32argvtos(char *prefix, char **argv, int *length) char *ptr = malloc(k + 1); char *str = ptr; if (!str) { + *length = 0; return NULL; } - *length = k; i = 0; arg = prefix ? prefix : argv[i++]; @@ -85,6 +84,7 @@ win32argvtos(char *prefix, char **argv, int *length) } while ((arg = argv[i++])); ptr[-1] = '\0'; + *length = ptr - str - 1; return str; } @@ -174,7 +174,7 @@ win32execute(char *path, char **argv, int doreturn, char *tmp_file = format("%s.tmp", path); FILE *fp = create_tmp_file(&tmp_file, "w"); char atfile[MAX_PATH + 3]; - fwrite(args, 1, length - 1, fp); + fwrite(args, 1, length, fp); fclose(fp); if (ferror(fp)) { cc_log("Error writing @file; this command will probably fail: %s", args); |