215{
216 char *cpu;
217 char *dot = ".";
218 char *dot_dot = "..";
219#ifdef _POWER5p
220 cpu = "power5+";
221#elif defined(_POWER5)
222 cpu = "power5";
223#elif defined(_PPC970)
224 cpu = "ppc970";
225#else
226 cpu = "";
227#endif
228 char *dir = ( char * ) getenv( "PAPI_EVENTFILE_PATH" );
229#ifdef PAPI_DATADIR
230 if ( dir == NULL ) {
231 dir = PAPI_DATADIR;
232 }
233#endif
234
235 if ( dir == NULL )
236 dir = dot;
237
238 char *relative_pathname = ( char * ) malloc( strlen( "/" ) +
239 strlen( "event_data" ) +
240 strlen( "/" ) + strlen( cpu ) +
241 strlen( "/" ) +
242 strlen( fname ) + 1 );
243 strcpy( relative_pathname, "/" );
244 strcat( relative_pathname, "event_data" );
245 strcat( relative_pathname, "/" );
246 strcat( relative_pathname, cpu );
247 strcat( relative_pathname, "/" );
248 strcat( relative_pathname, fname );
249
250
251 char *pathname =
252 ( char * ) malloc( strlen( dir ) + strlen( relative_pathname ) + 4 );
253 int keep_trying;
254 if ( strcmp( dir, dot ) == 0 )
255 keep_trying = 2;
256 else
257 keep_trying = 3;
259 while (
file == NULL && keep_trying-- ) {
260 strcpy( pathname, dir );
261 strcat( pathname, relative_pathname );
262 file = fopen( pathname,
"r" );
263 if ( strcmp( dir, dot ) == 0 ) {
264 dir = dot_dot;
265 } else {
266 dir = dot;
267 }
268 SUBDBG(
"Attempt to open event data file %s %s successful.\n", pathname,
269 (
file == NULL ) ?
"was not" :
"was" );
270 memset( pathname, '\0', sizeof ( pathname ) );
271 }
272
273 free( pathname );
274 free( relative_pathname );
276}