]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_scrub: report optional features in version string
authorDarrick J. Wong <djwong@kernel.org>
Mon, 28 Feb 2022 21:47:43 +0000 (16:47 -0500)
committerEric Sandeen <sandeen@sandeen.net>
Mon, 28 Feb 2022 21:47:43 +0000 (16:47 -0500)
Ted Ts'o reported brittleness in the fstests logic in generic/45[34] to
detect whether or not xfs_scrub is capable of detecting Unicode mischief
in directory and xattr names.  This is a compile-time feature, since we
do not assume that all distros will want to ship xfsprogs with libicu.

Rather than relying on ldd tests (which don't work at all if xfs_scrub
is compiled statically), let's have -V print whether or not the feature
is built into the tool.  Phase 5 still requires the presence of "UTF-8"
in LC_MESSAGES to enable Unicode confusable detection; this merely makes
the feature easier to discover.

Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
scrub/xfs_scrub.c

index bc2e84a73aa07c8ff82e70ee9c5991ca231687cc..41839c2642c688cb2d8dbcfb97b95eebd1bfcc96 100644 (file)
@@ -582,6 +582,13 @@ report_outcome(
        }
 }
 
+/* Compile-time features discoverable via version strings */
+#ifdef HAVE_LIBICU
+# define XFS_SCRUB_HAVE_UNICODE        "+"
+#else
+# define XFS_SCRUB_HAVE_UNICODE        "-"
+#endif
+
 int
 main(
        int                     argc,
@@ -592,6 +599,7 @@ main(
        char                    *mtab = NULL;
        FILE                    *progress_fp = NULL;
        struct fs_path          *fsp;
+       int                     vflag = 0;
        int                     c;
        int                     fd;
        int                     ret = SCRUB_RET_SUCCESS;
@@ -670,10 +678,8 @@ main(
                        verbose = true;
                        break;
                case 'V':
-                       fprintf(stdout, _("%s version %s\n"), progname,
-                                       VERSION);
-                       fflush(stdout);
-                       return SCRUB_RET_SUCCESS;
+                       vflag++;
+                       break;
                case 'x':
                        scrub_data = true;
                        break;
@@ -682,6 +688,18 @@ main(
                }
        }
 
+       if (vflag) {
+               if (vflag == 1)
+                       fprintf(stdout, _("%s version %s\n"),
+                                       progname, VERSION);
+               else
+                       fprintf(stdout, _("%s version %s %sUnicode\n"),
+                                       progname, VERSION,
+                                       XFS_SCRUB_HAVE_UNICODE);
+               fflush(stdout);
+               return SCRUB_RET_SUCCESS;
+       }
+
        /* Override thread count if debugger */
        if (debug_tweak_on("XFS_SCRUB_THREADS")) {
                unsigned int    x;