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;
}