• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)15 LogMessage::LogMessage(void)
16 {
17 }
18 
19 /*
20  * Destructor.
21  */
~LogMessage(void)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  */
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