Enable build with iniparser v 3.1
[platform/framework/native/appfw.git] / src / base / FBaseSys.cpp
index 5cfda1d..cde53f6 100644 (file)
@@ -1,5 +1,4 @@
 //
-// Open Service Platform
 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
 //
 // Licensed under the Apache License, Version 2.0 (the License);
  * @brief              This file defines the diagnostics types.
  */
 
-#include <vconf.h>
-#include <dlog.h>
-#include <assert.h>
-#include <stdio.h>
+#include <cassert>
+#include <cstdio>
+#include <cstring>
 #include <unistd.h>
-#include <string.h>
 #include <sys/syscall.h>
 #include <sys/types.h>
-#include <FIoRegistry.h>
-#include <FIoFile.h>
+
+#include <vconf.h>
+#include <dlog.h>
+#include <appinfo.h>
+
 #include <FAppTypes.h>
 #include <FBaseLog.h>
 #include <FBaseSysLog.h>
+
 #include "FBase_Log.h"
 #include "FBase_StringConverter.h"
-#include "FApp_AppInfo.h"
+
+extern "C" {
+#include <iniparser.h>
+}
 
 using namespace Tizen::Base;
-using namespace Tizen::Io;
-using namespace Tizen::Base::Collection;
-using namespace Tizen::App;
 
 #ifdef LOG_TAG
 #undef LOG_TAG
@@ -48,7 +49,11 @@ using namespace Tizen::App;
 #define LOG_TAG_NULL ""
 #endif
 
+void __InitializeLogLevel(dictionary *pDic);
+void __InitializePlatformModule(dictionary *pDic);
+
 static const char LOG_TAG_ASSERT[] = "Assert";
+static const char FILE_DEBUGMODE[] = "/opt/etc/.debugmode";
 
 bool iniLoaded = false;
 
@@ -56,7 +61,7 @@ static bool appNameLoaded = false;
 static char appName[LOG_MODULE_NAME_LEN_MAX];
 
 static bool envLoaded = false;
-static bool envPlatformInfoEnabled = true;
+static bool envPlatformInfoEnabled = false;
 
 #define APP_RESERVED(X) NID_APP+X
 #define BASE_RESERVED(X) NID_BASE+X
@@ -80,8 +85,9 @@ static bool envPlatformInfoEnabled = true;
 #define UI_RESERVED(X) NID_UI+X
 #define UIX_RESERVED(X) NID_UIX+X
 #define WEB_RESERVED(X) NID_WEB+X
+#define SHELL_RESERVED(X) NID_SHELL+X
 
-LogInfo logInfo =
+static LogInfo logInfo =
 {
        {
                //OSP Namespace ID ===============================================================
@@ -292,7 +298,18 @@ LogInfo logInfo =
                {WEB_RESERVED(6) , "RESERVED", "", false},
                {WEB_RESERVED(7) , "RESERVED", "", false},
                {WEB_RESERVED(8) , "RESERVED", "", false},
-               {WEB_RESERVED(9) , "RESERVED", "", false}
+               {WEB_RESERVED(9) , "RESERVED", "", false},
+
+               {NID_SHELL, "NID_SHELL", "Tizen::Shell", true},
+               {SHELL_RESERVED(1) , "RESERVED", "", false},
+               {SHELL_RESERVED(2) , "RESERVED", "", false},
+               {SHELL_RESERVED(3) , "RESERVED", "", false},
+               {SHELL_RESERVED(4) , "RESERVED", "", false},
+               {SHELL_RESERVED(5) , "RESERVED", "", false},
+               {SHELL_RESERVED(6) , "RESERVED", "", false},
+               {SHELL_RESERVED(7) , "RESERVED", "", false},
+               {SHELL_RESERVED(8) , "RESERVED", "", false},
+               {SHELL_RESERVED(9) , "RESERVED", "", false}
 
        },
 
@@ -420,7 +437,7 @@ AppassertInternal(const char* pFunction, int lineNumber)
        char logTag[LOG_MODULE_NAME_LEN_MAX];
 
        vconf_get_bool(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL, &appDebug);
-       platformDebug = File::IsFileExist( "/opt/etc/.debugmode");
+       platformDebug = (0 == access(FILE_DEBUGMODE, F_OK));
 
        snprintf(logTag, LOG_MODULE_NAME_LEN_MAX, "%s", appName);
        logTag[LOG_MODULE_NAME_LEN_MAX - 1] = '\0';
@@ -428,12 +445,12 @@ AppassertInternal(const char* pFunction, int lineNumber)
        if( (platformDebug == false) && (appDebug == 0) )
        {
                snprintf(logBody, LOG_LEN_MAX, "%s(%d) > App assertion passed due to debug mode off!", pFunction, lineNumber);
-               ALOG(LOG_ERROR, logTag, logBody);
+               ALOG(LOG_ERROR, logTag, "%s", logBody);
                return;
        }
 
        snprintf(logBody, LOG_LEN_MAX, "%s(%d) > AppAssert!", pFunction, lineNumber);
-       ALOG(LOG_ERROR, logTag, logBody);
+       ALOG(LOG_ERROR, logTag, "%s", logBody);
 
        assert(false);
 }
