75 lines
1.7 KiB
C
75 lines
1.7 KiB
C
/*
|
|
* Copyright 2007 The Android Open Source Project
|
|
*
|
|
* Debug-logging code.
|
|
*/
|
|
#include "Common.h"
|
|
|
|
#include <stdio.h>
|
|
#include <stdarg.h>
|
|
#include <time.h>
|
|
|
|
/*
|
|
* Write a message to our private log file. This is a little awkward since
|
|
* some or all of the system calls we want to use are being intercepted.
|
|
*/
|
|
void wsLog(const char* format, ...)
|
|
{
|
|
#if defined(HAVE_LOCALTIME_R)
|
|
struct tm tmBuf;
|
|
#endif
|
|
struct tm* ptm;
|
|
time_t now;
|
|
char timeBuf[32];
|
|
char prefixBuf[64];
|
|
int prefixLen;
|
|
char msgBuf[256];
|
|
int msgLen;
|
|
|
|
if (gWrapSim.logFd < 0)
|
|
return;
|
|
|
|
/*
|
|
* Create a prefix with a timestamp.
|
|
*/
|
|
now = time(NULL);
|
|
#if defined(HAVE_LOCALTIME_R)
|
|
ptm = localtime_r(&now, &tmBuf);
|
|
#else
|
|
ptm = localtime(&now);
|
|
#endif
|
|
//strftime(timeBuf, sizeof(timeBuf), "%m-%d %H:%M:%S", ptm);
|
|
strftime(timeBuf, sizeof(timeBuf), "%H:%M:%S", ptm);
|
|
|
|
prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%s %5d ",
|
|
timeBuf, (int) getpid());
|
|
|
|
/*
|
|
* Format the message into a buffer.
|
|
*/
|
|
va_list args;
|
|
|
|
va_start(args, format);
|
|
msgLen = vsnprintf(msgBuf, sizeof(msgBuf), format, args);
|
|
va_end(args);
|
|
|
|
/* if we overflowed, trim and annotate */
|
|
if (msgLen >= (int) sizeof(msgBuf)) {
|
|
msgBuf[sizeof(msgBuf)-2] = '!';
|
|
msgBuf[sizeof(msgBuf)-1] = '\n';
|
|
msgLen = sizeof(msgBuf);
|
|
}
|
|
|
|
/*
|
|
* Write the whole thing in one shot. The log file was opened with
|
|
* O_APPEND so we don't have to worry about clashes.
|
|
*/
|
|
struct iovec logVec[2];
|
|
logVec[0].iov_base = prefixBuf;
|
|
logVec[0].iov_len = prefixLen;
|
|
logVec[1].iov_base = msgBuf;
|
|
logVec[1].iov_len = msgLen;
|
|
(void) _ws_writev(gWrapSim.logFd, logVec, 2);
|
|
}
|
|
|