Use $ORIGIN for rpath
[apps/agl-service-windowmanager.git] / src / json_helper.cpp
index ac3d2b0..4b35952 100644 (file)
@@ -15,8 +15,6 @@
  */
 
 
-#include <json-c/json.h>
-#include <json.h>
 #include "json_helper.hpp"
 #include "hmi-debug.h"
 
@@ -123,32 +121,100 @@ const char* getStringFromJson(json_object* obj, const char* key) {
 
 int getIntFromJson(json_object* obj, const char* key) {
     if ((nullptr == obj) || (nullptr == key)) {
-        HMI_ERROR("wm", "Argument is nullptr!!!");
+        HMI_ERROR("wm:jh", "Argument is nullptr!!!");
         return 0;
     }
 
     json_object* tmp;
     if (!json_object_object_get_ex(obj, key, &tmp)) {
-        HMI_DEBUG("wm", "Not found key \"%s\"", key);
+        HMI_DEBUG("wm:jh", "Not found key \"%s\"", key);
         return 0;
     }
 
     return json_object_get_int(tmp);
 }
 
+double getDoubleFromJson(json_object* obj, const char* key) {
+    if ((nullptr == obj) || (nullptr == key)) {
+        HMI_ERROR("wm:jh", "Argument is nullptr!!!");
+        return 0;
+    }
+
+    json_object* tmp;
+    if (!json_object_object_get_ex(obj, key, &tmp)) {
+        HMI_DEBUG("wm:jh", "Not found key \"%s\"", key);
+        return 0;
+    }
+
+    return json_object_get_double(tmp);
+}
+
 json_bool getBoolFromJson(json_object* obj, const char* key) {
     if ((nullptr == obj) || (nullptr == key)) {
-        HMI_ERROR("wm", "Argument is nullptr!!!");
+        HMI_ERROR("wm:jh", "Argument is nullptr!!!");
         return 0;
     }
 
     json_object* tmp;
     if (!json_object_object_get_ex(obj, key, &tmp)) {
-        HMI_DEBUG("wm", "Not found key \"%s\"", key);
+        HMI_DEBUG("wm:jh", "Not found key \"%s\"", key);
         return 0;
     }
 
     return json_object_get_boolean(tmp);
 }
 
+int inputJsonFilie(const char* file, json_object** obj) {
+    const int input_size = 128;
+    int ret = -1;
+
+    if ((nullptr == file) || (nullptr == obj)) {
+        HMI_ERROR("wm:jh", "Argument is nullptr!!!");
+        return ret;
+    }
+
+    HMI_DEBUG("wm:jh", "Input file: %s", file);
+
+    // Open json file
+    FILE *fp = fopen(file, "rb");
+    if (nullptr == fp) {
+        HMI_ERROR("wm:jh", "Could not open file");
+        return ret;
+    }
+
+    // Parse file data
+    struct json_tokener *tokener = json_tokener_new();
+    enum json_tokener_error json_error;
+    char buffer[input_size];
+    int block_cnt = 1;
+    while (1) {
+        size_t len = fread(buffer, sizeof(char), input_size, fp);
+        *obj = json_tokener_parse_ex(tokener, buffer, len);
+        if (nullptr != *obj) {
+            HMI_DEBUG("wm:jh", "File input is success");
+            ret = 0;
+            break;
+        }
+
+        json_error = json_tokener_get_error(tokener);
+        if ((json_tokener_continue != json_error)
+            || (input_size > len)) {
+            HMI_ERROR("wm:jh", "Failed to parse file (byte:%d err:%s)",
+                      (input_size * block_cnt), json_tokener_error_desc(json_error));
+            HMI_ERROR("wm:jh", "\n%s", buffer);
+            *obj = nullptr;
+            break;
+        }
+        block_cnt++;
+    }
+
+    // Close json file
+    fclose(fp);
+
+    // Free json_tokener
+    json_tokener_free(tokener);
+
+    return ret;
+}
+
 } // namespace jh