Simplify and speed up ReadStdin. No intended behavior change. Bug: none Change-Id: I29767517ff4d0130762ffeaca4483296f58452ea Reviewed-on: https://gn-review.googlesource.com/c/gn/+/6980 Reviewed-by: Scott Graham <scottmg@chromium.org> Commit-Queue: Nico Weber <thakis@chromium.org>
diff --git a/src/gn/string_utils.cc b/src/gn/string_utils.cc index 7f9c6b0..b785e75 100644 --- a/src/gn/string_utils.cc +++ b/src/gn/string_utils.cc
@@ -346,18 +346,11 @@ } std::string ReadStdin() { - static const int kBufferSize = 256; - char buffer[kBufferSize]; + char buffer[4 << 10]; std::string result; - while (true) { - char* input = nullptr; - input = fgets(buffer, kBufferSize, stdin); - if (input == nullptr && feof(stdin)) - return result; - int length = static_cast<int>(strlen(buffer)); - if (length == 0) - return result; - else - result += std::string(buffer, length); - } + size_t len; + while ((len = fread(buffer, 1, sizeof(buffer), stdin)) > 0) + result.append(buffer, len); + // TODO(thakis): Check ferror(stdin)? + return result; }