| // |
| // 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; |
| } |
| |