Record the trimmed cmd string for logs

The over the wire command includes a \0 that mangles log messages.
bug:6149176

Change-Id: I77d4e443f1966bff060f1b97570851f7549fee8e
diff --git a/services/java/com/android/server/NativeDaemonConnector.java b/services/java/com/android/server/NativeDaemonConnector.java
index 6593a0f..0b5eaff 100644
--- a/services/java/com/android/server/NativeDaemonConnector.java
+++ b/services/java/com/android/server/NativeDaemonConnector.java
@@ -200,17 +200,15 @@
 
     /**
      * Make command for daemon, escaping arguments as needed.
-     *
-     * @return the final command.
      */
-    private StringBuilder makeCommand(String cmd, Object... args)
+    private void makeCommand(StringBuilder builder, String cmd, Object... args)
             throws NativeDaemonConnectorException {
         // TODO: eventually enforce that cmd doesn't contain arguments
         if (cmd.indexOf('\0') >= 0) {
             throw new IllegalArgumentException("unexpected command: " + cmd);
         }
 
-        final StringBuilder builder = new StringBuilder(cmd);
+        builder.append(cmd);
         for (Object arg : args) {
             final String argString = String.valueOf(arg);
             if (argString.indexOf('\0') >= 0) {
@@ -220,34 +218,6 @@
             builder.append(' ');
             appendEscaped(builder, argString);
         }
-
-        return builder;
-    }
-
-    private int sendCommand(StringBuilder builder)
-            throws NativeDaemonConnectorException {
-
-        int sequenceNumber = mSequenceNumber.incrementAndGet();
-
-        builder.insert(0, Integer.toString(sequenceNumber) + " ");
-
-        log("SND -> {" + builder.toString() + "}");
-
-        builder.append('\0');
-
-        synchronized (mDaemonLock) {
-            if (mOutputStream == null) {
-                throw new NativeDaemonConnectorException("missing output stream");
-            } else {
-                try {
-                    mOutputStream.write(builder.toString().getBytes(Charsets.UTF_8));
-                } catch (IOException e) {
-                    throw new NativeDaemonConnectorException("problem sending command", e);
-                }
-            }
-        }
-
-        return sequenceNumber;
     }
 
     /**
@@ -325,25 +295,46 @@
     public NativeDaemonEvent[] execute(int timeout, String cmd, Object... args)
             throws NativeDaemonConnectorException {
         final ArrayList<NativeDaemonEvent> events = Lists.newArrayList();
-        final StringBuilder sentCommand = makeCommand(cmd, args);
-        final int cmdNumber = sendCommand(sentCommand);
+
+        final int sequenceNumber = mSequenceNumber.incrementAndGet();
+        final StringBuilder cmdBuilder =
+                new StringBuilder(Integer.toString(sequenceNumber)).append(' ');
+
+        makeCommand(cmdBuilder, cmd, args);
+
+        final String logCmd = cmdBuilder.toString(); /* includes cmdNum, cmd, args */
+        log("SND -> {" + logCmd + "}");
+
+        cmdBuilder.append('\0');
+        final String sentCmd = cmdBuilder.toString(); /* logCmd + \0 */
+
+        synchronized (mDaemonLock) {
+            if (mOutputStream == null) {
+                throw new NativeDaemonConnectorException("missing output stream");
+            } else {
+                try {
+                    mOutputStream.write(sentCmd.getBytes(Charsets.UTF_8));
+                } catch (IOException e) {
+                    throw new NativeDaemonConnectorException("problem sending command", e);
+                }
+            }
+        }
 
         NativeDaemonEvent event = null;
-        cmd = sentCommand.toString();
         do {
-            event = mResponseQueue.remove(cmdNumber, timeout, cmd);
+            event = mResponseQueue.remove(sequenceNumber, timeout, sentCmd);
             if (event == null) {
-                loge("timed-out waiting for response to " + cmdNumber + " " + cmd);
-                throw new NativeDaemonFailureException(cmd, event);
+                loge("timed-out waiting for response to " + logCmd);
+                throw new NativeDaemonFailureException(logCmd, event);
             }
             events.add(event);
         } while (event.isClassContinue());
 
         if (event.isClassClientError()) {
-            throw new NativeDaemonArgumentException(cmd, event);
+            throw new NativeDaemonArgumentException(logCmd, event);
         }
         if (event.isClassServerError()) {
-            throw new NativeDaemonFailureException(cmd, event);
+            throw new NativeDaemonFailureException(logCmd, event);
         }
 
         return events.toArray(new NativeDaemonEvent[events.size()]);