@@ -448,7 +465,7 @@ AppassertfInternal(const char* expr, const char* pFunction, int lineNumber, cons
        va_start(args, pFormat);
 
        vconf_get_bool(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL, &appDebug);
-       platformDebug = File::IsFileExist( "/opt/etc/.debugmode");
+       platformDebug = (0 == access(FILE_DEBUGMODE, F_OK));
 
        if( (platformDebug == false) && (appDebug == 0) )
        {
@@ -470,19 +487,11 @@ void
 SysLogInternal(unsigned long nid, const char* pFunction, int lineNumber, const char* pFormat, ...)
 {
        va_list args;
-       char* envValuePlatformlogging;
-       char* envValueDebug;
 
-       if (!envLoaded)
+       if (unlikely(!envLoaded))
        {
-               envValuePlatformlogging = getenv("TIZEN_PLATFORMLOGGING_MODE");
-               envValueDebug = getenv("TIZEN_DEBUG_MODE");
-
-               if ((envValuePlatformlogging != NULL) && (envValuePlatformlogging[0] == '1'))
-               {
-                       envPlatformInfoEnabled = true;
-               }
-               else if ((envValueDebug != NULL) && (envValueDebug[0] == '1'))
+               int ret = access("/home/developer/.platforminfologgingmode", F_OK);
+               if (ret == 0)
                {
                        envPlatformInfoEnabled = true;
                }
@@ -490,6 +499,7 @@ SysLogInternal(unsigned long nid, const char* pFunction, int lineNumber, const c
                {
                        envPlatformInfoEnabled = false;
                }
+
                envLoaded = true;
        }
 
@@ -533,19 +543,11 @@ void
 SysLogTagInternal(unsigned long nid, const char* pTag, const char* pFunction, int lineNumber, const char* pFormat, ...)
 {
        va_list args;
-       char* envValuePlatformlogging;
-       char* envValueDebug;
 
-       if (!envLoaded)
+       if (unlikely(!envLoaded))
        {
-               envValuePlatformlogging = getenv("TIZEN_PLATFORMLOGGING_MODE");
-               envValueDebug = getenv("TIZEN_DEBUG_MODE");
-
-               if ((envValuePlatformlogging != NULL) && (envValuePlatformlogging[0] == '1'))
-               {
-                       envPlatformInfoEnabled = true;
-               }
-               else if ((envValueDebug != NULL) && (envValueDebug[0] == '1'))
+               int ret = access("/home/developer/.platforminfologgingmode", F_OK);
+               if (ret == 0)
                {
                        envPlatformInfoEnabled = true;
                }
@@ -553,6 +555,7 @@ SysLogTagInternal(unsigned long nid, const char* pTag, const char* pFunction, in
                {
                        envPlatformInfoEnabled = false;
                }
+
                envLoaded = true;
        }
 
@@ -602,7 +605,7 @@ SysAssertInternal(const char* pFileName, int lineNumber, const char* pFunction)
        bool platformDebug;
        char logBody[LOG_LEN_MAX];
 
-       platformDebug = File::IsFileExist( "/opt/etc/.debugmode");
+       platformDebug = (0 == access(FILE_DEBUGMODE, F_OK));
 
        if(!platformDebug)
        {
@@ -611,7 +614,7 @@ SysAssertInternal(const char* pFileName, int lineNumber, const char* pFunction)
 
        snprintf(logBody, LOG_LEN_MAX, "%s(%d) > SysAssert!", pFunction, lineNumber);
 
-       ALOG(LOG_ERROR, LOG_TAG_ASSERT, logBody);
+       ALOG(LOG_ERROR, LOG_TAG_ASSERT, "%s", logBody);
 
        assert(false);
 }
@@ -623,7 +626,7 @@ SysAssertfInternal(const char* expr, const char* pFunction, int lineNumber, cons
        bool platformDebug;
        va_list args;
 
-       platformDebug = File::IsFileExist( "/opt/etc/.debugmode");
+       platformDebug = (0 == access(FILE_DEBUGMODE, F_OK));
 
        if(!platformDebug)
        {
@@ -651,7 +654,7 @@ SysPropagateInternal(const char* pFunction, int lineNumber, unsigned long nid, r
        char logTag[LOG_MODULE_NAME_LEN_MAX];
        snprintf(logTag, LOG_MODULE_NAME_LEN_MAX, "%s", __GetModuleName(static_cast<LogID>(nid)));
 
-       ALOG(LOG_ERROR, logTag, logBody);
+       ALOG(LOG_ERROR, logTag, "%s", logBody);
 }
 
 void
@@ -698,7 +701,7 @@ SysTryReturnResultInternal(unsigned long id, result r, const char* pFunction, in
 void
 __PrintLog(_LogType type, const char* pFunction, int lineNumber, const char* pFormat, va_list args)
 {
-       if (!iniLoaded)
+       if (unlikely(!iniLoaded))
        {
                __InitializeLogInfo();
        }
@@ -709,12 +712,10 @@ __PrintLog(_LogType type, const char* pFunction, int lineNumber, const char* pFo
 
        char logTag[LOG_MODULE_NAME_LEN_MAX];
 
-       if (!appNameLoaded)
+       if (unlikely(!appNameLoaded))
        {
                appNameLoaded = true;
-               char* pAppName = _StringConverter::CopyToCharArrayN(_AppInfo::GetAppExecutableName());
-               strncpy(appName, pAppName, LOG_MODULE_NAME_LEN_MAX);
-               delete [] pAppName;
+               strncpy(appName, appinfo_get_execname(), LOG_MODULE_NAME_LEN_MAX);
        }
        snprintf(logTag, LOG_MODULE_NAME_LEN_MAX, "%s", appName);
 
@@ -747,7 +748,7 @@ __PrintLog(_LogType type, const char* pFunction, int lineNumber, const char* pFo
 void
 __PrintLogTag(const char* pTag, _LogType type, const char* pFunction, int lineNumber, const char* pFormat, va_list args)
 {
-       if (!iniLoaded)
+       if (unlikely(!iniLoaded))
        {
                __InitializeLogInfo();
        }
@@ -789,7 +790,7 @@ __PrintLogTag(const char* pTag, _LogType type, const char* pFunction, int lineNu
 void
 __PrintSysLog(_LogType type, LogID id, const char* pFunction, int lineNumber, const char* pFormat, va_list args)
 {
-       if (!iniLoaded)
+       if (unlikely(!iniLoaded))
        {
                __InitializeLogInfo();
        }
@@ -811,11 +812,11 @@ __PrintSysLog(_LogType type, LogID id, const char* pFunction, int lineNumber, co
        switch (type)
        {
        case static_cast<_LogType>(LOG_INFO):
-               LOG_VA(LOG_INFO, logTag, logBody, args);
+               ALOG_VA(LOG_INFO, logTag, logBody, args);
                break;
 
        case static_cast<_LogType>(LOG_DEBUG):
-               LOG_VA(LOG_DEBUG, logTag, logBody, args);
+               ALOG_VA(LOG_DEBUG, logTag, logBody, args);
                break;
 
        case static_cast<_LogType>(LOG_EXCEPTION):
@@ -827,7 +828,7 @@ __PrintSysLog(_LogType type, LogID id, const char* pFunction, int lineNumber, co
                break;
 
        default:
-               LOG_VA(LOG_DEBUG, LOG_TAG_NULL, logBody, args);
+               ALOG_VA(LOG_DEBUG, LOG_TAG_NULL, logBody, args);
                break;
        }
 }
@@ -835,7 +836,7 @@ __PrintSysLog(_LogType type, LogID id, const char* pFunction, int lineNumber, co
 void
 __PrintSysLogTag(const char* pTag, _LogType type, LogID id, const char* pFunction, int lineNumber, const char* pFormat, va_list args)
 {
-       if (!iniLoaded)
+       if (unlikely(!iniLoaded))
        {
                __InitializeLogInfo();
        }
@@ -857,11 +858,11 @@ __PrintSysLogTag(const char* pTag, _LogType type, LogID id, const char* pFunctio
        switch (type)
        {
        case static_cast<_LogType>(LOG_INFO):
-               LOG_VA(LOG_INFO, logTag, logBody, args);
+               ALOG_VA(LOG_INFO, logTag, logBody, args);
                break;
 
        case static_cast<_LogType>(LOG_DEBUG):
-               LOG_VA(LOG_DEBUG, logTag, logBody, args);
+               ALOG_VA(LOG_DEBUG, logTag, logBody, args);
                break;
 
        case static_cast<_LogType>(LOG_EXCEPTION):
@@ -873,12 +874,12 @@ __PrintSysLogTag(const char* pTag, _LogType type, LogID id, const char* pFunctio
                break;
 
        default:
-               LOG_VA(LOG_DEBUG, LOG_TAG_NULL, logBody, args);
+               ALOG_VA(LOG_DEBUG, LOG_TAG_NULL, logBody, args);
                break;
        }
 }
 
-char*
+const char*
 __GetModuleName(LogID id)
 {
        return logInfo.logTable[id].logModuleName;
@@ -895,110 +896,119 @@ __InitializeLogInfo()
 {
        iniLoaded = true;
 
-       Registry reg;
-
-       const String regPath(L"/opt/usr/etc/system-log.ini");
-
-       result r;
+       dictionary *pDic;
+       pDic = iniparser_load("/opt/usr/etc/system-log.ini");
 
-       r = reg.Construct(regPath, REG_OPEN_READ_ONLY, 0);
-
-       if (IsFailed(r))
+       if (pDic == NULL)
        {
                ALOG(LOG_ERROR, LOG_TAG, "[EXCEPTION] opening ini file failed.\n");
                return;
        }
 
-       __InitializeLogLevel(reg);
-       __InitializePlatformModule(reg);
+       __InitializeLogLevel(pDic);
+       __InitializePlatformModule(pDic);
+
+       iniparser_freedict(pDic);
 }
 
 void
-__InitializeLogLevel(const Registry& reg)
+__InitializeLogLevel(dictionary *pDic)
 {
-       String sectApp(L"Application");
-       String sectPlatform(L"Platform");
+       char sectApp[]="Application";
+       char sectPlatform[]="Platform";
 
-       String entryInfo(L"INFO");
-       String entryDebug(L"DEBUG");
-       String entryException(L"EXCEPTION");
+       char entryInfo[]="INFO";
+       char entryDebug[]="DEBUG";
+       char entryException[]="EXCEPTION";
 
-       String strYes(L"YES");
-       String retString;
+       char strYes[]="YES";
+       char *pVal;
 
-       result r;
+       char keyString[LOG_MODULE_NAME_LEN_MAX*2];
+       int retVal;
 
-       r = reg.GetValue(sectApp, entryInfo, retString);
-       if (IsFailed(r))
+       sprintf(keyString, "%s:%s", sectApp, entryInfo);
+       keyString[LOG_MODULE_NAME_LEN_MAX*2-1] = '\0';
+       pVal = iniparser_getstring(pDic, keyString, NULL);
+       if (pVal == NULL)
        {
                ALOG(LOG_ERROR, LOG_TAG, "[EXCEPTION]  finding Application/INFO failed.\n");
                return;
        }
-       logInfo.applicationInfoEnabled = retString.Equals(strYes);
-       retString.Clear();
+       retVal = strcmp(strYes, pVal);
+       logInfo.applicationInfoEnabled = (retVal == 0);
 
-       r = reg.GetValue(sectApp, entryDebug, retString);
-       if (IsFailed(r))
+       sprintf(keyString, "%s:%s", sectApp, entryDebug);
+       keyString[LOG_MODULE_NAME_LEN_MAX*2-1] = '\0';
+       pVal = iniparser_getstring(pDic, keyString, NULL);
+       if (pVal == NULL)
        {
                ALOG(LOG_ERROR, LOG_TAG, "[EXCEPTION]  finding Application/DEBUG failed.\n");
                return;
        }
-       logInfo.applicationDebugEnabled = retString.Equals(strYes);
-       retString.Clear();
+       retVal = strcmp(strYes, pVal);
+       logInfo.applicationDebugEnabled = (retVal == 0);
 
-       r = reg.GetValue(sectApp, entryException, retString);
-       if (IsFailed(r))
+       sprintf(keyString, "%s:%s", sectApp, entryException);
+       keyString[LOG_MODULE_NAME_LEN_MAX*2-1] = '\0';
+       pVal = iniparser_getstring(pDic, keyString, NULL);
+       if (pVal == NULL)
        {
                ALOG(LOG_ERROR, LOG_TAG, "[EXCEPTION]  finding Application/EXCEPTION failed.\n");
                return;
        }
-       logInfo.applicationExceptionEnabled = retString.Equals(strYes);
-       retString.Clear();
+       retVal = strcmp(strYes, pVal);
+       logInfo.applicationExceptionEnabled = (retVal == 0);
 
-       r = reg.GetValue(sectPlatform, entryInfo, retString);
-       if (IsFailed(r))
+       sprintf(keyString, "%s:%s", sectPlatform, entryInfo);
+       keyString[LOG_MODULE_NAME_LEN_MAX*2-1] = '\0';
+       pVal = iniparser_getstring(pDic, keyString, NULL);
+       if (pVal == NULL)
        {
                ALOG(LOG_ERROR, LOG_TAG, "[EXCEPTION]  finding Platform/INFO failed.\n");
                return;
        }
-       logInfo.platformInfoEnabled = retString.Equals(strYes);
-       retString.Clear();
+       retVal = strcmp(strYes, pVal);
+       logInfo.platformInfoEnabled = (retVal == 0);
 
-       r = reg.GetValue(sectPlatform, entryException, retString);
-       if (IsFailed(r))
+       sprintf(keyString, "%s:%s", sectPlatform, entryException);
+       keyString[LOG_MODULE_NAME_LEN_MAX*2-1] = '\0';
+       pVal = iniparser_getstring(pDic, keyString, NULL);
+       if (pVal == NULL)
        {
                ALOG(LOG_ERROR, LOG_TAG, "[EXCEPTION]  finding Platform/EXCEPTION failed.\n");
                return;
        }
-       logInfo.platformExceptionEnabled = retString.Equals(strYes);
-       retString.Clear();
+       retVal = strcmp(strYes, pVal);
+       logInfo.platformExceptionEnabled = (retVal == 0);
 }
 
 void
-__InitializePlatformModule(const Registry& reg)
+__InitializePlatformModule(dictionary *pDic)
 {
-       String strYes(L"YES");
-       String retString;
+       char sectModule[]="PlatformModules";
+       char strYes[]="YES";
 
-       String sectModule(L"PlatformModules");
+       char *pVal;
+       int retVal;
 
-       result r;
+       char keyString[LOG_MODULE_NAME_LEN_MAX*2];
 
        for (int i = 0; i < NID_MAX; i++)
        {
-               String strEntry(logInfo.logTable[i].logIDName);
-               r = reg.GetValue(sectModule, strEntry, retString);
-               if (IsFailed(r))
+
+               sprintf(keyString, "%s:%s", sectModule, logInfo.logTable[i].logIDName);
+               keyString[LOG_MODULE_NAME_LEN_MAX*2-1] = '\0';
+               pVal = iniparser_getstring(pDic, keyString, NULL);
+               if (pVal == NULL)
                {
-                       ALOG(LOG_ERROR, LOG_TAG, "[EXCEPTION] finding PlatformModules/%ls failed.\n", strEntry.GetPointer());
+                       ALOG(LOG_ERROR, LOG_TAG, "[EXCEPTION] finding PlatformModules/%ls failed.\n", logInfo.logTable[i].logIDName);
                }
                else
                {
-                       logInfo.logTable[i].loggingEnabled = retString.Equals(strYes);
+                       retVal = strcmp(strYes, pVal);
+                       logInfo.logTable[i].loggingEnabled = (retVal == 0);
                }
-
-               strEntry.Clear();
-               retString.Clear();
        }
 }