Home | History | Annotate | Download | only in app
      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  */
     15 LogMessage::LogMessage(void)
     16 {
     17 }
     18 
     19 /*
     20  * Destructor.
     21  */
     22 LogMessage::~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  */
     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  */
     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