summaryrefslogtreecommitdiff
path: root/src/newgrf_config.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/newgrf_config.cpp')
-rw-r--r--src/newgrf_config.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp
index acd471d64..1a363b5ef 100644
--- a/src/newgrf_config.cpp
+++ b/src/newgrf_config.cpp
@@ -356,12 +356,35 @@ static uint ScanPath(const char *path, int basepath_length)
return num;
}
+bool FioTarFileListScanNewGRFCallback(const char *filename, int size, void *userdata)
+{
+ uint *num = (uint *)userdata;
+ char *ext = strrchr(filename, '.');
+
+ /* If no extension or extension isn't .grf, skip the file */
+ if (ext == NULL) return false;
+ if (strcasecmp(ext, ".grf") != 0) return false;
+
+ if (ScanPathAddGrf(filename)) (*num)++;
+
+ /* Always return false, as we don't want to stop with listing all the files */
+ return false;
+}
+
+static uint ScanTar(const char *filename)
+{
+ uint num = 0;
+
+ FioTarFileList(filename, "rb", NULL, FioTarFileListScanNewGRFCallback, &num);
+ return num;
+}
/* Scan for all NewGRFs */
void ScanNewGRFFiles()
{
Searchpath sp;
char path[MAX_PATH];
+ const char *tar;
uint num = 0;
ClearGRFConfigList(&_all_grfs);
@@ -371,6 +394,9 @@ void ScanNewGRFFiles()
FioAppendDirectory(path, MAX_PATH, sp, DATA_DIR);
num += ScanPath(path, strlen(path));
}
+ FOR_ALL_TARS(tar) {
+ num += ScanTar(tar);
+ }
DEBUG(grf, 1, "Scan complete, found %d files", num);
}