diff options
author | Evan Martin <martine@danga.com> | 2013-05-23 21:15:55 (GMT) |
---|---|---|
committer | Evan Martin <martine@danga.com> | 2013-05-23 21:15:55 (GMT) |
commit | 6eeb53f6b8d02ccbcb1e006ad3632407831bc495 (patch) | |
tree | 8d8f1b276eaf5eed56ce02107e2c9f2d98d55846 /src/ninja.cc | |
parent | 8fc51490fbb7b3dabed45f4ca5d791bd3dd00b5b (diff) | |
parent | e92098f312eaecd4c89cd1d2f7d6445732950ab3 (diff) | |
download | Ninja-6eeb53f6b8d02ccbcb1e006ad3632407831bc495.zip Ninja-6eeb53f6b8d02ccbcb1e006ad3632407831bc495.tar.gz Ninja-6eeb53f6b8d02ccbcb1e006ad3632407831bc495.tar.bz2 |
Merge pull request #578 from pinotree/remove-path-max
do not unconditionally use PATH_MAX with getcwd
Diffstat (limited to 'src/ninja.cc')
-rw-r--r-- | src/ninja.cc | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/ninja.cc b/src/ninja.cc index 947e352..7ee40df 100644 --- a/src/ninja.cc +++ b/src/ninja.cc @@ -495,9 +495,13 @@ void EncodeJSONString(const char *str) { int ToolCompilationDatabase(Globals* globals, int argc, char* argv[]) { bool first = true; - char cwd[PATH_MAX]; + vector<char> cwd; - if (!getcwd(cwd, PATH_MAX)) { + do { + cwd.resize(cwd.size() + 1024); + errno = 0; + } while (!getcwd(&cwd[0], cwd.size()) && errno == ERANGE); + if (errno != 0 && errno != ERANGE) { Error("cannot determine working directory: %s", strerror(errno)); return 1; } @@ -511,7 +515,7 @@ int ToolCompilationDatabase(Globals* globals, int argc, char* argv[]) { putchar(','); printf("\n {\n \"directory\": \""); - EncodeJSONString(cwd); + EncodeJSONString(&cwd[0]); printf("\",\n \"command\": \""); EncodeJSONString((*e)->EvaluateCommand().c_str()); printf("\",\n \"file\": \""); |