mirror of https://github.com/BOINC/boinc.git
95 lines
2.3 KiB
C++
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
|