From 0ce4d70e35dd722a9b08dfb749679f64ae991c80 Mon Sep 17 00:00:00 2001 From: IntelOrca Date: Sun, 15 Feb 2015 17:31:16 +0000 Subject: [PATCH] make saved games and landscapes copy recursively --- src/openrct2.c | 19 +++++++++++++++++++ src/platform/platform.h | 2 +- src/platform/windows.c | 9 ++++++--- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/openrct2.c b/src/openrct2.c index 5775af2b34..3934e3262b 100644 --- a/src/openrct2.c +++ b/src/openrct2.c @@ -72,6 +72,25 @@ static void openrct2_copy_files_over(const char *originalDirectory, const char * platform_file_copy(oldPath, newPath); } platform_enumerate_files_end(fileEnumHandle); + + fileEnumHandle = platform_enumerate_directories_begin(originalDirectory); + while (platform_enumerate_directories_next(fileEnumHandle, filter)) { + strcpy(newPath, newDirectory); + strcat(newPath, filter); + + strcpy(oldPath, originalDirectory); + ch = strchr(oldPath, '*'); + if (ch != NULL) + *ch = 0; + strcat(oldPath, filter); + + if (!platform_ensure_directory_exists(newPath)) { + log_error("Could not create directory %s.", newPath); + return; + } + openrct2_copy_files_over(oldPath, newPath, extension); + } + platform_enumerate_directories_end(fileEnumHandle); } /** diff --git a/src/platform/platform.h b/src/platform/platform.h index 8d20e81a2b..3ffb128872 100644 --- a/src/platform/platform.h +++ b/src/platform/platform.h @@ -92,7 +92,7 @@ int platform_enumerate_files_next(int handle, file_info *outFileInfo); void platform_enumerate_files_end(int handle); int platform_enumerate_directories_begin(const char *directory); int platform_enumerate_directories_next(int handle, char *path); -int platform_enumerate_directories_end(int handle); +void platform_enumerate_directories_end(int handle); int platform_file_copy(const char *srcPath, const char *dstPath); int platform_file_move(const char *srcPath, const char *dstPath); int platform_file_delete(const char *path); diff --git a/src/platform/windows.c b/src/platform/windows.c index 043215e863..35a8493c81 100644 --- a/src/platform/windows.c +++ b/src/platform/windows.c @@ -234,8 +234,10 @@ int platform_enumerate_directories_next(int handle, char *path) } } - while ((enumFileInfo->data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0 - || strchr(enumFileInfo->data.cFileName, '.') != NULL) { + while ( + (enumFileInfo->data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0 + || strchr(enumFileInfo->data.cFileName, '.') != NULL + ) { if (!FindNextFile(enumFileInfo->handle, &enumFileInfo->data)) { return 0; } @@ -246,7 +248,8 @@ int platform_enumerate_directories_next(int handle, char *path) strncat(path, "\\", MAX_PATH); return 1; } -int platform_enumerate_directories_end(int handle) + +void platform_enumerate_directories_end(int handle) { enumerate_file_info *enumFileInfo;