From a324debddbc562965acdc1c0564e55cd2e67b3ae Mon Sep 17 00:00:00 2001 From: qhw01063182 Date: Fri, 19 Jul 2024 13:58:02 +0800 Subject: [PATCH] return a nicer UTF-8 string Signed-off-by: qhw01063182 --- 18030-0001-get-utf8-block-label.patch | 59 ++++++++++++++++++ ...-udisksclients-add-utf8-string-check.patch | 61 +++++++++++++++++++ udisks2.spec | 11 +++- 3 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 18030-0001-get-utf8-block-label.patch create mode 100644 18030-0002-udisksclients-add-utf8-string-check.patch diff --git a/18030-0001-get-utf8-block-label.patch b/18030-0001-get-utf8-block-label.patch new file mode 100644 index 0000000..e0b573a --- /dev/null +++ b/18030-0001-get-utf8-block-label.patch @@ -0,0 +1,59 @@ +From 08ad0a028b70ac96c1531992123c769971554b87 Mon Sep 17 00:00:00 2001 +From: Liwei Ge +Date: Thu, 4 Jul 2024 13:45:09 +0800 +Subject: [PATCH] get utf8 block label + +--- + src/udisksdaemonutil.c | 15 ++++++++++++++- + src/udisksdaemonutil.h | 2 +- + 2 files changed, 15 insertions(+), 2 deletions(-) + +diff --git a/src/udisksdaemonutil.c b/src/udisksdaemonutil.c +index 1695b52..18a4234 100644 +--- a/src/udisksdaemonutil.c ++++ b/src/udisksdaemonutil.c +@@ -223,7 +223,7 @@ udisks_variant_get_binary (GVariant *value, + * Returns: A valid UTF-8 string that must be freed with g_free(). + */ + gchar * +-udisks_decode_udev_string (const gchar *str, const gchar *fallback_str) ++__attribute__ ((optimize(0))) udisks_decode_udev_string (const gchar *str, const gchar *fallback_str) + { + GString *s; + gchar *ret; +@@ -263,6 +263,19 @@ udisks_decode_udev_string (const gchar *str, const gchar *fallback_str) + + if (!g_utf8_validate (s->str, -1, &end_valid)) + { ++ ++ ret = g_locale_to_utf8 (s->str, -1, NULL, NULL, NULL); ++ if (ret) { ++ g_string_free (s, TRUE); ++ goto out; ++ } ++ ++ ret = g_convert(s->str, -1, "UTF-8", "GB18030", NULL, NULL, NULL); ++ if (ret) { ++ g_string_free (s, TRUE); ++ goto out; ++ } ++ + udisks_warning ("The string `%s' is not valid UTF-8. Invalid characters begins at `%s'", s->str, end_valid); + if (fallback_str) + { +diff --git a/src/udisksdaemonutil.h b/src/udisksdaemonutil.h +index df584de..42655c2 100644 +--- a/src/udisksdaemonutil.h ++++ b/src/udisksdaemonutil.h +@@ -35,7 +35,7 @@ gboolean udisks_variant_lookup_binary (GVariant *dict, + gboolean udisks_variant_get_binary (GVariant *variant, + GString **contents); + +-gchar *udisks_decode_udev_string (const gchar *str, ++gchar * __attribute__ ((optimize(0))) udisks_decode_udev_string (const gchar *str, + const gchar *fallback_str); + + void udisks_safe_append_to_object_path (GString *str, +-- +2.39.3 + diff --git a/18030-0002-udisksclients-add-utf8-string-check.patch b/18030-0002-udisksclients-add-utf8-string-check.patch new file mode 100644 index 0000000..afd0815 --- /dev/null +++ b/18030-0002-udisksclients-add-utf8-string-check.patch @@ -0,0 +1,61 @@ +diff -Nurp udisks-2.9.4.origin/udisks/udisksclient.c udisks-2.9.4/udisks/udisksclient.c +--- udisks-2.9.4.origin/udisks/udisksclient.c 2021-09-30 00:00:31.000000000 +0800 ++++ udisks-2.9.4/udisks/udisksclient.c 2024-07-11 22:02:28.230927335 +0800 +@@ -1239,16 +1239,27 @@ udisks_client_get_partition_info (UDisks + if (type_str == NULL) + type_str = udisks_partition_get_type_ (partition); + ++ gchar *utf8_type_str; ++ ++ /*make sure type_str is utf8 string*/ ++ utf8_type_str = g_locale_to_utf8 (type_str, -1, NULL, NULL, NULL); ++ + if (flags_str != NULL) + { ++ gchar *utf8_flags_str; ++ /*make sure flags_str is utf8 string*/ ++ utf8_flags_str = g_locale_to_utf8 (flags_str, -1, NULL, NULL, NULL); ++ + /* Translators: Partition info. First %s is the type, second %s is a list of flags */ +- ret = g_strdup_printf (C_("partition-info", "%s (%s)"), type_str, flags_str); ++ ret = g_strdup_printf (C_("partition-info", "%s (%s)"), utf8_type_str, utf8_flags_str); ++ g_free(utf8_flags_str); + } + else + { +- ret = g_strdup (type_str); ++ ret = g_strdup (utf8_type_str); + } + ++ g_free(utf8_type_str); + if (ret == NULL || strlen (ret) == 0) + { + g_free (ret); +@@ -1817,6 +1828,7 @@ udisks_client_get_size_for_display (UDis + gboolean long_string) + { + gchar *str; ++ gchar *utf8_str; + + if (long_string) + { +@@ -1856,7 +1868,18 @@ udisks_client_get_size_for_display (UDis + str = get_pow10_size (size); + } + } +- return str; ++ ++ if (!g_utf8_validate (str, -1, NULL)) ++ { ++ utf8_str = g_locale_to_utf8 (str, -1, NULL, NULL, NULL); ++ } ++ else ++ { ++ utf8_str = g_strdup (str); ++ } ++ ++ g_free(str); ++ return utf8_str; + } + + /* ---------------------------------------------------------------------------------------------------- */ diff --git a/udisks2.spec b/udisks2.spec index db4581e..709e839 100644 --- a/udisks2.spec +++ b/udisks2.spec @@ -1,4 +1,4 @@ -%define anolis_release .0.1 +%define anolis_release .0.2 %global glib2_version 2.36 %global gobject_introspection_version 1.30.0 %global polkit_version 0.102 @@ -107,6 +107,9 @@ Patch36: udisks-2.10.0-lvm2_vgcreate_uevent_sync.patch # https://bugzilla.redhat.com/show_bug.cgi?id=2213193 Patch37: udisks-2.10.0-iscsi-ibft-chap-auth.patch +Patch1000: 18030-0001-get-utf8-block-label.patch +Patch1001: 18030-0002-udisksclients-add-utf8-string-check.patch + BuildRequires: glib2-devel >= %{glib2_version} BuildRequires: gobject-introspection-devel >= %{gobject_introspection_version} BuildRequires: libgudev1-devel >= %{systemd_version} @@ -349,6 +352,8 @@ Doc pages for %{name}. %patch35 -p1 %patch36 -p1 %patch37 -p1 +%patch1000 -p1 +%patch1001 -p1 sed -i udisks/udisks2.conf.in -e "s/encryption=luks1/encryption=%{default_luks_encryption}/" %build @@ -543,6 +548,10 @@ fi %doc README.md AUTHORS NEWS HACKING %changelog +* Mon Jul 15 2024 Liwei Ge - 2.9.0-16.0.2 +- return a nicer UTF-8 string +- Add UTF-8 check for udisksclient + * Mon Dec 11 2023 liuzhilin - 2.9.0-16.0.1 - Add doc package -- Gitee