diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ea1d55f84..54e319538d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +# 2.55.1 + +Bugfixes: +* Fix parallel command execution breaks randomly (#2056 / #2058, Command) + * Regression from v2.55.0 +* Fix `dylib` searching path on macOS (macOS) + * Regression from v2.55.0 +* Fix an uninitialized field (#2057, Display) + # 2.55.0 Changes: diff --git a/CMakeLists.txt b/CMakeLists.txt index 77647ccc18..49f2d65539 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.12.0) # target_link_libraries with OBJECT libs & project homepage url project(fastfetch - VERSION 2.55.0 + VERSION 2.55.1 LANGUAGES C DESCRIPTION "Fast neofetch-like system information tool" HOMEPAGE_URL "https://github.com/fastfetch-cli/fastfetch" @@ -1348,7 +1348,7 @@ endif() # Used for dlopen finding dylibs installed by homebrew # `/opt/homebrew/lib` is not on in dlopen search path by default -if(APPLE AND NOT BINARY_LINK_TYPE STREQUAL "dlopen") +if(APPLE AND BINARY_LINK_TYPE STREQUAL "dlopen") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath,/opt/homebrew/lib -Wl,-rpath,/usr/local/lib") endif() diff --git a/debian/changelog.tpl b/debian/changelog.tpl index 6a1b897380..8e90bf2f7d 100644 --- a/debian/changelog.tpl +++ b/debian/changelog.tpl @@ -1,3 +1,9 @@ +fastfetch (2.55.0~#UBUNTU_CODENAME#) #UBUNTU_CODENAME#; urgency=medium + + * Update to 2.55.0 + + -- Carter Li Wed, 12 Nov 2025 09:15:24 +0800 + fastfetch (2.54.1~#UBUNTU_CODENAME#) #UBUNTU_CODENAME#; urgency=medium * Fix building on plucky diff --git a/src/common/init.c b/src/common/init.c index 8e27ebaf1c..fe75442451 100644 --- a/src/common/init.c +++ b/src/common/init.c @@ -92,10 +92,6 @@ static void exitSignalHandler(FF_MAYBE_UNUSED int signal) resetConsole(); exit(0); } -static void chldSignalHandler(FF_MAYBE_UNUSED int signal) -{ - // empty; used to interrupt the poll and read syscalls -} #endif void ffStart(void) @@ -121,7 +117,10 @@ void ffStart(void) sigaction(SIGINT, &action, NULL); sigaction(SIGTERM, &action, NULL); sigaction(SIGQUIT, &action, NULL); - sigaction(SIGCHLD, &(struct sigaction) { .sa_handler = chldSignalHandler }, NULL); + sigset_t newmask; + sigemptyset(&newmask); + sigaddset(&newmask, SIGCHLD); + sigprocmask(SIG_BLOCK, &newmask, NULL); #endif //reset everything to default before we start printing diff --git a/src/common/processing_linux.c b/src/common/processing_linux.c index c4139ff4b9..7ddd725da5 100644 --- a/src/common/processing_linux.c +++ b/src/common/processing_linux.c @@ -184,30 +184,13 @@ const char* ffProcessReadOutput(FFProcessHandle* handle, FFstrbuf* buffer) waitpid(childPid, NULL, 0); return "poll(&pollfd, 1, timeout) timeout (try increasing --processing-timeout)"; } - else if (pollret < 0) - { - if (errno == EINTR) - { - // The child process has been terminated. See `chldSignalHandler` in `common/init.c` - if (waitpid(childPid, NULL, WNOHANG) == childPid) - { - // Read remaining data from the pipe - fcntl(childPipeFd, F_SETFL, O_CLOEXEC | O_NONBLOCK); - childPid = -1; - } - } - else - { - kill(childPid, SIGTERM); - waitpid(childPid, NULL, 0); - return "poll(&pollfd, 1, timeout) error: not EINTR"; - } - } - else if (pollfd.revents & POLLERR) + else if (pollret < 0 || (pollfd.revents & POLLERR)) { kill(childPid, SIGTERM); waitpid(childPid, NULL, 0); - return "poll(&pollfd, 1, timeout) error: POLLERR"; + return pollret < 0 + ? "poll(&pollfd, 1, timeout) error: pollret < 0" + : "poll(&pollfd, 1, timeout) error: pollfd.revents & POLLERR"; } } @@ -229,12 +212,7 @@ const char* ffProcessReadOutput(FFProcessHandle* handle, FFstrbuf* buffer) return NULL; } else if (nRead < 0) - { - if (errno == EAGAIN) - return NULL; - else - break; - } + break; } return "read(childPipeFd, str, FF_PIPE_BUFSIZ) failed"; diff --git a/src/detection/gpu/gpu_drm.c b/src/detection/gpu/gpu_drm.c index aee70ca4ab..9304e6f16c 100644 --- a/src/detection/gpu/gpu_drm.c +++ b/src/detection/gpu/gpu_drm.c @@ -153,7 +153,7 @@ const char* ffDrmDetectAmdgpu(const FFGPUOptions* options, FFGPUResult* gpu, con return NULL; #else - FF_UNUSED(gpu, renderPath); + FF_UNUSED(options, gpu, renderPath); return "Fastfetch is compiled without libdrm support"; #endif } diff --git a/src/detection/gpu/gpu_linux.c b/src/detection/gpu/gpu_linux.c index 6fad45f4cd..fb28f74496 100644 --- a/src/detection/gpu/gpu_linux.c +++ b/src/detection/gpu/gpu_linux.c @@ -120,7 +120,7 @@ static const char* drmDetectAmdSpecific(const FFGPUOptions* options, FFGPUResult #endif } #else - FF_UNUSED(gpu, drmKey, buffer); + FF_UNUSED(options, gpu, drmKey, buffer); return "Fastfetch is not compiled with drm support"; #endif } diff --git a/src/modules/display/display.c b/src/modules/display/display.c index 26f7430de9..0a9a4563cf 100644 --- a/src/modules/display/display.c +++ b/src/modules/display/display.c @@ -436,6 +436,7 @@ void ffInitDisplayOptions(FFDisplayOptions* options) ffOptionInitModuleArg(&options->moduleArgs, "󰍹"); options->compactType = FF_DISPLAY_COMPACT_TYPE_NONE; options->preciseRefreshRate = false; + options->order = FF_DISPLAY_ORDER_NONE; } void ffDestroyDisplayOptions(FFDisplayOptions* options)