From 8bc4464b64c96c0f6c781e494a121939b8bc74fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Sun, 9 Aug 2026 10:11:25 +0800 Subject: [PATCH] Library: makes `ffLibraryIterateDynamicLibs` return false on failure --- src/common/impl/library.c | 14 +++++++++----- src/common/library.h | 3 ++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/common/impl/library.c b/src/common/impl/library.c index f4cfd1421..3c34c79f8 100644 --- a/src/common/impl/library.c +++ b/src/common/impl/library.c @@ -199,19 +199,19 @@ static void ffLibraryIterateDynamicLibsCallback(PLDR_DATA_TABLE_ENTRY DataTableE } } -void ffLibraryIterateDynamicLibs(FFLibraryIterateCallback callback, void* userData) { +bool ffLibraryIterateDynamicLibs(FFLibraryIterateCallback callback, void* userData) { struct LibraryIterateDynamicLibsBundle bundle = { .callback = callback, .userData = userData, }; - LdrEnumerateLoadedModules(FALSE, ffLibraryIterateDynamicLibsCallback, &bundle); + return NT_SUCCESS(LdrEnumerateLoadedModules(FALSE, ffLibraryIterateDynamicLibsCallback, &bundle)); } #elif defined(__APPLE__) #include -void ffLibraryIterateDynamicLibs(FFLibraryIterateCallback callback, void* userData) { +bool ffLibraryIterateDynamicLibs(FFLibraryIterateCallback callback, void* userData) { uint32_t imageCount = _dyld_image_count(); for (uint32_t i = 0; i < imageCount; ++i) { const char* name = _dyld_get_image_name(i); @@ -223,6 +223,8 @@ void ffLibraryIterateDynamicLibs(FFLibraryIterateCallback callback, void* userDa break; } } + + return true; } #elif __has_include() @@ -237,19 +239,21 @@ static int ffLibraryIterateDynamicLibsCallback(struct dl_phdr_info* info, size_t return !bundle->callback(info->dlpi_name, bundle->userData); } -void ffLibraryIterateDynamicLibs(bool (*callback)(const char* name, void* userData), void* userData) { +bool ffLibraryIterateDynamicLibs(bool (*callback)(const char* name, void* userData), void* userData) { dl_iterate_phdr( ffLibraryIterateDynamicLibsCallback, &(struct LibraryIterateDynamicLibsBundle) { .callback = callback, .userData = userData, }); + return true; } #else -void ffLibraryIterateDynamicLibs(FFLibraryIterateCallback, void*) { +bool ffLibraryIterateDynamicLibs(FFLibraryIterateCallback, void*) { // Not implemented for this platform + return false; } #endif diff --git a/src/common/library.h b/src/common/library.h index f2b2cca33..fc5ddbe95 100644 --- a/src/common/library.h +++ b/src/common/library.h @@ -114,4 +114,5 @@ void* ffLibraryGetModule(const wchar_t* libraryFileName); // Return false to stop iterating, true to continue typedef bool (*FFLibraryIterateCallback)(const char* name, void* userData); -void ffLibraryIterateDynamicLibs(FFLibraryIterateCallback callback, void* userData); +// Iterate over all loaded dynamic libraries. Returns true on success, false on failure. +bool ffLibraryIterateDynamicLibs(FFLibraryIterateCallback callback, void* userData);