refactoring for model-config
[framework/api/system-info.git] / src / system_info_platform.c
index 30e5fcc..40cf35c 100644 (file)
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
-#include <ctype.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
 
 #include <dlog.h>
-#include <vconf.h>
 
 #include <system_info.h>
 #include <system_info_private.h>
 
-#include <GLES/gl.h>
-#include <GLES/glext.h>
-
 #ifdef LOG_TAG
 #undef LOG_TAG
 #endif
 
 #define LOG_TAG "CAPI_SYSTEM_INFO"
 
-#define LIB_GLES_V1 "/usr/lib/libGLESv1_CM.so"
-#define LIB_GLES_V2 "/usr/lib/libGLESv2.so"
-
-#define SIZE_OF_MODEL_NAME 8
-
-#define MESSAGE_INFO_FILE_PATH "/etc/config/sysinfo-message.xml"
-#define GRAPHICS_INFO_FILE_PATH "/etc/config/graphics/sysinfo-graphics.xml"
-#define SCREEN_INFO_FILE_PATH "/etc/config/screen/sysinfo-screen.xml"
-#define TOUCH_INFO_FILE_PATH   "/etc/config/touch/sysinfo-touch.xml"
-
 int system_info_get_model(system_info_key_e key, system_info_data_type_e data_type, void **value)
 {
-       char *MODEL = NULL;
-       char *name = NULL;
-       char str[MAXBUFSIZE];
-       char tmpStr[MAXBUFSIZE];
-       int tmpStrlen = 0;
-       FILE *info;
-       extern char *strcasestr(const char *s, const char *find);
-
-       info = fopen(INFO_FILE_PATH, "r");
-       if (NULL == info) {
-               LOGE("cannot file open %s file!!!", INFO_FILE_PATH);
-               return SYSTEM_INFO_ERROR_IO_ERROR;
-       } else {
-               while (fgets(str, MAXBUFSIZE, info)) {
-                       if (strcasestr(str, "Model")) {
-                               name = strchr(str, '=');
-                               name++;
-                               tmpStrlen = strlen(name);
-
-                               strncpy(tmpStr, name, tmpStrlen-2);
-                               tmpStr[tmpStrlen-2] = '\0';
-
-                               MODEL = strdup(tmpStr);
-                               if (MODEL == NULL) {
-                                       LOGE("OUT_OF_MEMORY(0x%08x)", SYSTEM_INFO_ERROR_OUT_OF_MEMORY);
-                                       fclose(info);
-                                       return SYSTEM_INFO_ERROR_OUT_OF_MEMORY;
-                               }
-                               break;
-                       } else
-                               continue;
-               }
-       }
-       *value = MODEL;
-       fclose(info);
-       return SYSTEM_INFO_ERROR_NONE;
+       return system_info_ini_get_string(INFO_FILE_PATH, "version:model", (char **)value);
 }
 
-int system_info_get_tizen_version(system_info_key_e key, system_info_data_type_e data_type, void **value)
+int system_info_get_build_string(system_info_key_e key, system_info_data_type_e data_type, void **value)
 {
-       char *TIZEN_VERSION = NULL;
-       char *name = NULL;
-       char str[MAXBUFSIZE];
-       char tmpStr[MAXBUFSIZE];
-       int tmpStrlen = 0;
-       FILE *info;
-       extern char *strcasestr(const char *s, const char *find);
-
-       info = fopen(OS_RELEASE_FILE_PATH, "r");
-       if (NULL == info) {
-               LOGE("cannot file open %s file!!!", OS_RELEASE_FILE_PATH);
-               return SYSTEM_INFO_ERROR_IO_ERROR;
-       } else {
-               while (fgets(str, MAXBUFSIZE, info)) {
-                       if (strcasestr(str, "VERSION_ID")) {
-                               name = strchr(str, '=');
-                               name += 2;
-                               tmpStrlen = strlen(name);
-
-                               strncpy(tmpStr, name, tmpStrlen-2);
-                               tmpStr[tmpStrlen-2] = '\0';
-
-                               TIZEN_VERSION = strdup(tmpStr);
-                               if (TIZEN_VERSION == NULL) {
-                                       LOGE("OUT_OF_MEMORY(0x%08x)", SYSTEM_INFO_ERROR_OUT_OF_MEMORY);
-                                       fclose(info);
-                                       return SYSTEM_INFO_ERROR_OUT_OF_MEMORY;
-                               }
-                               break;
-                       } else
-                               continue;
-               }
-       }
-       *value = TIZEN_VERSION;
-       fclose(info);
-       return SYSTEM_INFO_ERROR_NONE;
+       return system_info_ini_get_string(INFO_FILE_PATH, "version:build", (char **)value);
 }
 
