Skip to content

Commit 0e2d353

Browse files
Merge pull request #232 from CarterLi/master
Improve local-ip detection on macOS and print vulkan detection failing reason
2 parents 5c43119 + f9695f4 commit 0e2d353

File tree

5 files changed

+21
-14
lines changed

5 files changed

+21
-14
lines changed

src/common/library.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@
3030
#define FF_LIBRARY_LOAD_SYMBOL(library, symbolName, returnValue) \
3131
__typeof__(&symbolName) FF_LIBRARY_LOAD_SYMBOL_ADDRESS(library, ff ## symbolName, symbolName, returnValue);
3232

33+
#define FF_LIBRARY_LOAD_SYMBOL_MESSAGE(library, symbolName) \
34+
__typeof__(&symbolName) FF_LIBRARY_LOAD_SYMBOL_ADDRESS(library, ff ## symbolName, symbolName, "dlsym " #symbolName " failed");
35+
3336
#define FF_LIBRARY_LOAD_SYMBOL_VAR(library, varName, symbolName, returnValue) \
3437
FF_LIBRARY_LOAD_SYMBOL_ADDRESS(library, varName.ff ## symbolName, symbolName, returnValue);
3538

src/detection/vulkan.c

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,14 @@ static void applyDriverName(VkPhysicalDeviceDriverProperties* properties, FFstrb
3333
ffStrbufAppendC(result, ']');
3434
}
3535

36-
static void detectVulkan(const FFinstance* instance, FFVulkanResult* result)
36+
static const char* detectVulkan(const FFinstance* instance, FFVulkanResult* result)
3737
{
38-
FF_LIBRARY_LOAD(vulkan, instance->config.libVulkan, , "libvulkan"FF_LIBRARY_EXTENSION, 2)
39-
FF_LIBRARY_LOAD_SYMBOL(vulkan, vkGetInstanceProcAddr,)
40-
FF_LIBRARY_LOAD_SYMBOL(vulkan, vkCreateInstance,)
41-
FF_LIBRARY_LOAD_SYMBOL(vulkan, vkDestroyInstance,)
42-
FF_LIBRARY_LOAD_SYMBOL(vulkan, vkEnumeratePhysicalDevices,)
43-
FF_LIBRARY_LOAD_SYMBOL(vulkan, vkGetPhysicalDeviceProperties,)
38+
FF_LIBRARY_LOAD(vulkan, instance->config.libVulkan, "dlopen libvulkan"FF_LIBRARY_EXTENSION " failed", "libvulkan"FF_LIBRARY_EXTENSION, 2)
39+
FF_LIBRARY_LOAD_SYMBOL_MESSAGE(vulkan, vkGetInstanceProcAddr)
40+
FF_LIBRARY_LOAD_SYMBOL_MESSAGE(vulkan, vkCreateInstance)
41+
FF_LIBRARY_LOAD_SYMBOL_MESSAGE(vulkan, vkDestroyInstance)
42+
FF_LIBRARY_LOAD_SYMBOL_MESSAGE(vulkan, vkEnumeratePhysicalDevices)
43+
FF_LIBRARY_LOAD_SYMBOL_MESSAGE(vulkan, vkGetPhysicalDeviceProperties)
4444

4545
//Some drivers (nvdc) print messages to stdout
4646
//and thats the best way i found to disable that
@@ -102,7 +102,7 @@ static void detectVulkan(const FFinstance* instance, FFVulkanResult* result)
102102
{
103103
dlclose(vulkan);
104104
ffSuppressIO(false);
105-
return;
105+
return "ffvkCreateInstance() failed";
106106
}
107107

108108

@@ -117,7 +117,7 @@ static void detectVulkan(const FFinstance* instance, FFVulkanResult* result)
117117
ffvkDestroyInstance(vkInstance, NULL);
118118
dlclose(vulkan);
119119
ffSuppressIO(false);
120-
return;
120+
return "ffvkEnumeratePhysicalDevices() failed";
121121
}
122122

123123
VkPhysicalDevice* physicalDevices = malloc(sizeof(VkPhysicalDevice) * physicalDeviceCount);
@@ -127,7 +127,7 @@ static void detectVulkan(const FFinstance* instance, FFVulkanResult* result)
127127
ffvkDestroyInstance(vkInstance, NULL);
128128
dlclose(vulkan);
129129
ffSuppressIO(false);
130-
return;
130+
return "ffvkEnumeratePhysicalDevices() failed";
131131
}
132132

133133
PFN_vkGetPhysicalDeviceProperties2 ffvkGetPhysicalDeviceProperties2 = (PFN_vkGetPhysicalDeviceProperties2) ffvkGetInstanceProcAddr(vkInstance, "vkGetPhysicalDeviceProperties2");
@@ -208,6 +208,7 @@ static void detectVulkan(const FFinstance* instance, FFVulkanResult* result)
208208
ffvkDestroyInstance(vkInstance, NULL);
209209
dlclose(vulkan);
210210
ffSuppressIO(false);
211+
return NULL;
211212
}
212213

213214
#endif
@@ -232,9 +233,10 @@ const FFVulkanResult* ffDetectVulkan(const FFinstance* instance)
232233
ffListInit(&result.gpus, sizeof(FFGPUResult));
233234

234235
#ifdef FF_HAVE_VULKAN
235-
detectVulkan(instance, &result);
236+
result.error = detectVulkan(instance, &result);
236237
#else
237238
FF_UNUSED(instance);
239+
result.error = "fastfetch was compiled without vulkan support";
238240
#endif
239241

240242
pthread_mutex_unlock(&mutex);

src/detection/vulkan.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ typedef struct FFVulkanResult
1111
FFstrbuf apiVersion;
1212
FFstrbuf conformanceVersion;
1313
FFlist gpus; //List of FFGPUResult, see detection/gpu/gpu.h
14+
const char* error;
1415
} FFVulkanResult;
1516

1617
const FFVulkanResult* ffDetectVulkan(const FFinstance* instance);

src/modules/localip.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#define FF_LOCALIP_NUM_FORMAT_ARGS 1
66

77
#include <string.h>
8+
#include <ctype.h>
89
#include <ifaddrs.h>
910
#include <netinet/in.h>
1011
#include <arpa/inet.h>
@@ -54,7 +55,7 @@ void ffPrintLocalIp(FFinstance* instance)
5455
continue;
5556

5657
// loop back
57-
if (strcmp(ifa->ifa_name, "lo") == 0 && !instance->config.localIpShowLoop)
58+
if (strncmp(ifa->ifa_name, "lo", 2) == 0 && (ifa->ifa_name[2] == '\0' || isdigit(ifa->ifa_name[2])) && !instance->config.localIpShowLoop)
5859
continue;
5960

6061
if (ifa->ifa_addr->sa_family == AF_INET) { // check it is IP4

src/modules/vulkan.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ void ffPrintVulkan(FFinstance* instance)
99
{
1010
const FFVulkanResult* vulkan = ffDetectVulkan(instance);
1111

12-
if(vulkan->apiVersion.length == 0 && vulkan->driver.length == 0)
12+
if(vulkan->error)
1313
{
14-
ffPrintError(instance, FF_VULKAN_MODULE_NAME, 0, &instance->config.vulkan, "Failed to detect vulkan");
14+
ffPrintError(instance, FF_VULKAN_MODULE_NAME, 0, &instance->config.vulkan, vulkan->error);
1515
return;
1616
}
1717

0 commit comments

Comments
 (0)