Use VkAllocationCallbacks in windows dirent
authorCharles Giessen <charles@lunarg.com>
Sat, 21 May 2022 01:38:05 +0000 (19:38 -0600)
committerCharles Giessen <46324611+charles-lunarg@users.noreply.github.com>
Tue, 24 May 2022 20:18:26 +0000 (14:18 -0600)
Pass the allocation callbacks directly to dirent_on_windows.
This removes a unecessary dependency between the loader headers and
dirent_on_windows.

loader/dirent_on_windows.c
loader/dirent_on_windows.h
loader/loader.c

index 183bb0a548f24199ccfdfedddf047aa4eae022a6..779291aaeb007d4255b9ec5cda696a44a07bbdf0 100644 (file)
@@ -15,8 +15,6 @@
 #include <string.h>
 
 #include "allocation.h"
-#include "loader.h"
-#include "vk_loader_platform.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -31,7 +29,7 @@ struct DIR {
     char *name;           /* null-terminated char string */
 };
 
-DIR *opendir(const struct loader_instance *instance, const char *name) {
+DIR *opendir(const VkAllocationCallbacks *pAllocator, const char *name) {
     DIR *dir = 0;
 
     if (name && name[0]) {
@@ -39,22 +37,22 @@ DIR *opendir(const struct loader_instance *instance, const char *name) {
         const char *all = /* search pattern must end with suitable wildcard */
             strchr("/\\", name[base_length - 1]) ? "*" : "/*";
 
-        if ((dir = (DIR *)loader_instance_heap_alloc(instance, sizeof *dir, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND)) != 0 &&
-            (dir->name = (char *)loader_instance_heap_alloc(instance, base_length + strlen(all) + 1,
-                                                            VK_SYSTEM_ALLOCATION_SCOPE_COMMAND)) != 0) {
+        if ((dir = (DIR *)loader_alloc(pAllocator, sizeof *dir, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND)) != 0 &&
+            (dir->name = (char *)loader_alloc(pAllocator, base_length + strlen(all) + 1, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND)) !=
+                0) {
             strcat(strcpy(dir->name, name), all);
 
             if ((dir->handle = (handle_type)_findfirst(dir->name, &dir->info)) != -1) {
                 dir->result.d_name = 0;
             } else /* rollback */
             {
-                loader_instance_heap_free(instance, dir->name);
-                loader_instance_heap_free(instance, dir);
+                loader_free(pAllocator, dir->name);
+                loader_free(pAllocator, dir);
                 dir = 0;
             }
         } else /* rollback */
         {
-            loader_instance_heap_free(instance, dir);
+            loader_free(pAllocator, dir);
             dir = 0;
             errno = ENOMEM;
         }
@@ -65,7 +63,7 @@ DIR *opendir(const struct loader_instance *instance, const char *name) {
     return dir;
 }
 
-int closedir(const struct loader_instance *instance, DIR *dir) {
+int closedir(const VkAllocationCallbacks *pAllocator, DIR *dir) {
     int result = -1;
 
     if (dir) {
@@ -73,8 +71,8 @@ int closedir(const struct loader_instance *instance, DIR *dir) {
             result = _findclose(dir->handle);
         }
 
-        loader_instance_heap_free(instance, dir->name);
-        loader_instance_heap_free(instance, dir);
+        loader_free(pAllocator, dir->name);
+        loader_free(pAllocator, dir);
     }
 
     if (result == -1) /* map all errors to EBADF */
index f4e2c242b5f0b45ecf641a4d5ecab3f85be3388e..d11a2d4683592d49c0f3286bc44534b1acc2816c 100644 (file)
@@ -10,7 +10,7 @@
 
 */
 
-#include "loader_common.h"
+#include <vulkan/vulkan.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -22,9 +22,9 @@ struct dirent {
     char *d_name;
 };
 
-// pass in loader_instance to allow allocation callback usage
-DIR *opendir(const struct loader_instance *instance, const char *);
-int closedir(const struct loader_instance *instance, DIR *);
+// pass in VkAllocationCallbacks to allow allocation callback usage
+DIR *opendir(const VkAllocationCallbacks *pAllocator, const char *);
+int closedir(const VkAllocationCallbacks *pAllocator, DIR *);
 struct dirent *readdir(DIR *);
 void rewinddir(DIR *);
 
index 597689f283a2eaa25959eb330252822a432e3b69..c494c22a127d6cdb3d2bfce24c7d23f70ecdc0b2 100644 (file)
@@ -131,15 +131,14 @@ bool loader_check_version_meets_required(loader_api_version required, loader_api
 // while linux opendir & readdir does not
 DIR *loader_opendir(const struct loader_instance *instance, const char *name) {
 #if defined(_WIN32)
-    return opendir(instance, name);
+    return opendir(instance ? &instance->alloc_callbacks : NULL, name);
 #else  // _WIN32
     return opendir(name);
-
 #endif  // _WIN32
 }
 int loader_closedir(const struct loader_instance *instance, DIR *dir) {
 #if defined(_WIN32)
-    return closedir(instance, dir);
+    return closedir(instance ? &instance->alloc_callbacks : NULL, dir);
 #else   // _WIN32
     return closedir(dir);
 #endif  // _WIN32