From af22ff9e620ea18557e5342d1e055760a58cbab3 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sat, 17 Apr 2021 20:02:37 -0300 Subject: [PATCH] Add native Win32 version of the nvr directory iteration code for MSVC --- src/config.c | 27 +++++++++++++++++++++++---- src/include/tinyglib.h | 2 +- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/config.c b/src/config.c index 8a8512b64..b7866dd71 100644 --- a/src/config.c +++ b/src/config.c @@ -32,7 +32,11 @@ #include #include #include -#include +#ifdef _WIN32 +# include +#else +# include +#endif #define HAVE_STDARG_H #include <86box/86box.h> #include "cpu.h" @@ -621,21 +625,32 @@ load_machine(void) i = strlen(new_fn); /* Iterate through NVR files. */ +#ifdef _WIN32 + WIN32_FIND_DATA find_data; + strcat(old_fn, "*"); + HANDLE search = FindFirstFile(nvr_path(old_fn), &find_data); + if (search != INVALID_HANDLE_VALUE) { + do { + p = find_data.cFileName; +#else DIR *dirp = opendir(nvr_path(".")); if (dirp) { struct dirent *entry; while ((entry = readdir(dirp))) { + p = entry->d_name; + /* Check if this file corresponds to the old name. */ - if (strncmp(entry->d_name, old_fn, c)) + if (strncmp(p, old_fn, c)) continue; +#endif /* Add extension to the new name. */ - strcpy(&new_fn[i], &entry->d_name[c]); + strcpy(&new_fn[i], &p[c]); /* Only copy if a file with the new name doesn't already exist. */ FILE *g = nvr_fopen(new_fn, "rb"); if (!g) { - FILE *f = nvr_fopen(entry->d_name, "rb"); + FILE *f = nvr_fopen(p, "rb"); g = nvr_fopen(new_fn, "wb"); uint8_t buf[4096]; @@ -645,7 +660,11 @@ load_machine(void) fclose(f); } fclose(g); +#ifdef _WIN32 + } while (FindNextFile(search, &find_data)); +#else } +#endif } } diff --git a/src/include/tinyglib.h b/src/include/tinyglib.h index 24f9409a3..5f6c6a028 100644 --- a/src/include/tinyglib.h +++ b/src/include/tinyglib.h @@ -259,6 +259,7 @@ g_strv_length(gchar **str_array) #define g_rand_new() calloc(1, sizeof(GRand)) #define g_return_val_if_fail(e, v) if (!(e)) return (v) #define g_shell_parse_argv(a, b, c, d) !!(sizeof(b)) /* unimplemented */ +#define g_strdup(str) ((str) ? strdup(str) : NULL) #define g_warn_if_fail(e) do { if (!(e)) pclog("TinyGLib g_warn_if_fail(" #e ")\n"); } while (0) #define g_warn_if_reached() pclog("TinyGLib g_warn_if_reached()\n") #define g_warning(s, ...) tinyglib_pclog("g_warning", s, ##__VA_ARGS__) @@ -271,7 +272,6 @@ g_strv_length(gchar **str_array) #define g_rand_free free #define g_realloc realloc #define g_snprintf snprintf -#define g_strdup(str) str ? strdup(str) : NULL #define g_strerror strerror #define g_strfreev free #define g_string_append_printf sprintf /* unimplemented */