diff --git a/.gitignore b/.gitignore index 24b3a1a..af96a00 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,7 @@ gnome-commander-1.2.8.7.tar.bz2 /gnome-commander-1.12.1.tar.xz /gnome-commander-1.12.2.tar.xz /gnome-commander-1.12.3.tar.xz +/gnome-commander-1.12.3.1.tar.xz /gnome-commander-20211118T1354.tar.gz /gnome-commander-20211118T2218.tar.gz /gnome-commander-20211121T1604.tar.gz diff --git a/0001-GnomeCmdData-save_devices-place-GVariantBuilder-stru.patch b/0001-GnomeCmdData-save_devices-place-GVariantBuilder-stru.patch new file mode 100644 index 0000000..7aafb7e --- /dev/null +++ b/0001-GnomeCmdData-save_devices-place-GVariantBuilder-stru.patch @@ -0,0 +1,64 @@ +From 9723c65d0295baedeb6ee4cb85b35ab51ef22376 Mon Sep 17 00:00:00 2001 +From: Mamoru TASAKA +Date: Mon, 22 Nov 2021 17:04:36 +0900 +Subject: [PATCH] GnomeCmdData::save_devices: place GVariantBuilder structure + on stack initially + +As written on: +https://www.freedesktop.org/software/gstreamer-sdk/data/docs/latest/glib/glib-GVariant.html#g-variant-builder-new +when calling g_variant_builder_init(), GVariantBuilder structure must be placed on stack first +and the reference to the memory must be passed to the function, instead of +passing nullptr. +--- + src/gnome-cmd-data.cc | 15 ++++++++------- + 1 file changed, 8 insertions(+), 7 deletions(-) + +diff --git a/src/gnome-cmd-data.cc b/src/gnome-cmd-data.cc +index 51407cc..b38f96a 100644 +--- a/src/gnome-cmd-data.cc ++++ b/src/gnome-cmd-data.cc +@@ -1722,23 +1722,24 @@ void GnomeCmdData::save_devices() + devices = gnome_cmd_con_list_get_all_dev (gnome_cmd_data.priv->con_list); + if (devices && g_list_length(devices) > 0) + { +- GVariantBuilder *gVariantBuilder = nullptr; ++ GVariantBuilder gVariantBuilder; ++ gboolean device_added_p = false; + + for (; devices; devices = devices->next) + { + auto *device = GNOME_CMD_CON_DEVICE (devices->data); + if (device && !gnome_cmd_con_device_get_autovol (device)) + { +- if (!gVariantBuilder) ++ if (!device_added_p) + { +- g_variant_builder_init (gVariantBuilder, G_VARIANT_TYPE_ARRAY); ++ g_variant_builder_init (&gVariantBuilder, G_VARIANT_TYPE_ARRAY); + } +- ++ device_added_p = true; + gchar *icon_path = g_strdup (gnome_cmd_con_device_get_icon_path (device)); + if (!icon_path || icon_path[0] == '\0') + icon_path = g_strdup (""); + +- g_variant_builder_add (gVariantBuilder, GCMD_SETTINGS_DEVICES_FORMAT_STRING, ++ g_variant_builder_add (&gVariantBuilder, GCMD_SETTINGS_DEVICES_FORMAT_STRING, + gnome_cmd_con_device_get_alias (device), + gnome_cmd_con_device_get_device_fn (device), + gnome_cmd_con_device_get_mountp (device), +@@ -1747,9 +1748,9 @@ void GnomeCmdData::save_devices() + } + } + +- if (gVariantBuilder) ++ if (device_added_p) + { +- devicesToStore = g_variant_builder_end (gVariantBuilder); ++ devicesToStore = g_variant_builder_end (&gVariantBuilder); + g_settings_set_value(options.gcmd_settings->general, GCMD_SETTINGS_DEVICES, devicesToStore); + return; + } +-- +2.33.1 + diff --git a/0001-unicode2utf8-viewer-utils-fix-logic-on-big-endian.patch b/0001-unicode2utf8-viewer-utils-fix-logic-on-big-endian.patch deleted file mode 100644 index f9e52d8..0000000 --- a/0001-unicode2utf8-viewer-utils-fix-logic-on-big-endian.patch +++ /dev/null @@ -1,102 +0,0 @@ -From dcaaf89d44ddb463e8be22583080f454fc61d2d9 Mon Sep 17 00:00:00 2001 -From: gnome-commander Fedora maintainer - -Date: Sun, 21 Nov 2021 11:21:29 +0900 -Subject: [PATCH] unicode2utf8(viewer-utils): fix logic on big endian - ---- - src/intviewer/inputmodes.cc | 2 +- - src/intviewer/viewer-utils.cc | 24 ++++++++++++------------ - src/intviewer/viewer-utils.h | 2 +- - 3 files changed, 14 insertions(+), 14 deletions(-) - -diff --git a/src/intviewer/inputmodes.cc b/src/intviewer/inputmodes.cc -index 269777e7..7a4d1b5f 100644 ---- a/src/intviewer/inputmodes.cc -+++ b/src/intviewer/inputmodes.cc -@@ -223,7 +223,7 @@ static void inputmode_ascii_activate(GVInputModesData *imd, const gchar *encodin - { - // these are defined in 'cp437.c' - unsigned int unicode = ascii_cp437_to_unicode[i]; -- unicode2utf8(unicode, (unsigned char*)&imd->ascii_charset_translation[i]); -+ unicode2utf8(unicode, &imd->ascii_charset_translation[i]); - } - g_free (imd->input_mode_name); - imd->input_mode_name = g_strdup ("CP437"); -diff --git a/src/intviewer/viewer-utils.cc b/src/intviewer/viewer-utils.cc -index 40f8819c..6d9c6e59 100644 ---- a/src/intviewer/viewer-utils.cc -+++ b/src/intviewer/viewer-utils.cc -@@ -29,36 +29,36 @@ - - using namespace std; - --int unicode2utf8 (unsigned int unicode, unsigned char *out) -+int unicode2utf8 (unsigned int unicode, char_type *out) - { - int bytes_needed = 0; - if (unicode<0x80) - { - bytes_needed = 1; -- out[0] = (unsigned char)(unicode&0xFF); -+ *out = (unsigned char)(unicode&0xFF); - } - else - if (unicode<0x0800) - { - bytes_needed = 2; -- out[0] = (unsigned char)(unicode>>6 | 0xC0); -- out[1] = (unsigned char)((unicode&0x3F)| 0x80); -+ *out = (unsigned char)(unicode>>6 | 0xC0); -+ *out |= ((unsigned char)((unicode&0x3F)| 0x80) << 8); - } - else - if (unicode<0x10000) - { - bytes_needed = 3; -- out[0] = (unsigned char)((unicode>>12) | 0xE0); -- out[1] = (unsigned char)(((unicode>>6) & 0x3F) | 0x80); -- out[2] = (unsigned char)((unicode & 0x3F) | 0x80); -+ *out = (unsigned char)((unicode>>12) | 0xE0); -+ *out |= ((unsigned char)(((unicode>>6) & 0x3F) | 0x80) << 8); -+ *out |= ((unsigned char)((unicode & 0x3F) | 0x80) << 16); - } - else - { - bytes_needed = 4; -- out[0] = (unsigned char)((unicode>>18) | 0xE0); -- out[1] = (unsigned char)(((unicode>>12) & 0x3F) | 0x80); -- out[2] = (unsigned char)(((unicode>>6) & 0x3F) | 0x80); -- out[3] = (unsigned char)((unicode & 0x3F) | 0x80); -+ *out = (unsigned char)((unicode>>18) | 0xE0); -+ *out |= ((unsigned char)(((unicode>>12) & 0x3F) | 0x80) << 8); -+ *out |= ((unsigned char)(((unicode>>6) & 0x3F) | 0x80) << 16); -+ *out |= ((unsigned char)((unicode & 0x3F) | 0x80) << 24); - } - - return bytes_needed; -@@ -84,7 +84,7 @@ char_type *convert_utf8_to_chartype_array (const gchar *utf8text, /*out*/ int &a - { - unicode_char = g_utf8_get_char(pos); - -- unicode2utf8(unicode_char, (unsigned char*)&result[index]); -+ unicode2utf8(unicode_char, &result[index]); - - pos = g_utf8_next_char(pos); - if (!pos) -diff --git a/src/intviewer/viewer-utils.h b/src/intviewer/viewer-utils.h -index eb06fedc..c561e698 100644 ---- a/src/intviewer/viewer-utils.h -+++ b/src/intviewer/viewer-utils.h -@@ -26,7 +26,7 @@ - - #define GVIEWER_DEFAULT_PATH_PREFIX "/gnome-commander/internal_viewer/" - --int unicode2utf8(unsigned int unicode, unsigned char *out); -+int unicode2utf8(unsigned int unicode, char_type *out); - char_type *convert_utf8_to_chartype_array(const gchar *utf8text, /*out*/ int &array_length); - - guint8 *mem_reverse(const guint8 *buffer, guint buflen); --- -2.33.1 - diff --git a/gnome-commander.spec b/gnome-commander.spec index 29be664..ce86fe5 100644 --- a/gnome-commander.spec +++ b/gnome-commander.spec @@ -40,8 +40,8 @@ %endif %global shortver 1.12 -%global fullver %{shortver}.3 -%global mainrel 1 +%global fullver %{shortver}.3.1 +%global mainrel 2 %if 0%{?use_release} >= 1 %global fedorarel %{?prever:0.}%{mainrel}%{?prever:.%{prerpmver}} @@ -87,7 +87,7 @@ Source2: create-gcmd-git-bare-tarball.sh Source10: mimeedit-svn%{mimeedit_rev}.sh Patch1: gnome-commander-1.6.0-path-fedora-specific.patch # Must send to be upstream -Patch101: 0001-unicode2utf8-viewer-utils-fix-logic-on-big-endian.patch +Patch101: 0001-GnomeCmdData-save_devices-place-GVariantBuilder-stru.patch BuildRequires: gcc-c++ %if 0%{?use_gcc_strict_sanitize} @@ -193,13 +193,37 @@ git config user.name "%{name} Fedora maintainer" git config user.email "%{name}-owner@fedoraproject.org" %if 0%{?use_release} +cat > .gitignore < 0 ( export NOCONFIGURE=1 ; sh autogen.sh ) @@ -367,6 +391,12 @@ popd %{_datadir}/pixmaps/%{name}/ %changelog +* Mon Nov 22 2021 Mamoru TASAKA - 4:1.12.3.1-2 +- Fix crash when saving device information on preference + +* Mon Nov 22 2021 Mamoru TASAKA - 4:1.12.3.1-1 +- 1.12.3.1 + * Sun Nov 21 2021 Mamoru TASAKA - 4:1.12.3-1 - 1.12.3 - enable test