diff options
author | Evan Martin <martine@danga.com> | 2012-02-04 22:23:31 (GMT) |
---|---|---|
committer | Evan Martin <martine@danga.com> | 2012-02-04 22:23:31 (GMT) |
commit | ff1c488a51b53c011810a6d8ff7f7565575a8c1c (patch) | |
tree | 9d920a15cfc5f598a84126365a5e5457e0d7535f /src | |
parent | e85613a7204364e22602c92480779e217bb71bbc (diff) | |
parent | 33d3c2d9ae50b3c6142ccfd09b82ed0cbba607ab (diff) | |
download | Ninja-ff1c488a51b53c011810a6d8ff7f7565575a8c1c.zip Ninja-ff1c488a51b53c011810a6d8ff7f7565575a8c1c.tar.gz Ninja-ff1c488a51b53c011810a6d8ff7f7565575a8c1c.tar.bz2 |
Merge pull request #214 from qhuo/onpipeready-fix
Avoid using undefined value in Subprocess::OnPipeReady()
Diffstat (limited to 'src')
-rw-r--r-- | src/subprocess-win32.cc | 5 | ||||
-rw-r--r-- | src/subprocess.h | 1 |
2 files changed, 4 insertions, 2 deletions
diff --git a/src/subprocess-win32.cc b/src/subprocess-win32.cc index e757f7e..c0185e4 100644 --- a/src/subprocess-win32.cc +++ b/src/subprocess-win32.cc @@ -28,7 +28,7 @@ void Win32Fatal(const char* function) { } // anonymous namespace -Subprocess::Subprocess() : child_(NULL) , overlapped_() { +Subprocess::Subprocess() : child_(NULL) , overlapped_(), is_reading_(false) { } Subprocess::~Subprocess() { @@ -130,10 +130,11 @@ void Subprocess::OnPipeReady() { Win32Fatal("GetOverlappedResult"); } - if (bytes) + if (is_reading_ && bytes) buf_.append(overlapped_buf_, bytes); memset(&overlapped_, 0, sizeof(overlapped_)); + is_reading_ = true; if (!::ReadFile(pipe_, overlapped_buf_, sizeof(overlapped_buf_), &bytes, &overlapped_)) { if (GetLastError() == ERROR_BROKEN_PIPE) { diff --git a/src/subprocess.h b/src/subprocess.h index 9828bf4..f355944 100644 --- a/src/subprocess.h +++ b/src/subprocess.h @@ -52,6 +52,7 @@ struct Subprocess { HANDLE pipe_; OVERLAPPED overlapped_; char overlapped_buf_[4 << 10]; + bool is_reading_; #else int fd_; pid_t pid_; |