debugch: Fix logging
authorMunkyu Im <munkyu.im@samsung.com>
Fri, 4 Jul 2014 04:59:57 +0000 (13:59 +0900)
committerMunkyu Im <munkyu.im@samsung.com>
Wed, 9 Jul 2014 07:50:23 +0000 (16:50 +0900)
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>
tizen/src/debug_ch.c
tizen/src/debug_ch.h
tizen/src/ecs/ecs_msg.c

index ea43d45554c20bbac9d8faa377610bf08f3bd931..1f7c164cb9f699dc03564c527a8f572376d7fed2 100644 (file)
@@ -45,6 +45,7 @@
 #include "osutil.h"
 
 static char debugchfile[512] = {0, };
+static int g_fd = STDOUT_FILENO;
 #ifdef _WIN32
 static HANDLE handle;
 #endif
@@ -113,40 +114,6 @@ unsigned char _dbg_get_channel_flags(struct _debug_channel *channel)
     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)
 {
@@ -280,13 +247,12 @@ static void debug_init(void)
     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");
@@ -336,107 +302,15 @@ static void debug_init(void)
     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,
@@ -446,15 +320,13 @@ 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);
@@ -466,29 +338,10 @@ int dbg_log(enum _debug_class cls, struct _debug_channel *channel,
     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)
index 5d8213f42e9d32660f7a4a97448dd90201770693..cae1a43cf966200765baab4fa0320926168afec1 100644 (file)
@@ -86,55 +86,35 @@ struct _debug_channel
 
 #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, ""};
@@ -146,9 +126,6 @@ static struct _debug_channel * const _dbch___default = &_dbch_##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) ;                                      \
index cb808184f2debba9421286bafe0ca1b865e86960..e1628e5a12fb93733815b58ddc05a1543701bcdd 100644 (file)
@@ -308,7 +308,7 @@ bool msgproc_injector_req(ECS_Client* ccli, ECS__InjectorReq* msg)
             } 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;
@@ -632,7 +632,7 @@ bool msgproc_nfc_req(ECS_Client* ccli, ECS__NfcReq* msg)
 
     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);
     }
 
@@ -659,7 +659,7 @@ bool ntf_to_injector(const char* data, const int len) {
     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();
@@ -745,7 +745,7 @@ bool send_injector_ntf(const char* data, const int len)
 
     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;
@@ -798,7 +798,7 @@ bool send_device_ntf(const char* data, const int len)
 
     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;
@@ -819,7 +819,7 @@ bool send_device_ntf(const char* data, const int len)
         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;
@@ -846,7 +846,7 @@ bool send_nfc_ntf(struct nfc_msg_info* msg)
     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) {
@@ -854,9 +854,9 @@ bool send_nfc_ntf(struct nfc_msg_info* msg)
         } 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");
@@ -874,7 +874,7 @@ bool send_nfc_ntf(struct nfc_msg_info* msg)
     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;
 
@@ -939,7 +939,7 @@ static void handle_sdcard(char* dataBuf, size_t dataLen)
                 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);
         }