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