mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-10-29 19:20:43 +01:00
Disable stdout during vulkan operations
This commit is contained in:
@@ -462,3 +462,34 @@ bool ffGetFileContent(const char* fileName, FFstrbuf* buffer)
|
||||
ffStrbufClear(buffer);
|
||||
return ffAppendFileContent(fileName, buffer);
|
||||
}
|
||||
|
||||
static volatile bool originalPipesSet = false;
|
||||
static volatile int originalStdout = -1;
|
||||
static volatile int originalStderr = -1;
|
||||
|
||||
void ffDisableOutput()
|
||||
{
|
||||
fflush(stdout);
|
||||
fflush(stderr);
|
||||
|
||||
if(!originalPipesSet)
|
||||
{
|
||||
originalStdout = dup(STDOUT_FILENO);
|
||||
originalStderr = dup(STDERR_FILENO);
|
||||
originalPipesSet = true;
|
||||
}
|
||||
|
||||
int nullFile = open("/dev/null", O_WRONLY);
|
||||
dup2(nullFile, STDOUT_FILENO);
|
||||
dup2(nullFile, STDERR_FILENO);
|
||||
close(nullFile);
|
||||
}
|
||||
|
||||
void ffEnableOutput()
|
||||
{
|
||||
fflush(stdout);
|
||||
fflush(stderr);
|
||||
|
||||
dup2(originalStdout, STDOUT_FILENO);
|
||||
dup2(originalStderr, STDERR_FILENO);
|
||||
}
|
||||
|
||||
@@ -328,6 +328,9 @@ bool ffGetFileContent(const char* fileName, FFstrbuf* buffer);
|
||||
bool ffWriteFDContent(int fd, const FFstrbuf* content);
|
||||
void ffWriteFileContent(const char* fileName, const FFstrbuf* buffer);
|
||||
|
||||
void ffDisableOutput();
|
||||
void ffEnableOutput();
|
||||
|
||||
// They return true if the file was found, independently if start was found
|
||||
// Buffers which already contain content are not overwritten
|
||||
// The last occurence of start in the first file will be the one used
|
||||
|
||||
@@ -22,6 +22,10 @@ static void vulkanFillGPUs(FFinstance* instance, FFlist* results)
|
||||
FF_LIBRARY_LOAD_SYMBOL(vulkan, vkEnumeratePhysicalDevices,)
|
||||
FF_LIBRARY_LOAD_SYMBOL(vulkan, vkGetPhysicalDeviceProperties,)
|
||||
|
||||
//Some drivers (nvdc) print messages to stdout
|
||||
//and thats the best way i found to disable that
|
||||
ffDisableOutput();
|
||||
|
||||
const VkApplicationInfo applicationInfo = {
|
||||
.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
|
||||
.pNext = NULL,
|
||||
@@ -47,6 +51,7 @@ static void vulkanFillGPUs(FFinstance* instance, FFlist* results)
|
||||
if(ffvkCreateInstance(&instanceCreateInfo, NULL, &vkInstance) != VK_SUCCESS)
|
||||
{
|
||||
dlclose(vulkan);
|
||||
ffEnableOutput();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -55,6 +60,7 @@ static void vulkanFillGPUs(FFinstance* instance, FFlist* results)
|
||||
{
|
||||
ffvkDestroyInstance(vkInstance, NULL);
|
||||
dlclose(vulkan);
|
||||
ffEnableOutput();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -64,6 +70,7 @@ static void vulkanFillGPUs(FFinstance* instance, FFlist* results)
|
||||
free(physicalDevices);
|
||||
ffvkDestroyInstance(vkInstance, NULL);
|
||||
dlclose(vulkan);
|
||||
ffEnableOutput();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -86,6 +93,7 @@ static void vulkanFillGPUs(FFinstance* instance, FFlist* results)
|
||||
free(physicalDevices);
|
||||
ffvkDestroyInstance(vkInstance, NULL);
|
||||
dlclose(vulkan);
|
||||
ffEnableOutput();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user