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