5#include "tinyxml/tinyxml.h"
7#include "libwfut/types.h"
8#include "libwfut/FileIO.h"
9#include "libwfut/ChannelFileList.h"
10#include "libwfut/Encoder.h"
14static int parseFile(TiXmlElement *element, FileObject &file) {
17 const char *fname = element->Attribute(TAG_filename.c_str());
21 sscanf(element->Attribute(TAG_version.c_str()),
"%d", &file.version);
22 sscanf(element->Attribute(TAG_crc32.c_str()),
"%lu", &file.crc32);
23 sscanf(element->Attribute(TAG_size.c_str()),
"%ld", &file.size);
25 const char *exec = element->Attribute(TAG_execute.c_str());
26 if (exec && strlen(exec) >= 4 && strncmp(exec,
"true", 4) == 0) file.execute =
true;
27 else file.execute =
false;
30 const char *deleted = element->Attribute(TAG_deleted.c_str());
31 if (deleted && strlen(deleted) >= 4 && strncmp(deleted,
"true", 4) == 0) file.deleted =
true;
32 else file.deleted =
false;
37static int parseFiles(TiXmlNode *node, ChannelFileList &files) {
40 const char *dir = node->ToElement()->Attribute(TAG_dir.c_str());
45 TiXmlElement *e = node->FirstChildElement(TAG_file);
50 e = e->NextSiblingElement();
56int parseFileList(
const std::string &filename, ChannelFileList &files) {
58 TiXmlDocument doc(filename);
60 if (!doc.LoadFile()) {
65 TiXmlNode *node = doc.FirstChild(TAG_filelist);
72 return parseFiles(node, files);
75int parseFileListXML(
const std::string &xml, ChannelFileList &files) {
79 doc.Parse(xml.c_str());
86 TiXmlNode *node = doc.FirstChild(TAG_filelist);
93 return parseFiles(node, files);
static std::string decodeString(const std::string &str)