From d83d68e98be009da7c015fae9622134519a3dde8 Mon Sep 17 00:00:00 2001 From: Jinhyung Jo Date: Wed, 9 Aug 2017 23:24:35 +0900 Subject: [PATCH] source: remove use of getenv() Change-Id: I4caf3eb7f788ddd95a83be13a298d1c87c48de10 Signed-off-by: Jinhyung Jo --- packaging/sdbd.service | 2 ++ packaging/sdbd_device.service | 2 ++ packaging/sdbd_device_tv.service | 2 ++ packaging/sdbd_emulator.service | 2 ++ packaging/sdbd_emulator_tv.service | 2 ++ packaging/sdbd_tcp.service | 2 ++ src/sdb.c | 59 ++++++++++++++++++++++++++++++++++---- 7 files changed, 65 insertions(+), 6 deletions(-) diff --git a/packaging/sdbd.service b/packaging/sdbd.service index 76a066e..70b5139 100644 --- a/packaging/sdbd.service +++ b/packaging/sdbd.service @@ -2,6 +2,8 @@ Description=sdbd [Service] +#If necessary, Put Environment variable settings in a file like below +#ExecStartPre=/bin/bash -c "/bin/echo 'SDB_TRACE=all SDBD_LOG_PATH=/tmp' >> /tmp/.sdbdlog.conf" Type=forking PIDFile=/tmp/.sdbd.pid RemainAfterExit=yes diff --git a/packaging/sdbd_device.service b/packaging/sdbd_device.service index 779e42e..8fe2e4a 100644 --- a/packaging/sdbd_device.service +++ b/packaging/sdbd_device.service @@ -8,6 +8,8 @@ User=sdk Group=sdk Type=forking #location of SDBD log file +#If necessary, Put Environment variable settings in a file like below +#ExecStartPre=/bin/bash -c "/bin/echo 'SDB_TRACE=all SDBD_LOG_PATH=/tmp' >> /tmp/.sdbdlog.conf" EnvironmentFile=-/run/tizen-system-env PIDFile=/tmp/.sdbd.pid Restart=on-failure diff --git a/packaging/sdbd_device_tv.service b/packaging/sdbd_device_tv.service index 0ea497d..7ca53a3 100644 --- a/packaging/sdbd_device_tv.service +++ b/packaging/sdbd_device_tv.service @@ -7,6 +7,8 @@ After=tmp.mount Type=forking #location of SDBD log file #Environment=SDBD_LOG_PATH=/tmp +#If necessary, Put Environment variable settings in a file like below +#ExecStartPre=/bin/bash -c "/bin/echo 'SDB_TRACE=all SDBD_LOG_PATH=/tmp' >> /tmp/.sdbdlog.conf" EnvironmentFile=-/run/tizen-system-env OOMScoreAdjust=-1000 PIDFile=/tmp/.sdbd.pid diff --git a/packaging/sdbd_emulator.service b/packaging/sdbd_emulator.service index 74c5d9b..7bf20f5 100644 --- a/packaging/sdbd_emulator.service +++ b/packaging/sdbd_emulator.service @@ -11,6 +11,8 @@ Type=forking Environment=DISPLAY=:0 PIDFile=/tmp/.sdbd.pid RemainAfterExit=yes +#If necessary, Put Environment variable settings in a file like below +#ExecStartPre=/bin/bash -c "/bin/echo 'SDB_TRACE=all SDBD_LOG_PATH=/tmp' >> /tmp/.sdbdlog.conf" #ExecStartPre=/bin/bash -c "/bin/echo '10.0.2.15/32 system::debugging_network' >> /smack/netlabel" SmackProcessLabel=System Capabilities=cap_dac_override,cap_setgid,cap_setuid,cap_sys_admin=i diff --git a/packaging/sdbd_emulator_tv.service b/packaging/sdbd_emulator_tv.service index 3627ded..634974c 100644 --- a/packaging/sdbd_emulator_tv.service +++ b/packaging/sdbd_emulator_tv.service @@ -8,6 +8,8 @@ After=tmp.mount dbus.service Type=forking #location of SDBD log file #Environment=SDBD_LOG_PATH=/tmp +#If necessary, Put Environment variable settings in a file like below +#ExecStartPre=/bin/bash -c "/bin/echo 'SDB_TRACE=all SDBD_LOG_PATH=/tmp' >> /tmp/.sdbdlog.conf" Environment=DISPLAY=:0 PIDFile=/tmp/.sdbd.pid RemainAfterExit=yes diff --git a/packaging/sdbd_tcp.service b/packaging/sdbd_tcp.service index 5269cfe..9995740 100644 --- a/packaging/sdbd_tcp.service +++ b/packaging/sdbd_tcp.service @@ -5,6 +5,8 @@ After=default.target [Service] Type=forking Environment=DISPLAY=:0 +#If necessary, Put Environment variable settings in a file like below +#ExecStartPre=/bin/bash -c "/bin/echo 'SDB_TRACE=all SDBD_LOG_PATH=/tmp' >> /tmp/.sdbdlog.conf" PIDFile=/tmp/.sdbd.pid RemainAfterExit=yes SmackProcessLabel=System diff --git a/src/sdb.c b/src/sdb.c index 84d3b53..7b81403 100644 --- a/src/sdb.c +++ b/src/sdb.c @@ -68,6 +68,8 @@ SDB_MUTEX_DEFINE(zone_check_lock); SDB_MUTEX_DEFINE( D_lock ); #endif +#define SDB_LOGCONF_PATH "/tmp/.sdbdlog.conf" + int HOST = 0; // sdk user @@ -196,6 +198,43 @@ void fatal_errno(const char *fmt, ...) exit(-1); } +static char* get_sdb_log_conf(const char* key) +{ + int fd; + char line[256] = {0,}; + char value[256] = {0,}; + + if (access(SDB_LOGCONF_PATH, F_OK)) { + return NULL; + } + + fd = unix_open(SDB_LOGCONF_PATH, O_RDONLY); + if (fd < 0) { + D("failed to open '%s' file: %d\n", SDB_LOGCONF_PATH, errno); + return NULL; + } + + if (read_line(fd, line, sizeof(line)) > 0) { + char* start = strstr(line, key); + if (start != NULL) { + // move one more character to remove '=', + // including the length of the key string + start = start + strlen(key) + 1; + char* end = strstr(start, " "); + if (end != NULL) { + strncpy(value, start, end - start); + } else { + strncpy(value, start, sizeof(value)); + } + } else { + sdb_close(fd); + return NULL; + } + } + sdb_close(fd); + return strdup(value); +} + static int is_enable_sdbd_log() { return (!strncmp(g_capabilities.log_enable, PLUGIN_RET_ENABLED, strlen(PLUGIN_RET_ENABLED))); @@ -210,7 +249,8 @@ int sdb_trace_mask; */ void sdb_trace_init(void) { - const char* p = getenv("SDB_TRACE"); + char* ptr = get_sdb_log_conf("SDB_TRACE"); + const char* p; const char* q; static const struct { @@ -235,11 +275,13 @@ void sdb_trace_init(void) { NULL, 0 } }; - if (p == NULL) { + if (ptr == NULL) { if (is_enable_sdbd_log()) p = "all"; else return; + } else { + p = ptr; } /* use a comma/column/semi-colum/space separated list */ @@ -261,6 +303,7 @@ void sdb_trace_init(void) int flag = tags[tagn].flag; if (flag == 0) { sdb_trace_mask = ~0; + free(ptr); return; } sdb_trace_mask |= (1 << flag); @@ -271,6 +314,7 @@ void sdb_trace_init(void) if (*p) p++; } + free(ptr); } /* @@ -1133,18 +1177,21 @@ void start_device_log(void) struct tm now; time_t t; // char value[PROPERTY_VALUE_MAX]; - const char* p_trace = getenv("SDB_TRACE"); - const char* p_path = getenv("SDBD_LOG_PATH"); + char* p_trace = get_sdb_log_conf("SDB_TRACE"); + char* p_path = get_sdb_log_conf("SDBD_LOG_PATH"); // read the trace mask from persistent property persist.sdb.trace_mask // give up if the property is not set or cannot be parsed if ((p_trace == NULL ) && !is_enable_sdbd_log()) { return; + } else { + free(p_trace); } - if (p_path) + if (p_path) { snprintf(path_folder, sizeof(path_folder), "%s", p_path); - else if (g_capabilities.log_path[0] != '\0') + free(p_path); + } else if (g_capabilities.log_path[0] != '\0') snprintf(path_folder, sizeof(path_folder), "%s", g_capabilities.log_path); else return; -- 2.7.4