]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lsblk: avoid strcasecmp() for ASCII-only strings
authorKarel Zak <kzak@redhat.com>
Tue, 1 Apr 2025 15:45:01 +0000 (17:45 +0200)
committerKarel Zak <kzak@redhat.com>
Wed, 2 Apr 2025 09:06:17 +0000 (11:06 +0200)
Use cctype.h for locale-independent string comparison and to avoid
tricky string conversions like in tr_TR locales.

Fixes: https://github.com/util-linux/util-linux/issues/3490
Signed-off-by: Karel Zak <kzak@redhat.com>
misc-utils/lsblk-properties.c
misc-utils/lsblk.c

index 66a6df6ae3a25aec097ce4da089aa55939991fad..21e764b6e94774ce3c2400c62c5293a0c0ff0713 100644 (file)
@@ -6,6 +6,7 @@
 #endif
 
 #include "c.h"
+#include "cctype.h"
 #include "xalloc.h"
 #include "mangle.h"
 #include "path.h"
@@ -352,13 +353,13 @@ done:
 
 static int name2method(const char *name, size_t namesz)
 {
-       if (namesz == 4 && strncasecmp(name, "none", namesz) == 0)
+       if (namesz == 4 && c_strncasecmp(name, "none", namesz) == 0)
                return LSBLK_METHOD_NONE;
-       if (namesz == 4 && strncasecmp(name, "udev", namesz) == 0)
+       if (namesz == 4 && c_strncasecmp(name, "udev", namesz) == 0)
                return LSBLK_METHOD_UDEV;
-       if (namesz == 5 && strncasecmp(name, "blkid", namesz) == 0)
+       if (namesz == 5 && c_strncasecmp(name, "blkid", namesz) == 0)
                return LSBLK_METHOD_BLKID;
-       if (namesz == 4 && strncasecmp(name, "file", namesz) == 0)
+       if (namesz == 4 && c_strncasecmp(name, "file", namesz) == 0)
                return LSBLK_METHOD_FILE;
 
        warnx(_("unknown properties probing method: %s"), name);
@@ -472,7 +473,7 @@ const char *lsblk_parttype_code_to_string(const char *code, const char *pttype)
                        const struct lsblk_parttype *t = &gpt_types[i];
 
                        if (t->name && t->typestr &&
-                           strcasecmp(code, t->typestr) == 0)
+                           c_strcasecmp(code, t->typestr) == 0)
                                return t->name;
                }
        }
index 6a8dc5011bb8faa7923578a89df8323882fff9b1..bd2621c026716bb931636d70d6b1ef9a8b37a2c7 100644 (file)
@@ -40,6 +40,7 @@
 #include <blkid.h>
 
 #include "c.h"
+#include "cctype.h"
 #include "pathnames.h"
 #include "blkdev.h"
 #include "canonicalize.h"
@@ -350,7 +351,7 @@ static int column_name_to_id(const char *name, size_t namesz)
        for (i = 0; i < ARRAY_SIZE(infos); i++) {
                const char *cn = infos[i].name;
 
-               if (!strncasecmp(name, cn, namesz) && !*(cn + namesz))
+               if (!c_strncasecmp(name, cn, namesz) && !*(cn + namesz))
                        return i;
        }
 
@@ -362,7 +363,7 @@ static int column_name_to_id(const char *name, size_t namesz)
                for (i = 0; i < ARRAY_SIZE(infos); i++) {
                        if (scols_shellvar_name(infos[i].name, &buf, &bufsz) != 0)
                                continue;
-                       if (!strncasecmp(name, buf, namesz) && !*(buf + namesz)) {
+                       if (!c_strncasecmp(name, buf, namesz) && !*(buf + namesz)) {
                                free(buf);
                                return i;
                        }
@@ -463,7 +464,7 @@ static char *get_type(struct lsblk_device *dev)
 
                        if (dm_uuid_prefix) {
                                /* kpartx hack to remove partition number */
-                               if (strncasecmp(dm_uuid_prefix, "part", 4) == 0)
+                               if (c_strncasecmp(dm_uuid_prefix, "part", 4) == 0)
                                        dm_uuid_prefix[4] = '\0';
 
                                res = xstrdup(dm_uuid_prefix);