boinc/lib/wslinfo.cpp

95 lines
2.3 KiB
C++

// This file is part of BOINC.
// http://boinc.berkeley.edu
// Copyright (C) 2018 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation,
// either version 3 of the License, or (at your option) any later version.
//
// BOINC is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
#ifdef _WIN64
#include "wslinfo.h"
WSL::WSL(const std::string& distro) {
clear();
distro_name = distro;
}
void WSL::clear() {
name = "";
version = "";
is_default = false;
}
void WSL::write_xml(MIOFILE& f) {
char dn[256], n[256], v[256];
xml_escape(distro_name.c_str(), dn, sizeof(dn));
xml_escape(name.c_str(), n, sizeof(n));
xml_escape(version.c_str(), v, sizeof(v));
f.printf(
" <%s>\n"
" <name>%s</name>\n"
" <version>%s</version>\n"
" <is_default>%d</is_default>\n"
" </%s>\n",
dn,
n,
v,
is_default ? 1 : 0,
dn
);
}
int WSL::parse(XML_PARSER& xp) {
clear();
while (!xp.get_tag()) {
if (!distro_name.empty() && xp.match_tag(std::string("/" + distro_name).c_str())) {
return 0;
}
if (xp.parse_string("name", name)) continue;
if (xp.parse_string("version", version)) continue;
if (xp.parse_bool("is_default", is_default)) continue;
}
return ERR_XML_PARSE;
}
WSLS::WSLS() {
clear();
}
void WSLS::clear() {
wsls.clear();
}
void WSLS::write_xml(MIOFILE& f) {
f.printf("<wsl>\n");
for (size_t i = 0; i < wsls.size(); ++i) {
wsls[i].write_xml(f);
}
f.printf("</wsl>\n");
}
int WSLS::parse(XML_PARSER& xp) {
clear();
while (!xp.get_tag()) {
if (xp.match_tag("/wsl")) {
return 0;
}
WSL wsl(xp.parsed_tag);
wsl.parse(xp);
wsls.push_back(wsl);
}
return ERR_XML_PARSE;
}
#endif // _WIN64