354 closedir(dir); |
354 closedir(dir); |
355 |
355 |
356 return num; |
356 return num; |
357 } |
357 } |
358 |
358 |
|
359 bool FioTarFileListScanNewGRFCallback(const char *filename, int size, void *userdata) |
|
360 { |
|
361 uint *num = (uint *)userdata; |
|
362 char *ext = strrchr(filename, '.'); |
|
363 |
|
364 /* If no extension or extension isn't .grf, skip the file */ |
|
365 if (ext == NULL) return false; |
|
366 if (strcasecmp(ext, ".grf") != 0) return false; |
|
367 |
|
368 if (ScanPathAddGrf(filename)) (*num)++; |
|
369 |
|
370 /* Always return false, as we don't want to stop with listing all the files */ |
|
371 return false; |
|
372 } |
|
373 |
|
374 static uint ScanTar(const char *filename) |
|
375 { |
|
376 uint num = 0; |
|
377 |
|
378 FioTarFileList(filename, "rb", NULL, FioTarFileListScanNewGRFCallback, &num); |
|
379 return num; |
|
380 } |
359 |
381 |
360 /* Scan for all NewGRFs */ |
382 /* Scan for all NewGRFs */ |
361 void ScanNewGRFFiles() |
383 void ScanNewGRFFiles() |
362 { |
384 { |
363 Searchpath sp; |
385 Searchpath sp; |
364 char path[MAX_PATH]; |
386 char path[MAX_PATH]; |
|
387 const char *tar; |
365 uint num = 0; |
388 uint num = 0; |
366 |
389 |
367 ClearGRFConfigList(&_all_grfs); |
390 ClearGRFConfigList(&_all_grfs); |
368 |
391 |
369 DEBUG(grf, 1, "Scanning for NewGRFs"); |
392 DEBUG(grf, 1, "Scanning for NewGRFs"); |
370 FOR_ALL_SEARCHPATHS(sp) { |
393 FOR_ALL_SEARCHPATHS(sp) { |
371 FioAppendDirectory(path, MAX_PATH, sp, DATA_DIR); |
394 FioAppendDirectory(path, MAX_PATH, sp, DATA_DIR); |
372 num += ScanPath(path, strlen(path)); |
395 num += ScanPath(path, strlen(path)); |
|
396 } |
|
397 FOR_ALL_TARS(tar) { |
|
398 num += ScanTar(tar); |
373 } |
399 } |
374 DEBUG(grf, 1, "Scan complete, found %d files", num); |
400 DEBUG(grf, 1, "Scan complete, found %d files", num); |
375 } |
401 } |
376 |
402 |
377 |
403 |