auto import from //depot/cupcake/@135843
diff --git a/simulator/wrapsim/Log.c b/simulator/wrapsim/Log.c
new file mode 100644
index 0000000..7edb677
--- /dev/null
+++ b/simulator/wrapsim/Log.c
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2007 The Android Open Source Project
+ *
+ * Debug-logging code.
+ */
+#include "Common.h"
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <time.h>
+
+/*
+ * Write a message to our private log file.  This is a little awkward since
+ * some or all of the system calls we want to use are being intercepted.
+ */
+void wsLog(const char* format, ...)
+{
+#if defined(HAVE_LOCALTIME_R)
+    struct tm tmBuf;
+#endif
+    struct tm* ptm;
+    time_t now;
+    char timeBuf[32];
+    char prefixBuf[64];
+    int prefixLen;
+    char msgBuf[256];
+    int msgLen;
+
+    if (gWrapSim.logFd < 0)
+        return;
+
+    /*
+     * Create a prefix with a timestamp.
+     */
+    now = time(NULL);
+#if defined(HAVE_LOCALTIME_R)
+    ptm = localtime_r(&now, &tmBuf);
+#else
+    ptm = localtime(&now);
+#endif
+    //strftime(timeBuf, sizeof(timeBuf), "%m-%d %H:%M:%S", ptm);
+    strftime(timeBuf, sizeof(timeBuf), "%H:%M:%S", ptm);
+
+    prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%s %5d ",
+        timeBuf, (int) getpid());
+
+    /*
+     * Format the message into a buffer.
+     */
+    va_list args;
+
+    va_start(args, format);
+    msgLen = vsnprintf(msgBuf, sizeof(msgBuf), format, args);
+    va_end(args);
+
+    /* if we overflowed, trim and annotate */
+    if (msgLen >= (int) sizeof(msgBuf)) {
+        msgBuf[sizeof(msgBuf)-2] = '!';
+        msgBuf[sizeof(msgBuf)-1] = '\n';
+        msgLen = sizeof(msgBuf);
+    }
+
+    /*
+     * Write the whole thing in one shot.  The log file was opened with
+     * O_APPEND so we don't have to worry about clashes.
+     */
+    struct iovec logVec[2];
+    logVec[0].iov_base = prefixBuf;
+    logVec[0].iov_len = prefixLen;
+    logVec[1].iov_base = msgBuf;
+    logVec[1].iov_len = msgLen;
+    (void) _ws_writev(gWrapSim.logFd, logVec, 2);
+}
+