summaryrefslogtreecommitdiffstats
path: root/src/ninja.cc
diff options
context:
space:
mode:
authorEvan Martin <martine@danga.com>2013-05-23 21:15:55 (GMT)
committerEvan Martin <martine@danga.com>2013-05-23 21:15:55 (GMT)
commit6eeb53f6b8d02ccbcb1e006ad3632407831bc495 (patch)
tree8d8f1b276eaf5eed56ce02107e2c9f2d98d55846 /src/ninja.cc
parent8fc51490fbb7b3dabed45f4ca5d791bd3dd00b5b (diff)
parente92098f312eaecd4c89cd1d2f7d6445732950ab3 (diff)
downloadNinja-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.cc10
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\": \"");