src/newgrf_config.cpp
changeset 8077 92edb3688fdf
parent 8070 959633559d9f
child 8082 15235b938558
equal deleted inserted replaced
8076:10e9b5e354d9 8077:92edb3688fdf
   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