[DCM-1855] Fix to get the system tz.
authorHokwon Song <hokwon.song@samsung.com>
Fri, 31 May 2013 01:06:23 +0000 (10:06 +0900)
committerHokwon Song <hokwon.song@samsung.com>
Fri, 31 May 2013 01:06:23 +0000 (10:06 +0900)
Change-Id: I7820bac27a5d3abaf38139dd8551e00f7042646c
Signed-off-by: Hokwon Song <hokwon.song@samsung.com>
src/locales/FLcl_LocaleManagerImpl.cpp

index a378dd5..e1b7b1b 100644 (file)
@@ -26,6 +26,7 @@
 #include <unicode/timezone.h>
 #include <libxml/parser.h>
 #include <libxml/tree.h>
+#include <vconf.h>
 
 #include <FIo.h>
 #include <FBaseSysLog.h>
@@ -52,6 +53,17 @@ struct FreeXmlDoc
        }
 };
 
+struct FreeCharPtr
+{
+       void operator ()(char* p)
+       {
+               if (p != null)
+               {
+                       free(p);
+               }
+       }
+};
+
 namespace Tizen { namespace Locales
 {
 static const char* LANGUAGE_LIST_FILE_PATH ="/opt/data/setting/langlist.xml";
@@ -205,7 +217,7 @@ _LocaleManagerImpl::GetAvailableLanguagesN(void)
        {
                if (cur_node->type == XML_ELEMENT_NODE)
                {
-                       std::unique_ptr < char > pLocId((char*)xmlGetProp(cur_node, (const xmlChar *)"id"));
+                       std::unique_ptr < char, FreeCharPtr > pLocId((char*)xmlGetProp(cur_node, (const xmlChar *)"id"));
                        Locale loc = _LocaleImpl(pLocId.get()).GetOspLocale();
                        std::unique_ptr<String> pLanguageLocaleID(new (std::nothrow) String(loc.GetLanguageCodeString()));
                        SysTryReturn(NID_LCL, pLanguageLocaleID, null, E_OUT_OF_MEMORY,"[%s] Memory allocation failed",GetErrorMessage(E_OUT_OF_MEMORY));
@@ -247,7 +259,7 @@ _LocaleManagerImpl::GetAvailableLanguageLocalesN(void)
        {
                if (cur_node->type == XML_ELEMENT_NODE)
                {
-                       std::unique_ptr< char > pLocId((char*)xmlGetProp(cur_node, (const xmlChar *)"id"));
+                       std::unique_ptr< char, FreeCharPtr> pLocId((char*)xmlGetProp(cur_node, (const xmlChar *)"id"));
                        Locale loc = _LocaleImpl(pLocId.get()).GetOspLocale();
                        if (_LocaleImpl::IsSupported(loc))
                        {
@@ -371,15 +383,9 @@ _LocaleManagerImpl::GetAvailableTimeZonesN(int rawOffset)
 TimeZone
 _LocaleManagerImpl::GetSystemTimeZone(void)
 {
-       char tz[PATH_MAX + 1];
-       int len = readlink("/opt/etc/localtime", tz, PATH_MAX);
-
-       SysTryReturn(NID_LCL, len > 0, TimeZone(-1, ""), E_SYSTEM, "It is failed to get System Time Zone");
-       tz[len] = '\0';
-       SysTryReturn(NID_LCL, len > 20, TimeZone(-1, ""), E_SYSTEM, "It is failed to get System Time Zone");
-
-       String tzId(tz + 20);
-       SysLog(NID_LCL, "System TimeZone id [%ls]", tzId.GetPointer());
+       std::unique_ptr< char, FreeCharPtr> tzId(vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_ID));
+       SysTryReturn(NID_LCL, tzId, TimeZone(-1, ""), E_SYSTEM, "It is failed to get System Time Zone");
+       SysLog(NID_LCL, "System TimeZone id [%s]", tzId.get());
 
        TimeZone timeZone;
        DateTime utcTime;
@@ -389,7 +395,7 @@ _LocaleManagerImpl::GetSystemTimeZone(void)
        pGmTime = gmtime(&currTime);
        utcTime.SetValue(pGmTime->tm_year + 1900, pGmTime->tm_mon + 1, pGmTime->tm_mday, pGmTime->tm_hour, pGmTime->tm_min, pGmTime->tm_sec);
 
-       result r = Tizen::Locales::TimeZone::GetTimeZone(tzId, utcTime, timeZone);
+       result r = Tizen::Locales::TimeZone::GetTimeZone(String(tzId.get()), utcTime, timeZone);
        SysTryReturn(NID_LCL, r == E_SUCCESS, TimeZone(-1, ""), r, "[%s] error occurs.", GetErrorMessage(r));
        return timeZone;
 }