Gitlab@AEI Hannover will go down for maintenance on 2020-09-21 at 4:00 UTC. The service will be unavailable for up to 24 hours. If you have questions about this please contact atlas_admin@aei.mpg.de

Unverified Commit 04f71bd5 authored by Vitalii Koshura's avatar Vitalii Koshura

Merge branch 'dpa_memset' into upstream_master

Signed-off-by: default avatarVitalii Koshura <lestat.de.lionkur@gmail.com>
parents 504a2bb4 35749539
......@@ -1082,7 +1082,7 @@ int ACTIVE_TASK::handle_upload_files() {
"Can't find uploadable file %s", p
);
}
snprintf(path, sizeof(path), "%s/%s", slot_dir, buf);
snprintf(path, sizeof(path), "%.*s/%.*s", DIR_LEN, slot_dir, FILE_LEN, buf);
delete_project_owned_file(path, true); // delete the link file
}
}
......
......@@ -542,7 +542,7 @@ void ACTIVE_TASK::handle_exited_app(int stat) {
snprintf(err_msg, sizeof(err_msg),
"process exited with code %d (0x%x, %d)",
result->exit_status, result->exit_status,
(-1<<8)|result->exit_status
(~0xff)|result->exit_status
);
gstate.report_result_error(*result, err_msg);
} else {
......@@ -1554,7 +1554,7 @@ void ACTIVE_TASK_SET::get_msgs() {
}
if (atp->get_app_status_msg()) {
if (old_time != atp->checkpoint_cpu_time) {
char buf[256];
char buf[512];
sprintf(buf, "%s checkpointed", atp->result->name);
if (atp->overdue_checkpoint) {
gstate.request_schedule_cpus(buf);
......
......@@ -351,7 +351,7 @@ static int create_dirs_for_logical_name(
static void prepend_prefix(APP_VERSION* avp, char* in, char* out, int len) {
if (strlen(avp->file_prefix)) {
snprintf(out, len, "%s/%s", avp->file_prefix, in);
snprintf(out, len, "%.16s/%.200s", avp->file_prefix, in);
} else {
strlcpy(out, in, len);
}
......@@ -467,7 +467,7 @@ int ACTIVE_TASK::link_user_files() {
}
int ACTIVE_TASK::copy_output_files() {
char slotfile[256], projfile[256], open_name[256];
char slotfile[MAXPATHLEN], projfile[256], open_name[256];
unsigned int i;
for (i=0; i<result->output_files.size(); i++) {
FILE_REF& fref = result->output_files[i];
......@@ -476,7 +476,7 @@ int ACTIVE_TASK::copy_output_files() {
prepend_prefix(
app_version, fref.open_name, open_name, sizeof(open_name)
);
snprintf(slotfile, sizeof(slotfile), "%s/%s", slot_dir, open_name);
snprintf(slotfile, sizeof(slotfile), "%.*s/%.*s", DIR_LEN, slot_dir, FILE_LEN, open_name);
get_pathname(fip, projfile, sizeof(projfile));
int retval = boinc_rename(slotfile, projfile);
// the rename fails if the output file isn't there.
......@@ -1108,7 +1108,7 @@ int ACTIVE_TASK::start(bool test) {
if (test) {
strcpy(buf, exec_path);
} else {
snprintf(buf, sizeof(buf), "../../%s", exec_path);
snprintf(buf, sizeof(buf), "../../%.1024s", exec_path);
}
if (g_use_sandbox) {
char switcher_path[MAXPATHLEN];
......@@ -1167,7 +1167,7 @@ error:
//
gstate.input_files_available(result, true);
char err_msg[4096];
snprintf(err_msg, sizeof(err_msg), "couldn't start app: %s", buf);
snprintf(err_msg, sizeof(err_msg), "couldn't start app: %.256s", buf);
gstate.report_result_error(*result, err_msg);
if (log_flags.task_debug) {
msg_printf(wup->project, MSG_INFO,
......
......@@ -426,7 +426,7 @@ int main(int argc, char** argv) {
}
} else if (!strcmp(cmd, "--set_host_info")) {
HOST_INFO h;
memset(&h, 0, sizeof(h));
h.clear();
char* pn = next_arg(argc, argv, i);
safe_strcpy(h.product_name, pn);
retval = rpc.set_host_info(h);
......
......@@ -55,7 +55,7 @@ void show_message(
PROJ_AM *p, char* msg, int priority, bool is_html, const char* link
) {
const char* x;
char message[1024], event_msg[1024], evt_message[2048];
char message[1024], event_msg[2048], evt_message[2048];
double t = dtime();
char* time_string = time_to_string(t);
......@@ -78,7 +78,7 @@ void show_message(
snprintf(event_msg, sizeof(event_msg), "[error] %s", message);
break;
case MSG_SCHEDULER_ALERT:
snprintf(event_msg, sizeof(event_msg), "%s: %s",
snprintf(event_msg, sizeof(event_msg), "%.64s: %s",
_("Message from server"), message
);
break;
......
......@@ -226,8 +226,14 @@ struct DAILY_STATS {
double host_expavg_credit;
double day;
void clear();
DAILY_STATS() {clear();}
DAILY_STATS(int){}
void clear() {
static const DAILY_STATS x(0);
*this = x;
}
DAILY_STATS() {
clear();
}
int parse(FILE*);
};
bool operator < (const DAILY_STATS&, const DAILY_STATS&);
......@@ -273,7 +279,14 @@ struct APP {
bool ignore;
#endif
APP() {memset(this, 0, sizeof(APP));}
APP(int){}
void clear() {
static const APP x(0);
*this = x;
}
APP(){
clear();
}
int parse(XML_PARSER&);
int write(MIOFILE&);
};
......
......@@ -1227,7 +1227,7 @@ bool CLIENT_STATE::enforce_run_list(vector<RESULT*>& run_list) {
// and prune those that can't be assigned
//
assign_coprocs(run_list);
bool scheduled_mt = false;
//bool scheduled_mt = false;
// prune jobs that don't fit in RAM or that exceed CPU usage limits.
// Mark the rest as SCHEDULED
......@@ -1337,9 +1337,11 @@ bool CLIENT_STATE::enforce_run_list(vector<RESULT*>& run_list) {
continue;
}
#if 0
if (rp->avp->avg_ncpus > 1) {
scheduled_mt = true;
}
#endif
ncpus_used += rp->avp->avg_ncpus;
atp->next_scheduler_state = CPU_SCHED_SCHEDULED;
ram_left -= wss;
......
......@@ -358,10 +358,6 @@ int CLIENT_STATE::parse_account_files() {
return 0;
}
void DAILY_STATS::clear() {
memset(this, 0, sizeof(DAILY_STATS));
}
int DAILY_STATS::parse(FILE* in) {
MIOFILE mf;
XML_PARSER xp(&mf);
......
......@@ -175,7 +175,6 @@ int cpu_benchmarks(BENCHMARK_DESC* bdp) {
double vax_mips, int_loops=0, int_time=0, fp_time;
bdp->error_str[0] = '\0';
host_info.clear_host_info();
#if defined(ANDROID) && defined(__arm__)
// check for FP accelerator: VFP, Neon, or none;
......
......@@ -192,7 +192,7 @@ int FILE_INFO::verify_file(
// see if we need to unzip it
//
if (download_gzipped && !boinc_file_exists(pathname)) {
char gzpath[MAXPATHLEN];
char gzpath[MAXPATHLEN+16];
snprintf(gzpath, sizeof(gzpath), "%s.gz", pathname);
if (boinc_file_exists(gzpath) ) {
if (allow_async && nbytes > ASYNC_FILE_THRESHOLD) {
......@@ -417,7 +417,7 @@ bool CLIENT_STATE::create_and_delete_pers_file_xfers() {
// If this was a compressed download, rename .gzt to .gz
//
if (fip->download_gzipped) {
char path[MAXPATHLEN], from_path[MAXPATHLEN], to_path[MAXPATHLEN];
char path[MAXPATHLEN], from_path[MAXPATHLEN+16], to_path[MAXPATHLEN+16];
get_pathname(fip, path, sizeof(path));
snprintf(from_path, sizeof(from_path), "%s.gzt", path);
snprintf(to_path, sizeof(to_path), "%s.gz", path);
......
......@@ -98,7 +98,7 @@ static void write_rss_feed_descs(MIOFILE& fout, vector<RSS_FEED>& feeds) {
}
static void write_project_feed_list(PROJ_AM* p) {
char buf[256];
char buf[MAXPATHLEN];
project_feed_list_file_name(p, buf, sizeof(buf));
FILE* f = fopen(buf, "w");
if (!f) return;
......@@ -619,7 +619,7 @@ void NOTICES::write(int seqno, GUI_RPC_CONN& grc, bool public_only) {
void RSS_FEED::feed_file_name(char* path, int len) {
char buf[256];
escape_project_url(url_base, buf);
snprintf(path, len, NOTICES_DIR"/%s.xml", buf);
snprintf(path, len, NOTICES_DIR"/%.128s.xml", buf);
}
void RSS_FEED::archive_file_name(char* path, int len) {
......
......@@ -1187,7 +1187,7 @@ void CLIENT_STATE::check_project_timeout() {
PROJECT* p = projects[i];
if (p->possibly_backed_off && now > p->min_rpc_time) {
p->possibly_backed_off = false;
char buf[256];
char buf[1024];
snprintf(buf, sizeof(buf), "Backoff ended for %s", p->get_project_name());
request_work_fetch(buf);
}
......
......@@ -243,7 +243,7 @@ void delete_old_slot_dirs() {
// Clean these up here. (We must do this before deleting the
// INIT_DATA_FILE, if any, from each slot directory.)
//
snprintf(init_data_path, sizeof(init_data_path), "%s/%s", path, INIT_DATA_FILE);
snprintf(init_data_path, sizeof(init_data_path), "%.*s/%.*s", DIR_LEN, path, FILE_LEN, INIT_DATA_FILE);
shmem_seg_name = ftok(init_data_path, 1);
if (shmem_seg_name != -1) {
destroy_shmem(shmem_seg_name);
......
......@@ -34,7 +34,7 @@ class FILE_XFER : public HTTP_OP {
public:
FILE_INFO* fip;
char pathname[256];
char header[4096];
char header[8192];
bool file_size_query;
bool is_upload;
double starting_size;
......
......@@ -201,7 +201,7 @@ void COPROCS::correlate_gpus(
IGNORE_GPU_INSTANCE &ignore_gpu_instance
) {
unsigned int i;
char buf[256], buf2[256];
char buf[256], buf2[1024];
nvidia.correlate(use_all, ignore_gpu_instance[PROC_TYPE_NVIDIA_GPU]);
ati.correlate(use_all, ignore_gpu_instance[PROC_TYPE_AMD_GPU]);
......@@ -502,7 +502,7 @@ int COPROCS::read_coproc_info_file(vector<string> &warnings) {
} else {
my_nvidia_gpu.device_num = (int)nvidia_gpus.size();
my_nvidia_gpu.pci_info = my_nvidia_gpu.pci_infos[0];
memset(&my_nvidia_gpu.pci_infos[0], 0, sizeof(struct PCI_INFO));
my_nvidia_gpu.pci_infos[0].clear();
nvidia_gpus.push_back(my_nvidia_gpu);
}
continue;
......@@ -519,10 +519,10 @@ int COPROCS::read_coproc_info_file(vector<string> &warnings) {
}
if (xp.match_tag("ati_opencl")) {
memset(&ati_opencl, 0, sizeof(ati_opencl));
ati_opencl.clear();
retval = ati_opencl.parse(xp, "/ati_opencl");
if (retval) {
memset(&ati_opencl, 0, sizeof(ati_opencl));
ati_opencl.clear();
} else {
ati_opencl.is_used = COPROC_IGNORED;
ati_opencls.push_back(ati_opencl);
......@@ -531,10 +531,10 @@ int COPROCS::read_coproc_info_file(vector<string> &warnings) {
}
if (xp.match_tag("nvidia_opencl")) {
memset(&nvidia_opencl, 0, sizeof(nvidia_opencl));
nvidia_opencl.clear();
retval = nvidia_opencl.parse(xp, "/nvidia_opencl");
if (retval) {
memset(&nvidia_opencl, 0, sizeof(nvidia_opencl));
nvidia_opencl.clear();
} else {
nvidia_opencl.is_used = COPROC_IGNORED;
nvidia_opencls.push_back(nvidia_opencl);
......@@ -543,10 +543,10 @@ int COPROCS::read_coproc_info_file(vector<string> &warnings) {
}
if (xp.match_tag("intel_gpu_opencl")) {
memset(&intel_gpu_opencl, 0, sizeof(intel_gpu_opencl));
intel_gpu_opencl.clear();
retval = intel_gpu_opencl.parse(xp, "/intel_gpu_opencl");
if (retval) {
memset(&intel_gpu_opencl, 0, sizeof(intel_gpu_opencl));
intel_gpu_opencl.clear();
} else {
intel_gpu_opencl.is_used = COPROC_IGNORED;
intel_gpu_opencls.push_back(intel_gpu_opencl);
......@@ -555,10 +555,10 @@ int COPROCS::read_coproc_info_file(vector<string> &warnings) {
}
if (xp.match_tag("other_opencl")) {
memset(&other_opencl, 0, sizeof(other_opencl));
other_opencl.clear();
retval = other_opencl.parse(xp, "/other_opencl");
if (retval) {
memset(&other_opencl, 0, sizeof(other_opencl));
other_opencl.clear();
} else {
other_opencl.is_used = COPROC_USED;
other_opencls.push_back(other_opencl);
......@@ -567,10 +567,10 @@ int COPROCS::read_coproc_info_file(vector<string> &warnings) {
}
if (xp.match_tag("opencl_cpu_prop")) {
memset(&cpu_opencl, 0, sizeof(cpu_opencl));
cpu_opencl.clear();
retval = cpu_opencl.parse(xp);
if (retval) {
memset(&cpu_opencl, 0, sizeof(cpu_opencl));
cpu_opencl.clear();
} else {
cpu_opencl.opencl_prop.is_used = COPROC_IGNORED;
cpu_opencls.push_back(cpu_opencl);
......
......@@ -392,7 +392,7 @@ void* cudalib = NULL;
warnings.push_back(buf);
for (j=0; j<cuda_ndevs; j++) {
memset(&cc.prop, 0, sizeof(cc.prop));
cc.prop.clear();
CUdevice device;
retval = (*p_cuDeviceGet)(&device, j);
if (retval) {
......
......@@ -320,7 +320,7 @@ void COPROCS::get_opencl(
}
for (device_index=0; device_index<num_devices; ++device_index) {
memset(&prop, 0, sizeof(prop));
prop.clear();
prop.device_id = devices[device_index];
strlcpy(
prop.opencl_platform_version, platform_version,
......@@ -406,7 +406,7 @@ void COPROCS::get_opencl(
}
for (device_index=0; device_index<num_devices; ++device_index) {
memset(&prop, 0, sizeof(prop));
prop.clear();
prop.device_id = devices[device_index];
strlcpy(
prop.opencl_platform_version, platform_version,
......
......@@ -1545,7 +1545,7 @@ vector<AUTH_INFO> auth_infos;
// check HTTP authentication info
//
bool valid_auth(int id, long seqno, char* hash, char* request) {
char buf[256], my_hash[256];
char buf[1024], my_hash[256];
//printf("valid_auth: id %d seqno %ld hash %s\n", id, seqno, hash);
for (unsigned int i=0; i<auth_infos.size(); i++) {
AUTH_INFO& ai = auth_infos[i];
......
......@@ -1580,7 +1580,7 @@ static const struct dir_tty_dev {
vector<string> get_tty_list() {
// Create a list of all terminal devices on the system.
char devname[1024];
char fullname[1024];
char fullname[MAXPATHLEN];
int done,i=0;
vector<string> tty_list;
......@@ -1594,7 +1594,7 @@ vector<string> get_tty_list() {
if (!done && (strstr(devname,tty_patterns[i].dev) == devname)) {
// don't add anything starting with .
if (devname[0] != '.') {
sprintf(fullname,"%s/%s",tty_patterns[i].dir,devname);
sprintf(fullname,"%s/%s", tty_patterns[i].dir, devname);
tty_list.push_back(fullname);
}
}
......
......@@ -76,7 +76,7 @@ static void get_user_agent_string() {
BOINC_MAJOR_VERSION, BOINC_MINOR_VERSION, BOINC_RELEASE
);
if (strlen(gstate.client_brand)) {
char buf[256];
char buf[1024];
snprintf(buf, sizeof(buf), " (%s)", gstate.client_brand);
safe_strcat(g_user_agent_string, buf);
}
......
......@@ -60,7 +60,7 @@ public:
char m_url[1024];
char m_curl_ca_bundle_location[256];
// string needed for ssl support
char m_curl_user_credentials[128];
char m_curl_user_credentials[1024];
// string needed for proxy username/password
int content_length;
......
......@@ -158,7 +158,7 @@ void log_message_error(const char* msg, int error_code) {
}
#ifndef _WIN32
static void signal_handler(int signum) {
static void signal_handler(int signum, siginfo_t*, void*) {
msg_printf(NULL, MSG_INFO, "Received signal %d", signum);
switch(signum) {
case SIGHUP:
......
......@@ -51,11 +51,6 @@
DAILY_XFER_HISTORY daily_xfer_history;
NET_STATUS net_status;
NET_STATS::NET_STATS() {
memset(&up, 0, sizeof(up));
memset(&down, 0, sizeof(down));
}
// called after file xfer to update rates
//
void NET_INFO::update(double nbytes, double dt) {
......@@ -102,7 +97,7 @@ int NET_STATS::write(MIOFILE& out) {
}
int NET_STATS::parse(XML_PARSER& xp) {
memset(this, 0, sizeof(NET_STATS));
clear();
while (!xp.get_tag()) {
if (xp.match_tag("/net_stats")) return 0;
if (xp.parse_double("bwup", up.max_rate)) continue;
......
......@@ -48,7 +48,6 @@ struct NET_INFO {
// when avg_rate was last updated
void update(double nbytes, double dt);
// updates the above vars
};
class NET_STATS {
......@@ -56,7 +55,14 @@ public:
NET_INFO up;
NET_INFO down;
NET_STATS();
NET_STATS(int){}
void clear() {
static const NET_STATS x(0);
*this = x;
}
NET_STATS() {
clear();
}
int write(MIOFILE&);
int parse(XML_PARSER&);
......
......@@ -430,7 +430,7 @@ int RESULT::write_gui(MIOFILE& out) {
}
} else if (avp->missing_coproc) {
snprintf(resources, sizeof(resources),
"%.3g %s + %s GPU (missing)",
"%.3g %s + %.12s GPU (missing)",
avp->avg_ncpus,
cpu_string(avp->avg_ncpus),
avp->missing_coproc_name
......
......@@ -346,7 +346,7 @@ int client_clean_out_dir(
if (except && !strcmp(except, filename)) {
continue;
}
snprintf(path, sizeof(path), "%s/%s", dirpath, filename);
snprintf(path, sizeof(path), "%.*s/%.*s", DIR_LEN, dirpath, FILE_LEN, filename);
if (is_dir(path)) {
retval = client_clean_out_dir(path, NULL);
if (retval) final_retval = retval;
......
......@@ -761,10 +761,6 @@ void SIM_RESULTS::divide(int n) {
monotony /= n;
}
void SIM_RESULTS::clear() {
memset(this, 0, sizeof(*this));
}
void PROJECT::print_results(FILE* f, SIM_RESULTS& sr) {
double t = project_results.flops_used;
double gt = sr.flops_used;
......
......@@ -34,12 +34,19 @@ struct SIM_RESULTS {
double idle_frac;
int nrpcs;
SIM_RESULTS(int){}
void clear() {
static const SIM_RESULTS x(0);
*this = x;
}
SIM_RESULTS() {
clear();
}
void compute_figures_of_merit();
void print(FILE* f, bool human_readable=false);
void parse(FILE* f);
void add(SIM_RESULTS& r);
void divide(int);
void clear();
};
struct PROJECT_RESULTS {
......
......@@ -325,8 +325,13 @@ struct PROJECT_WORK_FETCH {
// If we're uploading but a resource is idle, make a work request.
// If this succeeds, clear the flag.
PROJECT_WORK_FETCH(int) {}
void clear() {
static const PROJECT_WORK_FETCH x(0);
*this = x;
}
PROJECT_WORK_FETCH() {
memset(this, 0, sizeof(*this));
clear();
}
void reset(PROJECT*);
void rr_init(PROJECT*);
......
......@@ -269,7 +269,7 @@ void APP_INIT_DATA::clear() {
host_total_credit = 0;
host_expavg_credit = 0;
resource_share_fraction = 0;
host_info.clear_host_info();
host_info.clear();
proxy_info.clear();
global_prefs.defaults();
starting_elapsed_time = 0;
......
......@@ -39,12 +39,10 @@
using std::string;
LOG_FLAGS::LOG_FLAGS() {
init();
}
void LOG_FLAGS::init() {
memset(this, 0, sizeof(LOG_FLAGS));
static const LOG_FLAGS x;
*this = x;
// on by default (others are off by default)
//
task = true;
......@@ -55,6 +53,7 @@ void LOG_FLAGS::init() {
// Parse log flag preferences
//
int LOG_FLAGS::parse(XML_PARSER& xp) {
init();
while (!xp.get_tag()) {
if (!xp.is_tag) {
continue;
......@@ -719,7 +718,7 @@ int APP_CONFIG::parse_gpu_versions(
continue;
}
if (log_flags.unparsed_xml) {
snprintf(buf, sizeof(buf), "Unparsed line in app_config.xml: %s", xp.parsed_tag);
snprintf(buf, sizeof(buf), "Unparsed line in app_config.xml: %.128s", xp.parsed_tag);
mv.push_back(string(buf));
}
}
......@@ -729,7 +728,8 @@ int APP_CONFIG::parse_gpu_versions(
int APP_CONFIG::parse(XML_PARSER& xp, MSG_VEC& mv, LOG_FLAGS& log_flags) {
char buf[1024];
memset(this, 0, sizeof(APP_CONFIG));
static const APP_CONFIG init;
*this = init;
while (!xp.get_tag()) {
if (xp.match_tag("/app")) return 0;
......@@ -755,7 +755,7 @@ int APP_CONFIG::parse(XML_PARSER& xp, MSG_VEC& mv, LOG_FLAGS& log_flags) {
// unparsed XML not considered an error; maybe it should be?
//
if (log_flags.unparsed_xml) {
snprintf(buf, sizeof(buf), "Unparsed line in app_config.xml: %s", xp.parsed_tag);
snprintf(buf, sizeof(buf), "Unparsed line in app_config.xml: %.128s", xp.parsed_tag);
mv.push_back(string(buf));
}
xp.skip_unexpected(log_flags.unparsed_xml, "APP_CONFIG::parse");
......@@ -768,11 +768,12 @@ int APP_VERSION_CONFIG::parse(
XML_PARSER& xp, MSG_VEC& mv, LOG_FLAGS& log_flags
) {
char buf[1024];
memset(this, 0, sizeof(APP_VERSION_CONFIG));
static const APP_VERSION_CONFIG init;
*this = init;
while (!xp.get_tag()) {
if (!xp.is_tag) {
snprintf(buf, sizeof(buf), "unexpected text '%s' in app_config.xml", xp.parsed_tag);
snprintf(buf, sizeof(buf), "unexpected text '%.128s' in app_config.xml", xp.parsed_tag);
mv.push_back(string(buf));
return ERR_XML_PARSE;
}
......@@ -783,7 +784,7 @@ int APP_VERSION_CONFIG::parse(
if (xp.parse_double("avg_ncpus", avg_ncpus)) continue;
if (xp.parse_double("ngpus", ngpus)) continue;
if (log_flags.unparsed_xml) {
snprintf(buf, sizeof(buf), "Unparsed line in app_config.xml: %s", xp.parsed_tag);
snprintf(buf, sizeof(buf), "Unparsed line in app_config.xml: %.128s", xp.parsed_tag);
mv.push_back(string(buf));
}
xp.skip_unexpected(log_flags.unparsed_xml, "APP_VERSION_CONFIG::parse");
......@@ -798,7 +799,7 @@ int APP_CONFIGS::parse(XML_PARSER& xp, MSG_VEC& mv, LOG_FLAGS& log_flags) {
clear();
while (!xp.get_tag()) {
if (!xp.is_tag) {
snprintf(buf, sizeof(buf), "unexpected text '%s' in app_config.xml", xp.parsed_tag);
snprintf(buf, sizeof(buf), "unexpected text '%.128s' in app_config.xml", xp.parsed_tag);
mv.push_back(string(buf));
return ERR_XML_PARSE;
}
......@@ -833,7 +834,7 @@ int APP_CONFIGS::parse(XML_PARSER& xp, MSG_VEC& mv, LOG_FLAGS& log_flags) {
if (xp.parse_bool("report_results_immediately", report_results_immediately)) {
continue;
}
snprintf(buf, sizeof(buf), "Unknown tag in app_config.xml: %s", xp.parsed_tag);
snprintf(buf, sizeof(buf), "Unknown tag in app_config.xml: %.128s", xp.parsed_tag);
mv.push_back(string(buf));
xp.skip_unexpected(log_flags.unparsed_xml, "APP_CONFIGS::parse");
......
......@@ -121,7 +121,7 @@ struct LOG_FLAGS {
bool work_fetch_debug;