auto import from //depot/cupcake/@135843
diff --git a/simulator/app/LogMessage.cpp b/simulator/app/LogMessage.cpp
new file mode 100644
index 0000000..63cb764
--- /dev/null
+++ b/simulator/app/LogMessage.cpp
@@ -0,0 +1,98 @@
+//
+// Copyright 2005 The Android Open Source Project
+//
+// Hold a single log message.
+//
+#include "LogMessage.h"
+#include <assert.h>
+
+/*
+ * Constructor.
+ *
+ * Initializers here aren't necessary, since we can only create one of
+ * these through Create(), which touches every field.
+ */
+LogMessage::LogMessage(void)
+{
+}
+
+/*
+ * Destructor.
+ */
+LogMessage::~LogMessage(void)
+{
+ delete[] mTag;
+ delete[] mMsg;
+}
+
+/*
+ * Create a new LogMessage object, and populate it with the contents of
+ * "*pBundle".
+ */
+/*static*/ LogMessage* LogMessage::Create(const android_LogBundle* pBundle)
+{
+ LogMessage* newMsg = new LogMessage;
+
+ if (newMsg == NULL)
+ return NULL;
+ assert(pBundle != NULL);
+
+ newMsg->mWhen = pBundle->when;
+ newMsg->mPriority = pBundle->priority;
+ newMsg->mPid = pBundle->pid;
+ newMsg->mTag = android::strdupNew(pBundle->tag);
+
+ size_t len = 0;
+ size_t i;
+ for (i=0; i<pBundle->msgCount; i++) len += pBundle->msgVec[i].iov_len;
+ newMsg->mMsg = new char[len+1];
+ char* p = newMsg->mMsg;
+ for (i=0; i<pBundle->msgCount; i++) {
+ memcpy(p, pBundle->msgVec[i].iov_base, pBundle->msgVec[i].iov_len);
+ p += pBundle->msgVec[i].iov_len;
+ }
+ *p = 0;
+
+ newMsg->mRefCnt = 1;
+ newMsg->mInternal = false;
+ newMsg->mFootprint = 8 * sizeof(int) + strlen(newMsg->mTag) +
+ strlen(newMsg->mMsg) + 4;
+ newMsg->mTextCtrlLen = 0;
+ newMsg->mpPrev = NULL;
+ newMsg->mpNext = NULL;
+
+ return newMsg;
+}
+
+/*
+ * Create a new LogMessage object, with a simple message in it.
+ *
+ * Sets "mInternal" so we display it appropriately.
+ */
+/*static*/ LogMessage* LogMessage::Create(const char* msg)
+{
+ LogMessage* newMsg;
+ android_LogBundle bundle;
+
+ assert(msg != NULL);
+
+ memset(&bundle, 0, sizeof(bundle));
+ bundle.when = time(NULL);
+ bundle.priority = ANDROID_LOG_ERROR;
+ bundle.pid = getpid();
+ bundle.tag = "-";
+ iovec iov;
+ iov.iov_base = (void*)msg;
+ iov.iov_len = strlen(msg);
+ bundle.msgVec = &iov;
+ bundle.msgCount = 1;
+
+ newMsg = Create(&bundle);
+
+ if (newMsg != NULL) {
+ newMsg->mInternal = true;
+ }
+
+ return newMsg;
+}
+