blob: 0960be6eed15fd50d351a934bf89b507267b4d4a [file] [log] [blame]
Upstreamcc2ee171970-01-12 13:46:40 +00001/**
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}