Home | History | Annotate | Download | only in libpp
      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 #include "locate_images.h"
     16 
     17 #include <iostream>
     18 #include <set>
     19 
     20 using namespace std;
     21 
     22 namespace {
     23 
     24 set<string> reported_images_error;
     25 
     26 }
     27 
     28 void 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 
     72 void 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 
     79 void 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 }
     88