int CONFIG::parse(FILE* f) { char tag[256]; MIOFILE mf; XML_PARSER xp(&mf); bool is_tag; mf.init_file(f); if (!xp.parse_start("cc_config")) { msg_printf(NULL, MSG_USER_ALERT, "Missing start tag in %s", CONFIG_FILE); return ERR_XML_PARSE; } while (!xp.get(tag, sizeof(tag), is_tag)) { if (!is_tag) { msg_printf(NULL, MSG_USER_ALERT, "Unexpected text %s in %s", tag, CONFIG_FILE ); continue; } if (!strcmp(tag, "/cc_config")) return 0; if (!strcmp(tag, "log_flags")) { log_flags.parse(xp); continue; } if (!strcmp(tag, "options")) { parse_options(xp); continue; } msg_printf(NULL, MSG_USER_ALERT, "Unparsed tag in %s: <%s>\n", CONFIG_FILE, tag ); xp.skip_unexpected(tag, true, "CONFIG.parse"); } msg_printf(NULL, MSG_USER_ALERT, "Missing end tag in %s", CONFIG_FILE); return ERR_XML_PARSE; }
int CC_CONFIG::parse_client(FILE* f) { MIOFILE mf; XML_PARSER xp(&mf); mf.init_file(f); if (!xp.parse_start("cc_config")) { msg_printf_notice(NULL, false, "https://boinc.berkeley.edu/manager_links.php?target=notice&controlid=config", "%s", _("Missing start tag in cc_config.xml") ); return ERR_XML_PARSE; } while (!xp.get_tag()) { if (!xp.is_tag) { msg_printf_notice(NULL, false, "https://boinc.berkeley.edu/manager_links.php?target=notice&controlid=config", "%s: %s", _("Unexpected text in cc_config.xml"), xp.parsed_tag ); continue; } if (xp.match_tag("/cc_config")) { notices.remove_notices(NULL, REMOVE_CONFIG_MSG); return 0; } if (xp.match_tag("log_flags")) { log_flags.parse(xp); continue; } if (xp.match_tag("options")) { int retval = parse_options_client(xp); if (retval) { msg_printf_notice(NULL, false, "https://boinc.berkeley.edu/manager_links.php?target=notice&controlid=config", "%s", _("Error in cc_config.xml options") ); } continue; } if (xp.match_tag("options/")) continue; if (xp.match_tag("log_flags/")) continue; msg_printf_notice(NULL, false, "https://boinc.berkeley.edu/manager_links.php?target=notice&controlid=config", "%s: <%s>", _("Unrecognized tag in cc_config.xml"), xp.parsed_tag ); xp.skip_unexpected(true, "CC_CONFIG.parse"); } msg_printf_notice(NULL, false, "https://boinc.berkeley.edu/manager_links.php?target=notice&controlid=config", "%s", _("Missing end tag in cc_config.xml") ); return ERR_XML_PARSE; }
int CONFIG::parse(XML_PARSER& xp, LOG_FLAGS& log_flags) { while (!xp.get_tag()) { if (!xp.is_tag) { continue; } if (xp.match_tag("/cc_config")) return 0; if (xp.match_tag("log_flags")) { log_flags.parse(xp); continue; } if (xp.match_tag("options")) { parse_options(xp); continue; } if (xp.match_tag("options/")) continue; if (xp.match_tag("log_flags/")) continue; } return ERR_XML_PARSE; }