From 8d3dfa2c1782e955d2b7796d19dc0d0381596b98 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 16 Dec 2011 21:29:46 +0000 Subject: * Avoid expensive conversions from char arrays to STL strings. --- src/nix-worker/nix-worker.cc | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) (limited to 'src/nix-worker') diff --git a/src/nix-worker/nix-worker.cc b/src/nix-worker/nix-worker.cc index 695e4c38d5d1..85e2105b2757 100644 --- a/src/nix-worker/nix-worker.cc +++ b/src/nix-worker/nix-worker.cc @@ -56,7 +56,7 @@ static void tunnelStderr(const unsigned char * buf, size_t count) if (canSendStderr && myPid == getpid()) { try { writeInt(STDERR_NEXT, to); - writeString(string((char *) buf, count), to); + writeString(buf, count, to); to.flush(); } catch (...) { /* Write failed; that means that the other side is @@ -205,7 +205,7 @@ struct TunnelSink : Sink virtual void operator () (const unsigned char * data, size_t len) { writeInt(STDERR_WRITE, to); - writeString(string((const char *) data, len), to); + writeString(data, len, to); } }; @@ -224,16 +224,11 @@ struct TunnelSource : BufferedSource writeInt(STDERR_READ, to); writeInt(len, to); to.flush(); - string s = readString(from); // !!! inefficient + size_t n = readString(data, len, from); startWork(); - - if (s.empty()) throw EndOfFile("unexpected end-of-file"); - if (s.size() > len) throw Error("client sent too much data"); - - memcpy(data, (const unsigned char *) s.c_str(), s.size()); - - return s.size(); + if (n == 0) throw EndOfFile("unexpected end-of-file"); + return n; } }; -- cgit 1.4.1