70 string::size_type slash = pathname.rfind(
'/') + 1;
71 string directory = pathname.substr(0, slash);
72 string filename = pathname.substr(slash);
73 string basename = pathname.substr(slash, pathname.rfind(
'.') - slash);
75 DBG(cerr <<
"find ancillary file params: " << pathname <<
", " << ext <<
", " << dir <<
", " << file << endl);
76 DBG(cerr <<
"find ancillary file comp: " << directory <<
", " << filename <<
", " << basename << endl);
78 string dot_ext =
"." + ext;
80 string name = directory + basename + dot_ext;
81 if (access(name.c_str(), F_OK) == 0)
84 name = pathname + dot_ext;
85 if (access(name.c_str(), F_OK) == 0)
88 name = directory + ext;
89 if (access(name.c_str(), F_OK) == 0)
92 name = dir + basename + dot_ext;
93 if (access(name.c_str(), F_OK) == 0)
96 name = directory + file + dot_ext;
97 if (access(name.c_str(), F_OK) == 0)
100 name = dir + file + dot_ext;
101 if (access(name.c_str(), F_OK) == 0)
105 if (access(name.c_str(), F_OK) == 0)
135 string::size_type slash = name.find_last_of(
'/');
136 string dirname = name.substr(0, slash);
137 string filename = name.substr(slash + 1);
138 string rootname = filename.substr(0, filename.find_last_of(
'.'));
142 string::iterator rootname_iter = rootname.begin();
143 string::iterator rootname_end_iter = rootname.end();
144 if (isdigit(*rootname_iter)) {
145 while (rootname_iter != rootname_end_iter && isdigit(*++rootname_iter))
150 string new_name = dirname;
151 new_name.append(
"/");
152 new_name.append(rootname_iter, rootname_end_iter);
153 new_name.append(ext);
154 DBG(cerr <<
"New Name (iter): " << new_name << endl);
155 if (access(new_name.c_str(), F_OK) == 0) {
160 string::reverse_iterator rootname_riter = rootname.rbegin();
161 string::reverse_iterator rootname_end_riter = rootname.rend();
162 if (isdigit(*rootname_riter)) {
163 while (rootname_riter != rootname_end_riter && isdigit(*++rootname_riter))
165 string new_name = dirname;
166 new_name.append(
"/");
171 new_name.append(rootname_end_riter.base(), rootname_riter.base());
172 new_name.append(ext);
173 DBG(cerr <<
"New Name (riter): " << new_name << endl);
174 if (access(new_name.c_str(), F_OK) == 0) {
static string find_ancillary_file(const string &pathname, const string &ext, const string &dir, const string &file)
Find a file with ancillary data.