blob: 09d211ef905aaadad92e6512a973a69af2f67f95 [file] [log] [blame]
Mike Dodd8cfa7022010-11-17 11:12:26 -08001/**
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#include "locate_images.h"
16
17#include <iostream>
18#include <set>
19
20using namespace std;
21
22namespace {
23
24set<string> reported_images_error;
25
26}
27
28void report_image_error(string const & image, image_error error, bool fatal,
29 extra_images const & extra)
30{
31 if (error == image_ok)
32 return;
33
34 string image_name = extra.get_archive_path() + image;
35
36 if (reported_images_error.find(image_name) ==
37 reported_images_error.end()) {
38 reported_images_error.insert(image_name);
39
40 // FIXME: hacky
41 if (error == image_not_found && is_prefix(image, "anon "))
42 return;
43
44 cerr << (fatal ? "error: " : "warning: ");
45 cerr << image_name << ' ';
46
47 switch (error) {
48 case image_not_found:
49 cerr << "could not be found.\n";
50 break;
51
52 case image_unreadable:
53 cerr << "could not be read.\n";
54 break;
55
56 case image_multiple_match:
57 cerr << "matches more than one file: "
58 "detailed profile will not be provided.\n";
59 break;
60
61 case image_format_failure:
62 cerr << "is not in a usable binary format.\n";
63 break;
64
65 case image_ok:
66 break;
67 }
68 }
69}
70
71
72void report_image_error(inverted_profile const & profile, bool fatal,
73 extra_images const & extra)
74{
75 report_image_error(profile.image, profile.error, fatal, extra);
76}
77
78
79void report_image_errors(list<inverted_profile> const & plist,
80 extra_images const & extra)
81{
82 list<inverted_profile>::const_iterator it = plist.begin();
83 list<inverted_profile>::const_iterator const end = plist.end();
84
85 for (; it != end; ++it)
86 report_image_error(*it, false, extra);
87}