-int system_info_get_platform_name(system_info_key_e key, system_info_data_type_e data_type, void **value)
+int system_info_get_build_date(system_info_key_e key, system_info_data_type_e data_type, void **value)
 {
-       char *PLATFORM_NAME = NULL;
-       char *name = NULL;
-       char str[MAXBUFSIZE];
-       char tmpStr[MAXBUFSIZE];
-       int tmpStrlen = 0;
-       int i = 0;
-       FILE *info;
-       extern char *strcasestr(const char *s, const char *find);
-
-       info = fopen(OS_RELEASE_FILE_PATH, "r");
-       if (NULL == info) {
-               LOGE("cannot file open %s file!!!", OS_RELEASE_FILE_PATH);
-               return SYSTEM_INFO_ERROR_IO_ERROR;
-       } else {
-               while (fgets(str, MAXBUFSIZE, info)) {
-                       if (strcasestr(str, "NAME")) {
-                               name = strchr(str, '=');
-                               name += 2;
-                               tmpStrlen = strlen(name);
-
-                               strncpy(tmpStr, name, tmpStrlen-2);
-                               tmpStr[tmpStrlen-2] = '\0';
-
-                               tmpStrlen = strlen(tmpStr);
-
-                               for (i = 0; i < tmpStrlen; i++)
-                                               tmpStr[i] = (char)toupper((int)tmpStr[i]);
-
-                               PLATFORM_NAME = strdup(tmpStr);
-                               if (PLATFORM_NAME == NULL) {
-                                       LOGE("OUT_OF_MEMORY(0x%08x)", SYSTEM_INFO_ERROR_OUT_OF_MEMORY);
-                                       fclose(info);
-                                       return SYSTEM_INFO_ERROR_OUT_OF_MEMORY;
-                               }
-                               break;
-                       } else
-                               continue;
-               }
-       }
-       *value = PLATFORM_NAME;
-       fclose(info);
-       return SYSTEM_INFO_ERROR_NONE;
+       return system_info_ini_get_string(INFO_FILE_PATH, "build:date", (char **)value);
 }
 
-int system_info_get_tizen_version_name(system_info_key_e key, system_info_data_type_e data_type, void **value)
+int system_info_get_build_time(system_info_key_e key, system_info_data_type_e data_type, void **value)
 {
-       char *TIZEN_VERSION_NAME = NULL;
-       char *name = NULL;
-       char str[MAXBUFSIZE];
-       char tmpStr[MAXBUFSIZE];
-       int tmpStrlen = 0;
-       FILE *info;
-       extern char *strcasestr(const char *s, const char *find);
-
-       info = fopen(OS_RELEASE_FILE_PATH, "r");
-       if (NULL == info) {
-               LOGE("cannot file open %s file!!!", OS_RELEASE_FILE_PATH);
-               return SYSTEM_INFO_ERROR_IO_ERROR;
-       } else {
-               while (fgets(str, MAXBUFSIZE, info)) {
-                       if (strcasestr(str, "VERSION")) {
-                               name = strchr(str, ',');
-                               name += 2;
-                               tmpStrlen = strlen(name);
-
-                               strncpy(tmpStr, name, tmpStrlen-2);
-                               tmpStr[tmpStrlen-2] = '\0';
-
-                               TIZEN_VERSION_NAME = strdup(tmpStr);
-                               if (TIZEN_VERSION_NAME == NULL) {
-                                       LOGE("OUT_OF_MEMORY(0x%08x)", SYSTEM_INFO_ERROR_OUT_OF_MEMORY);
-                                       fclose(info);
-                                       return SYSTEM_INFO_ERROR_OUT_OF_MEMORY;
-                               }
-                               break;
-                       } else
-                               continue;
-               }
-       }
-       *value = TIZEN_VERSION_NAME;
-       fclose(info);
-       return SYSTEM_INFO_ERROR_NONE;
+       return system_info_ini_get_string(INFO_FILE_PATH, "build:time", (char **)value);
 }
 
