From 8fdbadfbb281d75be4ffcaaa5c19815d231182ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Thu, 15 Sep 2022 11:00:11 +0800 Subject: [PATCH 1/2] LocalIp: fix `--localip-show-loop` on macOS loop on macOS is `lo0` --- src/modules/localip.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/modules/localip.c b/src/modules/localip.c index 1d8192df49..6bc2455f23 100644 --- a/src/modules/localip.c +++ b/src/modules/localip.c @@ -5,6 +5,7 @@ #define FF_LOCALIP_NUM_FORMAT_ARGS 1 #include +#include #include #include #include @@ -54,7 +55,7 @@ void ffPrintLocalIp(FFinstance* instance) continue; // loop back - if (strcmp(ifa->ifa_name, "lo") == 0 && !instance->config.localIpShowLoop) + if (strncmp(ifa->ifa_name, "lo", 2) == 0 && (ifa->ifa_name[2] == '\0' || isdigit(ifa->ifa_name[2])) && !instance->config.localIpShowLoop) continue; if (ifa->ifa_addr->sa_family == AF_INET) { // check it is IP4 From f9695f4148c780ec1ca344301afa35610e79e8dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Thu, 15 Sep 2022 13:32:08 +0800 Subject: [PATCH 2/2] Vulkan: print detailed reason of why failing instead of the general message `Failed to detect vulkan` --- src/common/library.h | 3 +++ src/detection/vulkan.c | 24 +++++++++++++----------- src/detection/vulkan.h | 1 + src/modules/vulkan.c | 4 ++-- 4 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/common/library.h b/src/common/library.h index 2f6fa6e4ea..d3e721ff82 100644 --- a/src/common/library.h +++ b/src/common/library.h @@ -30,6 +30,9 @@ #define FF_LIBRARY_LOAD_SYMBOL(library, symbolName, returnValue) \ __typeof__(&symbolName) FF_LIBRARY_LOAD_SYMBOL_ADDRESS(library, ff ## symbolName, symbolName, returnValue); +#define FF_LIBRARY_LOAD_SYMBOL_MESSAGE(library, symbolName) \ + __typeof__(&symbolName) FF_LIBRARY_LOAD_SYMBOL_ADDRESS(library, ff ## symbolName, symbolName, "dlsym " #symbolName " failed"); + #define FF_LIBRARY_LOAD_SYMBOL_VAR(library, varName, symbolName, returnValue) \ FF_LIBRARY_LOAD_SYMBOL_ADDRESS(library, varName.ff ## symbolName, symbolName, returnValue); diff --git a/src/detection/vulkan.c b/src/detection/vulkan.c index f5e2f19cd0..108101174b 100644 --- a/src/detection/vulkan.c +++ b/src/detection/vulkan.c @@ -33,14 +33,14 @@ static void applyDriverName(VkPhysicalDeviceDriverProperties* properties, FFstrb ffStrbufAppendC(result, ']'); } -static void detectVulkan(const FFinstance* instance, FFVulkanResult* result) +static const char* detectVulkan(const FFinstance* instance, FFVulkanResult* result) { - FF_LIBRARY_LOAD(vulkan, instance->config.libVulkan, , "libvulkan"FF_LIBRARY_EXTENSION, 2) - FF_LIBRARY_LOAD_SYMBOL(vulkan, vkGetInstanceProcAddr,) - FF_LIBRARY_LOAD_SYMBOL(vulkan, vkCreateInstance,) - FF_LIBRARY_LOAD_SYMBOL(vulkan, vkDestroyInstance,) - FF_LIBRARY_LOAD_SYMBOL(vulkan, vkEnumeratePhysicalDevices,) - FF_LIBRARY_LOAD_SYMBOL(vulkan, vkGetPhysicalDeviceProperties,) + FF_LIBRARY_LOAD(vulkan, instance->config.libVulkan, "dlopen libvulkan"FF_LIBRARY_EXTENSION " failed", "libvulkan"FF_LIBRARY_EXTENSION, 2) + FF_LIBRARY_LOAD_SYMBOL_MESSAGE(vulkan, vkGetInstanceProcAddr) + FF_LIBRARY_LOAD_SYMBOL_MESSAGE(vulkan, vkCreateInstance) + FF_LIBRARY_LOAD_SYMBOL_MESSAGE(vulkan, vkDestroyInstance) + FF_LIBRARY_LOAD_SYMBOL_MESSAGE(vulkan, vkEnumeratePhysicalDevices) + FF_LIBRARY_LOAD_SYMBOL_MESSAGE(vulkan, vkGetPhysicalDeviceProperties) //Some drivers (nvdc) print messages to stdout //and thats the best way i found to disable that @@ -102,7 +102,7 @@ static void detectVulkan(const FFinstance* instance, FFVulkanResult* result) { dlclose(vulkan); ffSuppressIO(false); - return; + return "ffvkCreateInstance() failed"; } @@ -117,7 +117,7 @@ static void detectVulkan(const FFinstance* instance, FFVulkanResult* result) ffvkDestroyInstance(vkInstance, NULL); dlclose(vulkan); ffSuppressIO(false); - return; + return "ffvkEnumeratePhysicalDevices() failed"; } VkPhysicalDevice* physicalDevices = malloc(sizeof(VkPhysicalDevice) * physicalDeviceCount); @@ -127,7 +127,7 @@ static void detectVulkan(const FFinstance* instance, FFVulkanResult* result) ffvkDestroyInstance(vkInstance, NULL); dlclose(vulkan); ffSuppressIO(false); - return; + return "ffvkEnumeratePhysicalDevices() failed"; } PFN_vkGetPhysicalDeviceProperties2 ffvkGetPhysicalDeviceProperties2 = (PFN_vkGetPhysicalDeviceProperties2) ffvkGetInstanceProcAddr(vkInstance, "vkGetPhysicalDeviceProperties2"); @@ -208,6 +208,7 @@ static void detectVulkan(const FFinstance* instance, FFVulkanResult* result) ffvkDestroyInstance(vkInstance, NULL); dlclose(vulkan); ffSuppressIO(false); + return NULL; } #endif @@ -232,9 +233,10 @@ const FFVulkanResult* ffDetectVulkan(const FFinstance* instance) ffListInit(&result.gpus, sizeof(FFGPUResult)); #ifdef FF_HAVE_VULKAN - detectVulkan(instance, &result); + result.error = detectVulkan(instance, &result); #else FF_UNUSED(instance); + result.error = "fastfetch was compiled without vulkan support"; #endif pthread_mutex_unlock(&mutex); diff --git a/src/detection/vulkan.h b/src/detection/vulkan.h index 64db1b844c..559dc3ff77 100644 --- a/src/detection/vulkan.h +++ b/src/detection/vulkan.h @@ -11,6 +11,7 @@ typedef struct FFVulkanResult FFstrbuf apiVersion; FFstrbuf conformanceVersion; FFlist gpus; //List of FFGPUResult, see detection/gpu/gpu.h + const char* error; } FFVulkanResult; const FFVulkanResult* ffDetectVulkan(const FFinstance* instance); diff --git a/src/modules/vulkan.c b/src/modules/vulkan.c index c62489f647..53285d1c74 100644 --- a/src/modules/vulkan.c +++ b/src/modules/vulkan.c @@ -9,9 +9,9 @@ void ffPrintVulkan(FFinstance* instance) { const FFVulkanResult* vulkan = ffDetectVulkan(instance); - if(vulkan->apiVersion.length == 0 && vulkan->driver.length == 0) + if(vulkan->error) { - ffPrintError(instance, FF_VULKAN_MODULE_NAME, 0, &instance->config.vulkan, "Failed to detect vulkan"); + ffPrintError(instance, FF_VULKAN_MODULE_NAME, 0, &instance->config.vulkan, vulkan->error); return; }