diff options
Diffstat (limited to 'src/hs-helper.cpp')
-rw-r--r-- | src/hs-helper.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/hs-helper.cpp b/src/hs-helper.cpp index 50a3ae1..159668e 100644 --- a/src/hs-helper.cpp +++ b/src/hs-helper.cpp @@ -17,6 +17,7 @@ #include <string.h> #include <cstdarg> #include "hs-helper.h" +#include <unistd.h> const char* evlist[] = { @@ -272,3 +273,51 @@ std::string get_application_id(const afb_req_t request) return appid; } + +/** + * read json file + * + * #### Parameters + * - file : file name + * - obj : json_object + * + * #### Return + * 0 : read success + * 1 : read fail + * + */ +int readJsonFile(const char* file, struct json_object **obj) +{ + *obj = nullptr; + int ret = -1; + FILE *fp = fopen(file, "rb"); + if(fp == nullptr) { + AFB_ERROR("open %s failed", file); + return ret; + } + + const int buf_size = 128; + char buf[buf_size]; + struct json_tokener *tokener = json_tokener_new(); + enum json_tokener_error json_error; + while(1) { + size_t len = fread(buf, sizeof(char), buf_size, fp); + *obj = json_tokener_parse_ex(tokener, buf, len); + if(nullptr != *obj) { + AFB_NOTICE("read %s success", file); + ret = 0; + break; + } + + json_error = json_tokener_get_error(tokener); + if ((json_tokener_continue != json_error) || (buf_size > len)) { + AFB_ERROR("parse %s error", file); + *obj = nullptr; + break; + } + } + + fclose(fp); + json_tokener_free(tokener); + return ret; +} |