blob: 63cb76445d5984623417c0eeeb9912563dcc3047 [file] [log] [blame]
The Android Open Source Project52d4c302009-03-03 19:29:09 -08001//
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 */
15LogMessage::LogMessage(void)
16{
17}
18
19/*
20 * Destructor.
21 */
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 */
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