/**
* @file image_errors.cpp
* Report errors in images
*
* @remark Copyright 2002 OProfile authors
* @remark Read the file COPYING
*
* @author John Levon
*/
#include "image_errors.h"
#include "arrange_profiles.h"
#include "string_manip.h"
#include "locate_images.h"
#include <iostream>
#include <set>
using namespace std;
namespace {
set<string> reported_images_error;
}
void report_image_error(string const & image, image_error error, bool fatal,
extra_images const & extra)
{
if (error == image_ok)
return;
string image_name = extra.get_archive_path() + image;
if (reported_images_error.find(image_name) ==
reported_images_error.end()) {
reported_images_error.insert(image_name);
// FIXME: hacky
if (error == image_not_found && is_prefix(image, "anon "))
return;
cerr << (fatal ? "error: " : "warning: ");
cerr << image_name << ' ';
switch (error) {
case image_not_found:
cerr << "could not be found.\n";
break;
case image_unreadable:
cerr << "could not be read.\n";
break;
case image_multiple_match:
cerr << "matches more than one file: "
"detailed profile will not be provided.\n";
break;
case image_format_failure:
cerr << "is not in a usable binary format.\n";
break;
case image_ok:
break;
}
}
}
void report_image_error(inverted_profile const & profile, bool fatal,
extra_images const & extra)
{
report_image_error(profile.image, profile.error, fatal, extra);
}
void report_image_errors(list<inverted_profile> const & plist,
extra_images const & extra)
{
list<inverted_profile>::const_iterator it = plist.begin();
list<inverted_profile>::const_iterator const end = plist.end();
for (; it != end; ++it)
report_image_error(*it, false, extra);
}