image_errors.cpp revision cc2ee177dbb3befca43e36cfc56778b006c3d050
1/**
2 * @file image_errors.cpp
3 * Report errors in images
4 *
5 * @remark Copyright 2002 OProfile authors
6 * @remark Read the file COPYING
7 *
8 * @author John Levon
9 */
10
11#include "image_errors.h"
12
13#include "arrange_profiles.h"
14#include "string_manip.h"
15
16#include <iostream>
17#include <set>
18
19using namespace std;
20
21namespace {
22
23set<string> reported_images_error;
24
25}
26
27void report_image_error(string const & image, image_error error, bool fatal)
28{
29	if (error == image_ok)
30		return;
31
32	if (reported_images_error.find(image) == reported_images_error.end()) {
33		reported_images_error.insert(image);
34
35		// FIXME: hacky
36		if (error == image_not_found && is_prefix(image, "anon "))
37			return;
38
39		cerr << (fatal ? "error: " : "warning: ");
40		cerr << image << ' ';
41
42		switch (error) {
43			case image_not_found:
44				cerr << "could not be found.\n";
45				break;
46
47			case image_unreadable:
48				cerr << "could not be read.\n";
49				break;
50
51			case image_multiple_match:
52				cerr << "matches more than one file: "
53				    "detailed profile will not be provided.\n";
54				break;
55
56			case image_format_failure:
57				cerr << "is not in a usable binary format.\n";
58				break;
59
60			case image_ok:
61				break;
62		}
63	}
64}
65
66
67void report_image_error(inverted_profile const & profile, bool fatal)
68{
69	report_image_error(profile.image, profile.error, fatal);
70}
71
72
73void report_image_errors(list<inverted_profile> const & plist)
74{
75	list<inverted_profile>::const_iterator it = plist.begin();
76	list<inverted_profile>::const_iterator const end = plist.end();
77
78	for (; it != end; ++it) {
79		report_image_error(*it, false);
80	}
81}
82