aboutsummaryrefslogtreecommitdiff
path: root/filesystems/e2fsprogs-core/files/patch-e2fsck__unix.c
diff options
context:
space:
mode:
Diffstat (limited to 'filesystems/e2fsprogs-core/files/patch-e2fsck__unix.c')
-rw-r--r--filesystems/e2fsprogs-core/files/patch-e2fsck__unix.c78
1 files changed, 78 insertions, 0 deletions
diff --git a/filesystems/e2fsprogs-core/files/patch-e2fsck__unix.c b/filesystems/e2fsprogs-core/files/patch-e2fsck__unix.c
new file mode 100644
index 000000000000..fe98d8988b57
--- /dev/null
+++ b/filesystems/e2fsprogs-core/files/patch-e2fsck__unix.c
@@ -0,0 +1,78 @@
+// SIGINFO is a Berkeley extension, so we need to
+// remove the #define _XOPEN_SOURCE 600
+// It would hide all non-POSIX declarations, including SIGINFO.
+
+--- e2fsck/unix.c.orig 2024-05-21 02:52:47 UTC
++++ e2fsck/unix.c
+@@ -9,8 +9,6 @@
+ * %End-Header%
+ */
+
+-#define _XOPEN_SOURCE 600 /* for inclusion of sa_handler in Solaris */
+-
+ #include "config.h"
+ #include <stdio.h>
+ #ifdef HAVE_STDLIB_H
+@@ -37,7 +35,7 @@ extern int optind;
+ #include <sys/ioctl.h>
+ #endif
+ #ifdef HAVE_MALLOC_H
+-#include <malloc.h>
++#include <stdlib.h>
+ #endif
+ #ifdef HAVE_SYS_TYPES_H
+ #include <sys/types.h>
+@@ -608,6 +606,24 @@ static int e2fsck_update_progress(e2fsck_t ctx, int pa
+ return 0;
+ }
+
++static int e2fsck_progress_once(e2fsck_t ctx, int pass, unsigned long cur, unsigned long max)
++{
++ char buf[80];
++ float percent;
++
++ if (pass == 0)
++ return 0;
++
++ percent = calc_percent(&e2fsck_tbl, pass, cur, max);
++ e2fsck_simple_progress(ctx, ctx->device_name,
++ percent, 0);
++
++ printf("\n");
++ ctx->progress = 0;
++ return 0;
++}
++
++
+ #define PATH_SET "PATH=/sbin"
+
+ /*
+@@ -641,6 +657,17 @@ static void signal_progress_on(int sig EXT2FS_ATTR((un
+ ctx->progress = e2fsck_update_progress;
+ }
+
++static void signal_progress_now(int sig EXT2FS_ATTR((unused)))
++{
++ e2fsck_t ctx = e2fsck_global_ctx;
++
++ if (!ctx)
++ return;
++
++ ctx->progress = e2fsck_progress_once;
++ ctx->progress_fd = 0;
++}
++
+ static void signal_progress_off(int sig EXT2FS_ATTR((unused)))
+ {
+ e2fsck_t ctx = e2fsck_global_ctx;
+@@ -1127,6 +1154,10 @@ static errcode_t PRS(int argc, char *argv[], e2fsck_t
+ sigaction(SIGUSR1, &sa, 0);
+ sa.sa_handler = signal_progress_off;
+ sigaction(SIGUSR2, &sa, 0);
++ sa.sa_handler = signal_progress_now;
++ if (!getenv("e2fsprogs_inhibit_SIGINFO")) {
++ sigaction(SIGINFO, &sa, 0);
++ }
+ #endif
+
+ /* Update our PATH to include /sbin if we need to run badblocks */