]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
ls: check FILETYPE_INDICATORS cardinality
authorPaul Eggert <eggert@cs.ucla.edu>
Wed, 2 Oct 2024 00:12:31 +0000 (17:12 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Thu, 3 Oct 2024 06:03:04 +0000 (23:03 -0700)
* src/ls.c (filetype_cardinality): New constant.
(filetype_letter): Omit unnecessary trailing NUL.
(FILETYPE_INDICATORS): Remove, moving definiens to ...
(get_color_indicator): ... here, and check its cardinality too.

src/ls.c

index 86e6de3d4c02906fdb9c8899239e210c361127ff..12af327947e24b6a24ec2d8e16f17ff1fabd0781 100644 (file)
--- a/src/ls.c
+++ b/src/ls.c
@@ -172,20 +172,13 @@ enum filetype
     whiteout,
     arg_directory
   };
+enum { filetype_cardinality = arg_directory + 1 };
 
 /* Display letters and indicators for each filetype.
    Keep these in sync with enum filetype.  */
-static char const filetype_letter[] = "?pcdb-lswd";
-
-/* Ensure that filetype and filetype_letter have the same
-   number of elements.  */
-static_assert (sizeof filetype_letter - 1 == arg_directory + 1);
-
-#define FILETYPE_INDICATORS                            \
-  {                                                    \
-    C_ORPHAN, C_FIFO, C_CHR, C_DIR, C_BLK, C_FILE,     \
-    C_LINK, C_SOCK, C_FILE, C_DIR                      \
-  }
+static char const filetype_letter[] =
+  {'?', 'p', 'c', 'd', 'b', '-', 'l', 's', 'w', 'd'};
+static_assert (ARRAY_CARDINALITY (filetype_letter) == filetype_cardinality);
 
 enum acl_type
   {
@@ -4956,7 +4949,13 @@ get_color_indicator (const struct fileinfo *f, bool symlink_target)
     type = C_MISSING;
   else if (!f->stat_ok)
     {
-      static enum indicator_no filetype_indicator[] = FILETYPE_INDICATORS;
+      static enum indicator_no const filetype_indicator[] =
+        {
+          C_ORPHAN, C_FIFO, C_CHR, C_DIR, C_BLK, C_FILE,
+          C_LINK, C_SOCK, C_FILE, C_DIR
+        };
+      static_assert (ARRAY_CARDINALITY (filetype_indicator)
+                     == filetype_cardinality);
       type = filetype_indicator[f->filetype];
     }
   else