18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/** 28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file filename_spec.cpp 38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * Container holding a sample filename split into its components 48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2003 OProfile authors 68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING 78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author Philippe Elie 98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */ 108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <string> 128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "filename_spec.h" 148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "parse_filename.h" 158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "generic_spec.h" 168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "locate_images.h" 178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddusing namespace std; 208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddfilename_spec::filename_spec(string const & filename, 238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd extra_images const & extra) 248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_sample_filename(filename, extra); 268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddfilename_spec::filename_spec() 308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd : image("*"), lib_image("*") 318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddbool filename_spec::match(filename_spec const & rhs, 368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd string const & binary) const 378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (!tid.match(rhs.tid) || !cpu.match(rhs.cpu) || 398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd !tgid.match(rhs.tgid) || count != rhs.count || 408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd unitmask != rhs.unitmask || event != rhs.event) { 418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return false; 428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (binary.empty()) 458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return image == rhs.image && lib_image == rhs.lib_image; 468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd // PP:3.3 if binary is not empty we must match either the 488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd // lib_name if present or the image name 498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (!rhs.lib_image.empty()) { 508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd // FIXME: use fnmatch ? 518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return rhs.lib_image == binary; 528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd // FIXME: use fnmatch ? 558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return rhs.image == binary; 568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddvoid filename_spec::set_sample_filename(string const & filename, 608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd extra_images const & extra) 618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd parsed_filename parsed = parse_filename(filename, extra); 638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd image = parsed.image; 658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd lib_image = parsed.lib_image; 668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cg_image = parsed.cg_image; 678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd event = parsed.event; 688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd count = op_lexical_cast<int>(parsed.count); 698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd unitmask = op_lexical_cast<unsigned int>(parsed.unitmask); 708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd tgid.set(parsed.tgid); 718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd tid.set(parsed.tid); 728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cpu.set(parsed.cpu); 738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddbool filename_spec::is_dependent() const 778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (cg_image.empty()) 798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return image != lib_image; 808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return cg_image != image || cg_image != lib_image; 818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 82