1. Fix not to append log always.
When launch emulator, remove existing log data.
2. Not to call fopen() every logging time.
3. Not to call fopen() again, when fail logging.
(case of deleting log file)
4. Remove unused functions.
Change-Id: If07b9909e26b293e7cafa7ae6f2bba17a61b5bf5
Signed-off-by: Munkyu Im <munkyu.im@samsung.com>
#include "osutil.h"
static char debugchfile[512] = {0, };
+static int g_fd = STDOUT_FILENO;
#ifdef _WIN32
static HANDLE handle;
#endif
return default_flags;
}
-/* set the flags to use for a given channel; return 0 if the channel is not available to set */
-int _dbg_set_channel_flags(struct _debug_channel *channel,
- unsigned char set, unsigned char clear)
-{
- if (nb_debug_options == -1) {
- debug_init();
- }
-
- if (nb_debug_options) {
- struct _debug_channel *opt;
-
- /* first set for multi channel */
- opt = bsearch(channel->multiname,
- debug_options,
- nb_debug_options,
- sizeof(debug_options[0]), cmp_name);
- if (opt) {
- opt->flags = (opt->flags & ~clear) | set;
- return 1;
- }
-
- opt = bsearch(channel->name,
- debug_options,
- nb_debug_options,
- sizeof(debug_options[0]), cmp_name);
- if (opt) {
- opt->flags = (opt->flags & ~clear) | set;
- return 1;
- }
- }
-
- return 0;
-}
-
/* add a new debug option at the end of the option list */
static void add_option(const char *name, unsigned char set, unsigned char clear)
{
char *debug = NULL;
FILE *fp = NULL;
char *tmp = NULL;
+ int open_flags = O_RDWR | O_CREAT | O_TRUNC;
if (nb_debug_options != -1) {
return; /* already initialized */
}
- nb_debug_options = 0;
-
#if 0
strcpy(debugchfile, get_etc_path());
strcat(debugchfile, "/DEBUGCH");
if (tmp != NULL) {
free(tmp);
}
-}
-
-/* allocate some tmp string space */
-/* FIXME: this is not 100% thread-safe */
-char *get_dbg_temp_buffer(size_t size)
-{
- static char *list[32];
- static int pos;
- char *ret;
- int idx;
-
- idx = interlocked_xchg_add(&pos, 1) % (sizeof(list) / sizeof(list[0]));
-
- if ((ret = realloc(list[idx], size))) {
- list[idx] = ret;
- }
-
- return ret;
-}
-
-/* release unused part of the buffer */
-void release_dbg_temp_buffer(char *buffer, size_t size)
-{
- /* don't bother doing anything */
- (void)(buffer);
- (void)(size);
-}
-
-static int dbg_vprintf(const char *format, va_list args)
-{
- char tmp[MSGSIZE_MAX] = { 0, };
- char txt[MSGSIZE_MAX] = { 0, };
-
- FILE *fp;
- // lock
- int ret = vsnprintf(tmp, MSGSIZE_MAX, format, args);
-
- tmp[MSGSIZE_MAX - 2] = '\n';
- tmp[MSGSIZE_MAX - 1] = 0;
-
- sprintf(txt, "%s", tmp);
-
- // unlock
- if ((fp = fopen(log_path, "a+")) == NULL) {
- fprintf(stdout, "Emulator can't open.\n"
- "Please check if "
- "this binary file is running on the right path.\n");
- exit(1);
- }
-
- fputs(txt, fp);
- fclose(fp);
-
- return ret;
-}
-
-int dbg_printf(const char *format, ...)
-{
- int ret;
- va_list valist;
-
- va_start(valist, format);
- ret = dbg_vprintf(format, valist);
- va_end(valist);
-
- return ret;
-}
-
-int dbg_printf_nonewline(const char *format, ...)
-{
- int ret;
- va_list valist;
-
- va_start(valist, format);
- ret = dbg_vprintf(format, valist);
- va_end(valist);
-
- return ret;
-}
-
-/* printf with temp buffer allocation */
-const char *dbg_sprintf(const char *format, ...)
-{
- static const int max_size = 200;
- char *ret;
- int len;
- va_list valist;
-
- va_start(valist, format);
- ret = get_dbg_temp_buffer(max_size);
- len = vsnprintf(ret, max_size, format, valist);
-
- if (len == -1 || len >= max_size) {
- ret[max_size-1] = 0;
- } else {
- release_dbg_temp_buffer(ret, len + 1);
+ if(log_path[0] != '\0') {
+ g_fd = qemu_open(log_path, open_flags, 0666);
+ if (g_fd < 0) {
+ fprintf(stderr, "Can't open logfile: %s\n", log_path);
+ exit(1);
+ }
}
- va_end(valist);
-
- return ret;
+ nb_debug_options = 0;
}
int dbg_log(enum _debug_class cls, struct _debug_channel *channel,
int ret_write = 0;
char buf_msg[2048];
va_list valist;
- int open_flags;
- int fd;
if (!(_dbg_get_channel_flags(channel) & (1 << cls))) {
return -1;
}
ret += snprintf(buf_msg, sizeof(buf_msg),"%s [%s:%s",
- get_timeofday(), debug_classes[cls], channel->name);
+ get_timeofday(), debug_classes[cls], channel->name);
if (*channel->multiname) {
ret += snprintf(buf_msg + ret, sizeof(buf_msg) - ret, ":%s] ", channel->multiname);
ret += vsnprintf(buf_msg + ret, sizeof(buf_msg) - ret, format, valist);
va_end(valist);
- // If "log_path" is not set, we use "stdout".
- if (log_path[0] == '\0') {
- fprintf(stdout, "%s", buf_msg);
- return ret;
- }
-
- open_flags = O_RDWR | O_APPEND | O_BINARY | O_CREAT;
+ ret_write = qemu_write_full(g_fd, buf_msg, ret);
- fd = qemu_open(log_path, open_flags, 0666);
- if (fd < 0) {
- fprintf(stderr, "Can't open logfile: %s\n", log_path);
- /* commented out for prevent shutdown when log directory is removed on runtime. */
- //exit(1);
- return -1;
- }
-
- ret_write = qemu_write_full(fd, buf_msg, ret);
- if (ret_write != ret) {
- // TODO: error handling...
- }
- close(fd);
+ return ret_write;
- return ret;
}
void assert_fail(char *exp, const char *file, int line)
#define _DBG_LOG(args...) \
dbg_log(__dbcl, (struct _debug_channel *)(__dbch), args); } }while(0)
-/*
-
-#define __DPRINTF(dbcl,dbch) \
- (!__GET_DEBUGGING(dbcl,(dbch)) || \
- (dbg_log(__DBCL##dbcl,(dbch), "") == -1)) ? \
-(void)0 : (void)dbg_printf
-*/
extern unsigned char _dbg_get_channel_flags(struct _debug_channel *channel);
-extern int _dbg_set_channel_flags(struct _debug_channel *channel,
- unsigned char set, unsigned char clear);
-extern const char *dbg_sprintf(const char *format, ...);
-extern int dbg_printf(const char *format, ...);
-extern int dbg_printf_nonewline(const char *format, ...);
extern int dbg_log(enum _debug_class cls, struct _debug_channel *ch,
const char *format, ...);
-extern char *get_dbg_temp_buffer(size_t size);
-extern void release_dbg_temp_buffer(char *buffer, size_t size);
-
#ifndef TRACE
#define TRACE __DPRINTF(_TRACE,_dbch___default)
#define TRACE_(ch) __DPRINTF(_TRACE,&_dbch_##ch)
#endif
-#define TRACE_ON(ch) __IS_DEBUG_ON(_TRACE,&_dbch_##ch)
#ifndef WARN
#define WARN __DPRINTF(_WARN,_dbch___default)
#define WARN_(ch) __DPRINTF(_WARN,&_dbch_##ch)
#endif
-#define WARN_ON(ch) __IS_DEBUG_ON(_WARN,&_dbch_##ch)
#ifndef FIXME
#define FIXME __DPRINTF(_FIXME,_dbch___default)
#define FIXME_(ch) __DPRINTF(_FIXME,&_dbch_##ch)
#endif
-#define FIXME_ON(ch) __IS_DEBUG_ON(_FIXME,&_dbch_##ch)
#undef ERR
#define ERR __DPRINTF(_ERR,_dbch___default)
#define ERR_(ch) __DPRINTF(_ERR,&_dbch_##ch)
-#define ERR_ON(ch) __IS_DEBUG_ON(_ERR,&_dbch_##ch)
#ifndef INFO
#define INFO __DPRINTF(_INFO,_dbch___default)
#define INFO_(ch) __DPRINTF(_INFO,&_dbch_##ch)
#endif
-#define INFO_ON(ch) __IS_DEBUG_ON(_INFO,&_dbch_##ch)
#define DECLARE_DEBUG_CHANNEL(ch) \
static struct _debug_channel _dbch_##ch = { ~0, #ch, ""};
static struct _debug_channel _dbch_##ch = { ~0, #ch , #chm}; \
static struct _debug_channel * const _dbch___default = &_dbch_##ch
-#define DPRINTF dbg_printf
-#define MESSAGE dbg_printf
-
void assert_fail(char *exp, const char *file, int line);
#define ASSERT(exp) if (exp) ; \
} else {
goto injector_send;
}
- TRACE("status : %s", data);
+ TRACE("status : %s\n", data);
send_status_injector_ntf(MSG_TYPE_SENSOR, 6, action, data);
msgproc_injector_ans(ccli, cmd, true);
return true;
if (msg->has_data && msg->data.len > 0)
{
- TRACE("recv from nfc injector: %s, %z", msg->has_data, msg->data.len);
+ TRACE("recv from nfc injector: %s, %z\n", msg->has_data, msg->data.len);
print_binary(data, datalen);
}
const char* ijdata = (data + catsize + 2 + 1 + 1);
const char *encoded_ijdata = "";
- TRACE("<< header cat = %s, length = %d, action=%d, group=%d", cat, length,
+ TRACE("<< header cat = %s, length = %d, action=%d, group=%d\n", cat, length,
action, group);
QDict* obj_header = qdict_new();
const char* ijdata = (data + catsize + 2 + 1 + 1);
- TRACE("<< header cat = %s, length = %d, action=%d, group=%d", cat, length,action, group);
+ TRACE("<< header cat = %s, length = %d, action=%d, group=%d\n", cat, length,action, group);
ECS__Master master = ECS__MASTER__INIT;
ECS__InjectorNtf ntf = ECS__INJECTOR_NTF__INIT;
const char* ijdata = (data + catsize + 2 + 1 + 1);
- TRACE("<< header cat = %s, length = %d, action=%d, group=%d", cat, length,action, group);
+ TRACE("<< header cat = %s, length = %d, action=%d, group=%d\n", cat, length,action, group);
ECS__Master master = ECS__MASTER__INIT;
ECS__DeviceNtf ntf = ECS__DEVICE_NTF__INIT;
ntf.data.len = length;
memcpy(ntf.data.data, ijdata, length);
- TRACE("data = %s, length = %hu", ijdata, length);
+ TRACE("data = %s, length = %hu\n", ijdata, length);
}
master.type = ECS__MASTER__TYPE__DEVICE_NTF;
memset(cat, 0, catsize + 1);
print_binary((char*)msg->buf, msg->use);
- TRACE("id: %02x, type: %02x, use: %d", msg->client_id, msg->client_type, msg->use);
+ TRACE("id: %02x, type: %02x, use: %d\n", msg->client_id, msg->client_type, msg->use);
clii = find_client(msg->client_id, msg->client_type);
if (clii) {
if(clii->client_type == TYPE_SIMUL_NFC) {
} else if (clii->client_type == TYPE_ECP) {
strncpy(cat, MSG_TYPE_SIMUL_NFC, 9);
}else {
- ERR("cannot find type! : %d", clii->client_type);
+ ERR("cannot find type! : %d\n", clii->client_type);
}
- TRACE("header category = %s", cat);
+ TRACE("header category = %s\n", cat);
}
else {
ERR("cannot find client!\n");
ntf.data.len = NFC_MAX_BUF_SIZE;
memcpy(ntf.data.data, msg->buf, NFC_MAX_BUF_SIZE);
- printf("send to nfc injector: ");
+ TRACE("send to nfc injector: \n");
master.type = ECS__MASTER__TYPE__NFC_NTF;
master.nfc_ntf = &ntf;
ERR("failed to get sdcard path!!\n");
}
} else if(ret == '2'){
- TRACE("sdcard status 2 bypass" );
+ TRACE("sdcard status 2 bypass\n" );
}else {
ERR("!!! unknown command : %c\n", ret);
}