99 lines
2.1 KiB
C++
99 lines
2.1 KiB
C++
//
|
|
// 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;
|
|
}
|
|
|