static void verbose_error(bool verbose, int err, const char *fmt, ...) { char *s = ""; char *at = ""; if (fmt) { va_list argp; int size; va_start(argp, fmt); size = vsnprintf(NULL, 0, fmt, argp); va_end(argp); if (size < 0) { return; } at = malloc(size + 1); if (at == NULL) { return; } va_start(argp, fmt); vsnprintf(at, size, fmt, argp); va_end(argp); at[size] = 0; s = " at "; } if (verbose) { #ifndef USE_MINGW if (err == -EOVERFLOW) { sparse_print_verbose("EOF while reading file%s%s\n", s, at); } else #endif if (err == -EINVAL) { sparse_print_verbose("Invalid sparse file format%s%s\n", s, at); } else if (err == -ENOMEM) { sparse_print_verbose("Failed allocation while reading file%s%s\n", s, at); } else { sparse_print_verbose("Unknown error %d%s%s\n", err, s, at); } } if (fmt) { free(at); } }
static void verbose_error(bool verbose, int err, const char* fmt, ...) { if (!verbose) return; std::string msg = ErrorString(err); if (fmt) { msg += " at "; va_list argp; va_start(argp, fmt); android::base::StringAppendV(&msg, fmt, argp); va_end(argp); } sparse_print_verbose("%s\n", msg.c_str()); }