1 // 2 // Copyright 2005 The Android Open Source Project 3 // 4 // Hold a single log message. 5 // 6 #include "LogMessage.h" 7 #include <assert.h> 8 9 /* 10 * Constructor. 11 * 12 * Initializers here aren't necessary, since we can only create one of 13 * these through Create(), which touches every field. 14 */ LogMessage(void)15LogMessage::LogMessage(void) 16 { 17 } 18 19 /* 20 * Destructor. 21 */ ~LogMessage(void)22LogMessage::~LogMessage(void) 23 { 24 delete[] mTag; 25 delete[] mMsg; 26 } 27 28 /* 29 * Create a new LogMessage object, and populate it with the contents of 30 * "*pBundle". 31 */ Create(const android_LogBundle * pBundle)32/*static*/ LogMessage* LogMessage::Create(const android_LogBundle* pBundle) 33 { 34 LogMessage* newMsg = new LogMessage; 35 36 if (newMsg == NULL) 37 return NULL; 38 assert(pBundle != NULL); 39 40 newMsg->mWhen = pBundle->when; 41 newMsg->mPriority = pBundle->priority; 42 newMsg->mPid = pBundle->pid; 43 newMsg->mTag = android::strdupNew(pBundle->tag); 44 45 size_t len = 0; 46 size_t i; 47 for (i=0; i<pBundle->msgCount; i++) len += pBundle->msgVec[i].iov_len; 48 newMsg->mMsg = new char[len+1]; 49 char* p = newMsg->mMsg; 50 for (i=0; i<pBundle->msgCount; i++) { 51 memcpy(p, pBundle->msgVec[i].iov_base, pBundle->msgVec[i].iov_len); 52 p += pBundle->msgVec[i].iov_len; 53 } 54 *p = 0; 55 56 newMsg->mRefCnt = 1; 57 newMsg->mInternal = false; 58 newMsg->mFootprint = 8 * sizeof(int) + strlen(newMsg->mTag) + 59 strlen(newMsg->mMsg) + 4; 60 newMsg->mTextCtrlLen = 0; 61 newMsg->mpPrev = NULL; 62 newMsg->mpNext = NULL; 63 64 return newMsg; 65 } 66 67 /* 68 * Create a new LogMessage object, with a simple message in it. 69 * 70 * Sets "mInternal" so we display it appropriately. 71 */ Create(const char * msg)72/*static*/ LogMessage* LogMessage::Create(const char* msg) 73 { 74 LogMessage* newMsg; 75 android_LogBundle bundle; 76 77 assert(msg != NULL); 78 79 memset(&bundle, 0, sizeof(bundle)); 80 bundle.when = time(NULL); 81 bundle.priority = ANDROID_LOG_ERROR; 82 bundle.pid = getpid(); 83 bundle.tag = "-"; 84 iovec iov; 85 iov.iov_base = (void*)msg; 86 iov.iov_len = strlen(msg); 87 bundle.msgVec = &iov; 88 bundle.msgCount = 1; 89 90 newMsg = Create(&bundle); 91 92 if (newMsg != NULL) { 93 newMsg->mInternal = true; 94 } 95 96 return newMsg; 97 } 98 99