-int system_info_get_opengles_version(system_info_key_e key, system_info_data_type_e data_type, void **value)
+int system_info_get_tizen_version(system_info_key_e key, system_info_data_type_e data_type, void **value)
 {
-       char *version;
-       char *OPENGLES_VERSION = NULL;
-       int version_supported = 0;
-
-       if (!access(LIB_GLES_V1, R_OK))
-               version_supported += 1;
-
-       if (!access(LIB_GLES_V2, R_OK))
-               version_supported += 2;
-
-       switch (version_supported) {
-       case 1:
-               version = "1.1";
-               break;
-
-       case 2:
-               version = "2.0";
-               break;
-
-       case 3:
-               version = "1.1/2.0";
-               break;
-       default:
-               version = NULL;
-               break;
-       }
-
-       if (version != NULL) {
-               OPENGLES_VERSION = strdup(version);
-
-               if (OPENGLES_VERSION == NULL) {
-                       LOGE("OUT_OF_MEMORY(0x%08x)", SYSTEM_INFO_ERROR_OUT_OF_MEMORY);
-                       return SYSTEM_INFO_ERROR_OUT_OF_MEMORY;
-               }
-       }
-
-       *value = OPENGLES_VERSION;
-
-       return SYSTEM_INFO_ERROR_NONE;
+       return system_info_get_platform_string("tizen.org/feature/platform.version", (char**)value);
 }
 
 int system_info_get_core_cpu_arch(system_info_key_e key, system_info_data_type_e data_type, void **value)
 {
-       FILE *cpuinfo = NULL;
+       bool cpu_arch;
        char *CORE_CPU_ARCH = NULL;
-       char *name = NULL;
-       char str[MAXBUFSIZE] = "";
-       char tmpStr[MAXBUFSIZE] = "";
 
-       cpuinfo = fopen(CPU_INFO_FILE_PATH, "r");
-       if (NULL == cpuinfo) {
-               LOGE("cannot file open %s file!!!", CPU_INFO_FILE_PATH);
-               return SYSTEM_INFO_ERROR_IO_ERROR;
-       } else {
-               while (fgets(str, MAXBUFSIZE, cpuinfo)) {
-                       if (!strncmp("Processor", str, strlen("Processor"))) {
-                               name = strchr(str, ':');
-                               if (!(strncmp("ARMv7", name+2, strlen("ARMv7")))) {
-                                       strncpy(tmpStr, name+2, strlen("ARMv7"));
-                                       tmpStr[strlen("ARMv7")] = '\0';
-                               } else if (!(strncmp("ARMv6", name+2, strlen("ARMv6")))) {
-                                       strncpy(tmpStr, name+2, strlen("ARMv6"));
-                                       tmpStr[strlen("ARMv6")] = '\0';
-                               } else if (!(strncmp("x86", name+2, strlen("x86")))) {
-                                       strncpy(tmpStr, name+2, strlen("x86"));
-                                       tmpStr[strlen("x86")] = '\0';
-                               }
-                       } else
-                               continue;
-               }
-
-               /* x86 emulator doesn't have "Processor" field in /proc/cpuinfo */
-               if (strlen(tmpStr) == 0 && system_info_get_system_info_model_type() == SYSTEM_INFO_MODEL_TYPE_EMULATOR) {
-                       strncpy(tmpStr, "x86", strlen("x86"));
-                       tmpStr[strlen("x86")] = '\0';
-               } else if (strlen(tmpStr) == 0) {
-                       strncpy(tmpStr, "Unkown", strlen("Unkown"));
-                       tmpStr[strlen("Unkown")] = '\0';
-               }
-
-               CORE_CPU_ARCH = strdup(tmpStr);
+       if (system_info_get_platform_bool("tizen.org/feature/platform.core.cpu.arch.armv6", &cpu_arch) == SYSTEM_INFO_ERROR_NONE
+               && cpu_arch == true)
+               CORE_CPU_ARCH = strdup("armv6");
+       else if (system_info_get_platform_bool("tizen.org/feature/platform.core.cpu.arch.armv7", &cpu_arch) == SYSTEM_INFO_ERROR_NONE
+               && cpu_arch == true)
+               CORE_CPU_ARCH = strdup("armv7");
+       else if (system_info_get_platform_bool("tizen.org/feature/platform.core.cpu.arch.x86", &cpu_arch) == SYSTEM_INFO_ERROR_NONE
+               && cpu_arch == true)
+               CORE_CPU_ARCH = strdup("x86");
 
                if (CORE_CPU_ARCH == NULL) {
-                       LOGE("OUT_OF_MEMORY(0x%08x)", SYSTEM_INFO_ERROR_OUT_OF_MEMORY);
-                       fclose(cpuinfo);
-                       return SYSTEM_INFO_ERROR_OUT_OF_MEMORY;
-               }
+               LOGE("Unknown cpu");
+               return SYSTEM_INFO_ERROR_IO_ERROR;
        }
-       fclose(cpuinfo);
 
        *value = CORE_CPU_ARCH;
 
@@ -314,53 +83,29 @@ int system_info_get_core_cpu_arch(system_info_key_e key, system_info_data_type_e
 
 int system_info_get_core_fpu_arch(system_info_key_e key, system_info_data_type_e data_type, void **value)
 {
-       FILE *cpuinfo = NULL;
+       bool fpu_arch;
        char *CORE_FPU_ARCH = NULL;
-       char *name = NULL;
-       char str[MAXBUFSIZE] = "";
-       char tmpStr[MAXBUFSIZE] = "";
 
-       cpuinfo = fopen(CPU_INFO_FILE_PATH, "r");
-       if (NULL == cpuinfo) {
-               LOGE("cannot file open %s file!!!", CPU_INFO_FILE_PATH);
-               return SYSTEM_INFO_ERROR_IO_ERROR;
-       } else {
-               /* The target and the emulator uses the field "Features" and "flags" in /proc/cpuinfo */
-               if (system_info_get_system_info_model_type() != SYSTEM_INFO_MODEL_TYPE_EMULATOR)
-                       snprintf(tmpStr, strlen("Features"), "Features");
-               else
-                       snprintf(tmpStr, strlen("flags"), "flags");
-
-               while (fgets(str, MAXBUFSIZE, cpuinfo)) {
-                       if (!strncmp(tmpStr, str, strlen(tmpStr))) {
-                               name = strchr(str, ':');
-                               if (strstr(name+2, "vfpv3"))
-                                       CORE_FPU_ARCH = strdup("vfpv3");
-                               else if (strstr(name+2, "vfpv2"))
-                                       CORE_FPU_ARCH = strdup("vfpv2");
-                               else if (strstr(name+2, "ssse3"))
-                                       CORE_FPU_ARCH = strdup("ssse3");
-                               else if (strstr(name+2, "sse3"))
-                                       CORE_FPU_ARCH = strdup("sse3");
-                               else if (strstr(name+2, "sse2"))
+       if (system_info_get_platform_bool("tizen.org/feature/platform.core.fpu.arch.sse2", &fpu_arch) == SYSTEM_INFO_ERROR_NONE
+               && fpu_arch == true)
                                        CORE_FPU_ARCH = strdup("sse2");
-                               else if (strstr(name+2, "sse"))
-                                       CORE_FPU_ARCH = strdup("sse");
-                               else
-                                       CORE_FPU_ARCH = strdup("Unkown");
+       else if (system_info_get_platform_bool("tizen.org/feature/platform.core.fpu.arch.sse3", &fpu_arch) == SYSTEM_INFO_ERROR_NONE
+               && fpu_arch == true)
+               CORE_FPU_ARCH = strdup("sse3");
+       else if (system_info_get_platform_bool("tizen.org/feature/platform.core.fpu.arch.ssse3", &fpu_arch) == SYSTEM_INFO_ERROR_NONE
+               && fpu_arch == true)
+               CORE_FPU_ARCH = strdup("ssse3");
+       else if (system_info_get_platform_bool("tizen.org/feature/platform.core.fpu.arch.vfpv2", &fpu_arch) == SYSTEM_INFO_ERROR_NONE
+               && fpu_arch == true)
+               CORE_FPU_ARCH = strdup("vfpv2");
+       else if (system_info_get_platform_bool("tizen.org/feature/platform.core.fpu.arch.vfpv3", &fpu_arch) == SYSTEM_INFO_ERROR_NONE
+               && fpu_arch == true)
+               CORE_FPU_ARCH = strdup("vfpv3");
 
                                if (CORE_FPU_ARCH == NULL) {
-                                       LOGE("OUT_OF_MEMORY(0x%08x)", SYSTEM_INFO_ERROR_OUT_OF_MEMORY);
-                                       fclose(cpuinfo);
-                                       return SYSTEM_INFO_ERROR_OUT_OF_MEMORY;
-                               }
-
-                               break;
-                       } else
-                               continue;
-               }
+               LOGE("Unknown fpu");
+               return SYSTEM_INFO_ERROR_IO_ERROR;
        }
-       fclose(cpuinfo);
 
        *value = CORE_FPU_ARCH;
 
@@ -413,317 +158,162 @@ int system_info_get_core_cpu_freq(system_info_key_e key, system_info_data_type_e
        return SYSTEM_INFO_ERROR_NONE;
 }
 
-
-int system_info_get_opengles_texture_format(system_info_key_e key, system_info_data_type_e data_type, void **value)
+int system_info_get_platform_name(system_info_key_e key, system_info_data_type_e data_type, void **value)
 {
-       char *OPENGLES_TEXTURE_FORMAT;
-       char textureformat[MAXBUFSIZE];
-
-       textureformat[0] = '\0';
-
-       if (!access(LIB_GLES_V2, R_OK)) {
-               strcat(textureformat, "utc ");
-       }
-       if (GL_OES_compressed_paletted_texture) {
-               strcat(textureformat, "| ptc ");
-       }
-       if (GL_OES_compressed_ETC1_RGB8_texture) {
-               strcat(textureformat, "| etc ");
+       return system_info_get_platform_string("tizen.org/system/platform.name", (char**)value);
        }
-       if (GL_AMD_compressed_3DC_texture) {
-               strcat(textureformat, "| 3dc ");
-       }
-       if (GL_AMD_compressed_ATC_texture) {
-               strcat(textureformat, "| atc ");
-       }
-       if (GL_IMG_texture_compression_pvrtc) {
-               strcat(textureformat, "| pvrtc");
-       }
-
-       OPENGLES_TEXTURE_FORMAT = strdup(textureformat);
-
-       if (OPENGLES_TEXTURE_FORMAT == NULL) {
-               LOGE("OUT_OF_MEMORY(0x%08x)", SYSTEM_INFO_ERROR_OUT_OF_MEMORY);
-               return SYSTEM_INFO_ERROR_OUT_OF_MEMORY;
-       }
-
-       *value = OPENGLES_TEXTURE_FORMAT;
 
-       return SYSTEM_INFO_ERROR_NONE;
-}
-
-int system_info_get_build_string(system_info_key_e key, system_info_data_type_e data_type, void **value)
+int system_info_get_tizen_version_name(system_info_key_e key, system_info_data_type_e data_type, void **value)
 {
-       char *BUILD_STRING = NULL;
+       char *TIZEN_VERSION_NAME = NULL;
        char *name = NULL;
        char str[MAXBUFSIZE];
        char tmpStr[MAXBUFSIZE];
-       FILE *info = NULL;
+       int tmpStrlen = 0;
+       FILE *info;
+       extern char *strcasestr(const char *s, const char *find);
 
-       info = fopen(INFO_FILE_PATH, "r");
+       info = fopen(OS_RELEASE_FILE_PATH, "r");
        if (NULL == info) {
-               LOGE("cannot file open %s file!!!", INFO_FILE_PATH);
+               LOGE("cannot file open %s file!!!", OS_RELEASE_FILE_PATH);
                return SYSTEM_INFO_ERROR_IO_ERROR;
-       } else {
-               while (fgets(str, MAXBUFSIZE, info)) {
-                       if (!strncmp("Build", str, strlen("Build"))) {
-                               name = strchr(str, '=');
-                               name++;
-                               strncpy(tmpStr, name, strlen(name)-2);
-                               tmpStr[strlen(name)-2] = '\0';
-
-                               BUILD_STRING = strdup(tmpStr);
-                               if (BUILD_STRING == NULL) {
-                                       LOGE("OUT_OF_MEMORY(0x%08x)", SYSTEM_INFO_ERROR_OUT_OF_MEMORY);
-                                       fclose(info);
-                                       return SYSTEM_INFO_ERROR_OUT_OF_MEMORY;
-                               }
-                               break;
-                       } else
-                               continue;
+       }
+
+       while (fgets(str, MAXBUFSIZE, info)) {
+               if (strcasestr(str, "VERSION")) {
+                       name = strchr(str, ',');
+                       name += 2;
+                       tmpStrlen = strlen(name);
+
+                       strncpy(tmpStr, name, tmpStrlen-2);
+                       tmpStr[tmpStrlen-2] = '\0';
+
+                       TIZEN_VERSION_NAME = strdup(tmpStr);
+                       if (TIZEN_VERSION_NAME == NULL) {
+                               LOGE("OUT_OF_MEMORY(0x%08x)", SYSTEM_INFO_ERROR_OUT_OF_MEMORY);
+                               fclose(info);
+                               return SYSTEM_INFO_ERROR_OUT_OF_MEMORY;
+                       }
+                       break;
                }
        }
-       *value = BUILD_STRING;
+
+       *value = TIZEN_VERSION_NAME;
        fclose(info);
        return SYSTEM_INFO_ERROR_NONE;
 }
 
-int system_info_get_build_date(system_info_key_e key, system_info_data_type_e data_type, void **value)
+int system_info_get_opengles_version(system_info_key_e key, system_info_data_type_e data_type, void **value)
 {
-       char *BUILD_DATE = NULL;
-       char *name = NULL;
-       char str[MAXBUFSIZE];
-       char tmpStr[MAXBUFSIZE];
-       FILE *info = NULL;
+       bool glversion = 0;
+       char *version;
+       char *OPENGLES_VERSION = NULL;
+       int version_supported = 0;
 
-       info = fopen(INFO_FILE_PATH, "r");
-       if (NULL == info) {
-               LOGE("cannot file open %s file!!!", INFO_FILE_PATH);
-               return SYSTEM_INFO_ERROR_IO_ERROR;
-       } else {
-               while (fgets(str, MAXBUFSIZE, info)) {
-                       if (!strncmp("Date", str, strlen("Date"))) {
-                               name = strchr(str, '=');
-                               name++;
-                               strncpy(tmpStr, name, strlen(name)-2);
-                               tmpStr[strlen(name)-2] = '\0';
-
-                               BUILD_DATE = strdup(tmpStr);
-                               if (BUILD_DATE == NULL) {
-                                       LOGE("OUT_OF_MEMORY(0x%08x)", SYSTEM_INFO_ERROR_OUT_OF_MEMORY);
-                                       fclose(info);
-                                       return SYSTEM_INFO_ERROR_OUT_OF_MEMORY;
-                               }
+       if (system_info_get_platform_bool("tizen.org/feature/opengles.version.1_1", &glversion) == SYSTEM_INFO_ERROR_NONE
+               && glversion == true)
+               version_supported += 1;
+
+       if (system_info_get_platform_bool("tizen.org/feature/opengles.version.2_0", &glversion) == SYSTEM_INFO_ERROR_NONE
+               && glversion == true)
+               version_supported += 2;
+
+       switch (version_supported) {
+       case 1:
+               version = "1.1";
+               break;
+
+       case 2:
+               version = "2.0";
+               break;
+
+       case 3:
+               version = "1.1/2.0";
+               break;
+       default:
+               version = NULL;
                                break;
-                       } else
-                               continue;
-               }
-       }
-       *value = BUILD_DATE;
-       fclose(info);
-       return SYSTEM_INFO_ERROR_NONE;
 }
 
-int system_info_get_build_time(system_info_key_e key, system_info_data_type_e data_type, void **value)
-{
-       char *BUILD_TIME = NULL;
-       char *name = NULL;
-       char str[MAXBUFSIZE];
-       char tmpStr[MAXBUFSIZE];
-       FILE *info = NULL;
+       if (version != NULL) {
+               OPENGLES_VERSION = strdup(version);
 
-       info = fopen(INFO_FILE_PATH, "r");
-       if (NULL == info) {
-               LOGE("cannot file open %s file!!!", INFO_FILE_PATH);
-               return SYSTEM_INFO_ERROR_IO_ERROR;
-       } else {
-               while (fgets(str, MAXBUFSIZE, info)) {
-                       if (!strncmp("Time", str, strlen("Time"))) {
-                               name = strchr(str, '=');
-                               name++;
-                               strncpy(tmpStr, name, strlen(name)-2);
-                               tmpStr[strlen(name)-2] = '\0';
-
-                               BUILD_TIME = strdup(tmpStr);
-                               if (BUILD_TIME == NULL) {
+               if (OPENGLES_VERSION == NULL) {
                                        LOGE("OUT_OF_MEMORY(0x%08x)", SYSTEM_INFO_ERROR_OUT_OF_MEMORY);
-                                       fclose(info);
                                        return SYSTEM_INFO_ERROR_OUT_OF_MEMORY;
                                }
-                               break;
-                       } else
-                               continue;
-               }
        }
-       *value = BUILD_TIME;
-       fclose(info);
-       return SYSTEM_INFO_ERROR_NONE;
-}
 
-int system_info_get_mms_supported(system_info_key_e key, system_info_data_type_e data_type, void **value)
-{
-       bool *supported;
-       char *string = NULL;
-       char *model = "default";
-
-       supported = (bool *)value;
+       *value = OPENGLES_VERSION;
 
-       if (access(MESSAGE_INFO_FILE_PATH, R_OK)) {
-       *supported = false;
                return SYSTEM_INFO_ERROR_NONE;
        }
 
-       if (system_info_get_value_from_xml(MESSAGE_INFO_FILE_PATH, model, "mms-support", &string)) {
-               LOGE("cannot get mms-support info from %s!!!", MESSAGE_INFO_FILE_PATH);
-               return SYSTEM_INFO_ERROR_IO_ERROR;
-       }
-
-       if (!strcmp(string, "true") || !strcmp(string, "TRUE"))
-       *supported = true;
-       else
-               *supported = false;
-
-       free(string);
-
-       return SYSTEM_INFO_ERROR_NONE;
-}
-
-int system_info_get_sms_supported(system_info_key_e key, system_info_data_type_e data_type, void **value)
+int system_info_get_opengles_texture_format(system_info_key_e key, system_info_data_type_e data_type, void **value)
 {
-       bool *supported;
-       char *string = NULL;
-       char *model = "default";
+       bool texture;
+       char *OPENGLES_TEXTURE_FORMAT;
+       char textureformat[MAXBUFSIZE];
 
-       supported = (bool *)value;
+       textureformat[0] = '\0';
 
-       if (access(MESSAGE_INFO_FILE_PATH, R_OK)) {
-               *supported = false;
-               return SYSTEM_INFO_ERROR_NONE;
-       }
+       if (system_info_get_platform_bool("tizen.org/feature/opengles.texture_format.utc", &texture) == SYSTEM_INFO_ERROR_NONE
+               && texture == true)
+               strcat(textureformat, "utc ");
+       if (system_info_get_platform_bool("tizen.org/feature/opengles.texture_format.ptc", &texture) == SYSTEM_INFO_ERROR_NONE
+               && texture == true)
+               strcat(textureformat, "| ptc ");
+       if (system_info_get_platform_bool("tizen.org/feature/opengles.texture_format.etc", &texture) == SYSTEM_INFO_ERROR_NONE
+               && texture == true)
+               strcat(textureformat, "| etc ");
+       if (system_info_get_platform_bool("tizen.org/feature/opengles.texture_format.3dc", &texture) == SYSTEM_INFO_ERROR_NONE
+               && texture == true)
+               strcat(textureformat, "| 3dc ");
+       if (system_info_get_platform_bool("tizen.org/feature/opengles.texture_format.atc", &texture) == SYSTEM_INFO_ERROR_NONE
+               && texture == true)
+               strcat(textureformat, "| atc ");
+       if (system_info_get_platform_bool("tizen.org/feature/opengles.texture_format.pvrtc", &texture) == SYSTEM_INFO_ERROR_NONE
+               && texture == true)
+               strcat(textureformat, "| pvrtc");
 
-       if (system_info_get_value_from_xml(MESSAGE_INFO_FILE_PATH, model, "sms-support", &string)) {
-               LOGE("cannot get sms-support info from %s!!!", MESSAGE_INFO_FILE_PATH);
-               return SYSTEM_INFO_ERROR_IO_ERROR;
-       }
+       OPENGLES_TEXTURE_FORMAT = strdup(textureformat);
 
-       if (!strcmp(string, "true") || !strcmp(string, "TRUE"))
-               *supported = true;
-       else
-               *supported = false;
+       if (OPENGLES_TEXTURE_FORMAT == NULL) {
+               LOGE("OUT_OF_MEMORY(0x%08x)", SYSTEM_INFO_ERROR_OUT_OF_MEMORY);
+               return SYSTEM_INFO_ERROR_OUT_OF_MEMORY;
+       }
 
-       free(string);
+       *value = OPENGLES_TEXTURE_FORMAT;
 
        return SYSTEM_INFO_ERROR_NONE;
 }
 
-int system_info_get_cbs_supported(system_info_key_e key, system_info_data_type_e data_type, void **value)
+int system_info_get_mms_supported(system_info_key_e key, system_info_data_type_e data_type, void **value)
 {
-       bool *supported;
-       char *string = NULL;
-       char *model = "default";
-
-       supported = (bool *)value;
-
-       if (access(MESSAGE_INFO_FILE_PATH, R_OK)) {
-               *supported = false;
-               return SYSTEM_INFO_ERROR_NONE;
+       return system_info_get_platform_bool("tizen.org/feature/network.telephony.mms", (bool *)value);
        }
 
-       if (system_info_get_value_from_xml(MESSAGE_INFO_FILE_PATH, model, "cbs-support", &string)) {
-               LOGE("cannot get cbs-support info from %s!!!", MESSAGE_INFO_FILE_PATH);
-               return SYSTEM_INFO_ERROR_IO_ERROR;
+int system_info_get_sms_supported(system_info_key_e key, system_info_data_type_e data_type, void **value)
+{
+       return system_info_get_platform_bool("tizen.org/feature/network.telephony.sms", (bool *)value);
        }
 
-       if (!strcmp(string, "true") || !strcmp(string, "TRUE"))
-               *supported = true;
-       else
-               *supported = false;
-
-       free(string);
-
-       return SYSTEM_INFO_ERROR_NONE;
+int system_info_get_cbs_supported(system_info_key_e key, system_info_data_type_e data_type, void **value)
+{
+       return system_info_get_platform_bool("tizen.org/feature/network.telephony.cbs", (bool *)value);
 }
 
 int system_info_get_graphics_hwaccel_supported(system_info_key_e key, system_info_data_type_e data_type, void **value)
 {
-       bool *supported;
-       char *string = NULL;
-       char *model = "default";
-
-       supported = (bool *)value;
-
-       if (access(GRAPHICS_INFO_FILE_PATH, R_OK)) {
-               *supported = false;
-               return SYSTEM_INFO_ERROR_NONE;
-       }
-
-       if (system_info_get_value_from_xml(GRAPHICS_INFO_FILE_PATH, model, "acceleration-support", &string)) {
-               LOGE("cannot get acceleration-support info from %s!!!", GRAPHICS_INFO_FILE_PATH);
-               return SYSTEM_INFO_ERROR_IO_ERROR;
-       }
-
-       if (!strcmp(string, "true") || !strcmp(string, "TRUE"))
-               *supported = true;
-       else
-               *supported = false;
-
-       free(string);
-
-       return SYSTEM_INFO_ERROR_NONE;
+       return system_info_get_platform_bool("tizen.org/feature/graphics.acceleration", (bool *)value);
 }
 
 int system_info_get_feature_pinch_zoom_supported(system_info_key_e key, system_info_data_type_e data_type, void **value)
 {
-       bool *supported;
-       char *string = NULL;
-       char *model = "default";
-
-       supported = (bool *)value;
-
-       if (access(TOUCH_INFO_FILE_PATH, R_OK)) {
-               *supported = false;
-               return SYSTEM_INFO_ERROR_NONE;
-       }
-
-       if (system_info_get_value_from_xml(TOUCH_INFO_FILE_PATH, model, "pinch-zoom-support", &string)) {
-               LOGE("cannot get pinch-zoom-support info from %s!!!", TOUCH_INFO_FILE_PATH);
-               return SYSTEM_INFO_ERROR_IO_ERROR;
-       }
-
-       if (!strcmp(string, "true") || !strcmp(string, "TRUE"))
-               *supported = true;
-       else
-               *supported = false;
-
-       free(string);
-
-       return SYSTEM_INFO_ERROR_NONE;
+       return system_info_get_platform_bool("tizen.org/feature/multi_point_touch.pinch_zoom", (bool *)value);
 }
 
 int system_info_get_feature_auto_rotation_supported(system_info_key_e key, system_info_data_type_e data_type, void **value)
 {
-       bool *supported;
-       char *string = NULL;
-       char *model = "default";
-
-       supported = (bool *)value;
-
-       if (access(SCREEN_INFO_FILE_PATH, R_OK)) {
-               *supported = false;
-               return SYSTEM_INFO_ERROR_NONE;
-       }
-
-       if (system_info_get_value_from_xml(SCREEN_INFO_FILE_PATH, model, "auto-rotation-support", &string)) {
-               LOGE("cannot get auto-rotation-support info from %s!!!", SCREEN_INFO_FILE_PATH);
-               return SYSTEM_INFO_ERROR_IO_ERROR;
-       }
-
-       if (!strcmp(string, "true") || !strcmp(string, "TRUE"))
-               *supported = true;
-       else
-               *supported = false;
-
-       free(string);
-
-       return SYSTEM_INFO_ERROR_NONE;
+       return system_info_get_platform_bool("tizen.org/feature/screen.auto_rotation", (bool *)value);
 }