/** * @file filename_spec.cpp * Container holding a sample filename split into its components * * @remark Copyright 2003 OProfile authors * @remark Read the file COPYING * * @author Philippe Elie */ #include <string> #include "filename_spec.h" #include "parse_filename.h" #include "generic_spec.h" #include "locate_images.h" using namespace std; filename_spec::filename_spec(string const & filename, extra_images const & extra) { set_sample_filename(filename, extra); } filename_spec::filename_spec() : image("*"), lib_image("*") { } bool filename_spec::match(filename_spec const & rhs, string const & binary) const { if (!tid.match(rhs.tid) || !cpu.match(rhs.cpu) || !tgid.match(rhs.tgid) || count != rhs.count || unitmask != rhs.unitmask || event != rhs.event) { return false; } if (binary.empty()) return image == rhs.image && lib_image == rhs.lib_image; // PP:3.3 if binary is not empty we must match either the // lib_name if present or the image name if (!rhs.lib_image.empty()) { // FIXME: use fnmatch ? return rhs.lib_image == binary; } // FIXME: use fnmatch ? return rhs.image == binary; } void filename_spec::set_sample_filename(string const & filename, extra_images const & extra) { parsed_filename parsed = parse_filename(filename, extra); image = parsed.image; lib_image = parsed.lib_image; cg_image = parsed.cg_image; event = parsed.event; count = op_lexical_cast<int>(parsed.count); unitmask = op_lexical_cast<unsigned int>(parsed.unitmask); tgid.set(parsed.tgid); tid.set(parsed.tid); cpu.set(parsed.cpu); } bool filename_spec::is_dependent() const { if (cg_image.empty()) return image != lib_image; return cg_image != image || cg_image != lib_image; }