about summary refs log tree commit diff
path: root/src/libstore/build.cc
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2016-04-25T17·18+0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2016-04-25T17·18+0200
commitcc804d0dc6c2c565ce9df63ae8557e2696eb2d59 (patch)
treea87248ef035e5b89418aac77db311c668e58bc6d /src/libstore/build.cc
parentca9de88a51cc33f76c54f7f81ce7fbc318bcb848 (diff)
Handle carriage return
Diffstat (limited to 'src/libstore/build.cc')
-rw-r--r--src/libstore/build.cc19
1 files changed, 7 insertions, 12 deletions
diff --git a/src/libstore/build.cc b/src/libstore/build.cc
index 3830d7a671e8..97433821af58 100644
--- a/src/libstore/build.cc
+++ b/src/libstore/build.cc
@@ -2935,18 +2935,13 @@ void DerivationGoal::handleChildOutput(int fd, const string & data)
             return;
         }
 
-        for (size_t pos = 0; true; ) {
-            auto newline = data.find('\n', pos);
-
-            if (newline == std::string::npos) {
-                currentLogLine.append(data, pos, std::string::npos);
-                break;
-            }
-
-            currentLogLine.append(data, pos, newline - pos);
-            flushLine();
-            pos = newline + 1;
-        }
+        for (auto c : data)
+            if (c == '\r')
+                currentLogLine.clear(); // FIXME: not quite right
+            else if (c == '\n')
+                flushLine();
+            else
+                currentLogLine += c;
 
         if (bzLogFile) {
             int err;