18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/**
28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file image_errors.cpp
38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * Report errors in images
48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2002 OProfile authors
68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING
78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author John Levon
98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */
108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "image_errors.h"
128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "arrange_profiles.h"
148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "string_manip.h"
158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "locate_images.h"
168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <iostream>
188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <set>
198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddusing namespace std;
218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddnamespace {
238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddset<string> reported_images_error;
258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddvoid report_image_error(string const & image, image_error error, bool fatal,
298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			extra_images const & extra)
308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	if (error == image_ok)
328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		return;
338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	string image_name = extra.get_archive_path() + image;
358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	if (reported_images_error.find(image_name) ==
378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	    reported_images_error.end()) {
388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		reported_images_error.insert(image_name);
398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		// FIXME: hacky
418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		if (error == image_not_found && is_prefix(image, "anon "))
428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			return;
438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		cerr << (fatal ? "error: " : "warning: ");
458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		cerr << image_name << ' ';
468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		switch (error) {
488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			case image_not_found:
498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd				cerr << "could not be found.\n";
508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd				break;
518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			case image_unreadable:
538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd				cerr << "could not be read.\n";
548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd				break;
558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			case image_multiple_match:
578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd				cerr << "matches more than one file: "
588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd				    "detailed profile will not be provided.\n";
598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd				break;
608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			case image_format_failure:
628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd				cerr << "is not in a usable binary format.\n";
638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd				break;
648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			case image_ok:
668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd				break;
678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		}
688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	}
698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddvoid report_image_error(inverted_profile const & profile, bool fatal,
738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			extra_images const & extra)
748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	report_image_error(profile.image, profile.error, fatal, extra);
768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddvoid report_image_errors(list<inverted_profile> const & plist,
808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			 extra_images const & extra)
818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	list<inverted_profile>::const_iterator it = plist.begin();
838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	list<inverted_profile>::const_iterator const end = plist.end();
848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	for (; it != end; ++it)
868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		report_image_error(*it, false, extra);
878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
88