helpers.cpp: Add new functions

- readFile()
 - parseJsonFromFile()
 - parseJsonFromString()

 parseJsonFromString() and parseJsonFromFile() use Json::CharReader
 instead of the obsolete function Json::Reader


Origin commit data
------------------
Commit: 05d8ed4105
Author: Michael Liebmann <tuxcode.bbg@gmail.com>
Date: 2017-09-19 (Tue, 19 Sep 2017)

Origin message was:
------------------
helpers.cpp: Add new functions

 - readFile()
 - parseJsonFromFile()
 - parseJsonFromString()

 parseJsonFromString() and parseJsonFromFile() use Json::CharReader
 instead of the obsolete function Json::Reader
This commit is contained in:
Michael Liebmann
2017-09-19 21:38:38 +02:00
parent ba2c0e22b7
commit 8641bcd5ee
3 changed files with 83 additions and 0 deletions

View File

@@ -42,6 +42,7 @@
#include <stdarg.h>
#include <algorithm>
#include <mntent.h>
#include <fstream>
#include <linux/hdreg.h>
#include <linux/fs.h>
#include "debug.h"
@@ -49,6 +50,7 @@
#include <driver/fontrenderer.h>
//#include <driver/framebuffer.h>
#include <system/helpers.h>
#include <system/helpers-json.h>
#include <gui/update_ext.h>
#include <libmd5sum.h>
#define MD5_DIGEST_LENGTH 16
@@ -1445,3 +1447,51 @@ string readLink(string lnk)
return "";
}
string readFile(string file)
{
string ret_s;
ifstream tmpData(file.c_str(), ifstream::binary);
if (tmpData.is_open()) {
tmpData.seekg(0, tmpData.end);
int length = tmpData.tellg();
tmpData.seekg(0, tmpData.beg);
char* buffer = new char[length+1];
tmpData.read(buffer, length);
tmpData.close();
buffer[length] = '\0';
ret_s = (string)buffer;
delete [] buffer;
}
else {
cerr << "Error read " << file << endl;
return "";
}
return ret_s;
}
bool parseJsonFromFile(string& jFile, Json::Value *root, string *errMsg)
{
string jData = readFile(jFile);
bool ret = parseJsonFromString(jData, root, errMsg);
jData.clear();
return ret;
}
bool parseJsonFromString(string& jData, Json::Value *root, string *errMsg)
{
Json::CharReaderBuilder builder;
Json::CharReader* reader(builder.newCharReader());
JSONCPP_STRING errs = "";
const char* jData_c = jData.c_str();
bool ret = reader->parse(jData_c, jData_c + strlen(jData_c), root, &errs);
if (!ret || (!errs.empty())) {
ret = false;
if (errMsg != NULL)
*errMsg = errs;
}
delete reader;
return ret;
}