[mc/f12/master] directory handling fixes + advanced chown dialog fix
Jindrich Novy
jnovy at fedoraproject.org
Thu Sep 2 15:32:09 UTC 2010
commit b2c5866d3e795653be983e62211b087077cd0f5f
Author: Jindrich Novy <jnovy at redhat.com>
Date: Thu Sep 2 17:32:03 2010 +0200
directory handling fixes + advanced chown dialog fix
mc-achownsegfault.patch | 12 +++++++
mc-dircopying.patch | 38 ++++++++++++++++++++++
mc-dirname.patch | 82 +++++++++++++++++++++++++++++++++++++++++++++++
mc.spec | 14 +++++++-
4 files changed, 145 insertions(+), 1 deletions(-)
---
diff --git a/mc-achownsegfault.patch b/mc-achownsegfault.patch
new file mode 100644
index 0000000..6b5fdf0
--- /dev/null
+++ b/mc-achownsegfault.patch
@@ -0,0 +1,12 @@
+diff -up mc-4.7.3/src/achown.c.achownsegfault mc-4.7.3/src/achown.c
+--- mc-4.7.3/src/achown.c.achownsegfault 2010-07-05 20:32:41.000000000 +0200
++++ mc-4.7.3/src/achown.c 2010-09-01 10:41:15.773738062 +0200
+@@ -498,7 +498,7 @@ advanced_chown_callback (Dlg_head *h, Wi
+ if (f_pos > 2)
+ break;
+ flag_pos = f_pos * 3 + i; /* (strchr(ch_perm,parm)-ch_perm); */
+- if (((WButton *) h->current)->text.start[(flag_pos % 3)] ==
++ if (((WButton *) h->current->data)->text.start[(flag_pos % 3)] ==
+ '-')
+ ch_flags[flag_pos] = '+';
+ else
diff --git a/mc-dircopying.patch b/mc-dircopying.patch
new file mode 100644
index 0000000..485adcc
--- /dev/null
+++ b/mc-dircopying.patch
@@ -0,0 +1,38 @@
+diff --git a/src/file.c b/src/file.c
+index d7eaa46..5c45dcf 100644
+--- a/src/file.c
++++ b/src/file.c
+@@ -2066,28 +2066,21 @@ panel_operate (void *source_panel, FileOperation operation, gboolean force_singl
+ dest_dir = other_panel->cwd;
+ else
+ dest_dir = panel->cwd;
+-
+ /*
+ * Add trailing backslash only when do non-local ops.
+ * It saves user from occasional file renames (when destination
+ * dir is deleted)
+ */
+- if (force_single || dest_dir[0] == '\0')
+- {
+- /* just copy */
+- dest_dir_ = g_strdup (dest_dir);
+- }
+- else if (single_entry)
++ if (!force_single && dest_dir[0] != '\0' && dest_dir[strlen (dest_dir) - 1] != PATH_SEP)
+ {
+- /* add filename to dest path */
+- dest_dir_ = g_build_filename (dest_dir, source, (char *) NULL);
++ /* add trailing separator */
++ dest_dir_ = g_strconcat (dest_dir, PATH_SEP_STR, (char *) NULL);
+ }
+ else
+ {
+- /* add trailing separator */
+- dest_dir_ = g_strconcat (dest_dir, PATH_SEP_STR, (char *) NULL);
++ /* just copy */
++ dest_dir_ = g_strdup (dest_dir);
+ }
+-
+ if (dest_dir_ == NULL)
+ {
+ file_op_total_context_destroy (tctx);
diff --git a/mc-dirname.patch b/mc-dirname.patch
new file mode 100644
index 0000000..19ee93d
--- /dev/null
+++ b/mc-dirname.patch
@@ -0,0 +1,82 @@
+diff -up mc-4.7.3/lib/search/glob.c.dirname mc-4.7.3/lib/search/glob.c
+--- mc-4.7.3/lib/search/glob.c.dirname 2010-07-05 20:32:41.000000000 +0200
++++ mc-4.7.3/lib/search/glob.c 2010-09-02 17:21:07.174555656 +0200
+@@ -118,14 +118,25 @@ mc_search__translate_replace_glob_to_reg
+ {
+ GString *buff = g_string_new ("");
+ int cnt = '0';
+-
++ gboolean escaped_mode = FALSE;
+ while (*str) {
+ char c = *str++;
+ switch (c) {
++ case '\\':
++ if (!escaped_mode)
++ {
++ escaped_mode = TRUE;
++ }
++ g_string_append_c (buff, c);
++ continue;
+ case '*':
+ case '?':
++ if (!escaped_mode)
++ {
+ g_string_append_c (buff, '\\');
+ c = ++cnt;
++ continue;
++ }
+ break;
+ /* breaks copying: mc uses "\0" internally, it must not be changed */
+ /*case '\\':*/
+@@ -134,6 +145,7 @@ mc_search__translate_replace_glob_to_reg
+ break;
+ }
+ g_string_append_c (buff, c);
++ escaped_mode = FALSE;
+ }
+ return buff;
+ }
+@@ -170,7 +182,6 @@ mc_search__run_glob (mc_search_t * lc_mc
+
+ /* --------------------------------------------------------------------------------------------- */
+
+-
+ GString *
+ mc_search_glob_prepare_replace_str (mc_search_t * lc_mc_search, GString * replace_str)
+ {
+diff -up mc-4.7.3/lib/search/regex.c.dirname mc-4.7.3/lib/search/regex.c
+--- mc-4.7.3/lib/search/regex.c.dirname 2010-07-05 20:32:41.000000000 +0200
++++ mc-4.7.3/lib/search/regex.c 2010-09-02 17:19:26.836553568 +0200
+@@ -320,7 +320,7 @@ mc_search_regex__get_max_num_of_replace_
+ gsize loop;
+ for (loop = 0; loop < len - 1; loop++)
+ {
+- if (str[loop] == '\\' && (str[loop + 1] & (char) 0xf0) == 0x30 /* 0-9 */ )
++ if (str[loop] == '\\' && g_ascii_isdigit(str[loop + 1]) )
+ {
+ if (strutils_is_char_escaped (str, &str[loop]))
+ continue;
+@@ -421,9 +421,9 @@ mc_search_regex__process_replace_str (co
+ return -1;
+ }
+
+- if ((*(curr_str + 1) & (char) 0xf0) == 0x30)
++ if ( g_ascii_isdigit(*(curr_str + 1)))
+ {
+- ret = *(curr_str + 1) - '0';
++ ret = g_ascii_digit_value (*(curr_str + 1));
+ *skip_len = 2; /* \\ and one digit */
+ return ret;
+ }
+diff -up mc-4.7.3/lib/strutil/strescape.c.dirname mc-4.7.3/lib/strutil/strescape.c
+--- mc-4.7.3/lib/strutil/strescape.c.dirname 2010-07-05 20:32:41.000000000 +0200
++++ mc-4.7.3/lib/strutil/strescape.c 2010-09-02 17:19:26.835554197 +0200
+@@ -39,7 +39,7 @@
+
+ static const char ESCAPE_SHELL_CHARS[] = " !#$%()&{}[]`?|<>;*\\\"'";
+ static const char ESCAPE_REGEX_CHARS[] = "^!#$%()&{}[]`?|<>;*.\\";
+-static const char ESCAPE_GLOB_CHARS[] = "$*\\";
++static const char ESCAPE_GLOB_CHARS[] = "$*\\?";
+
+ /*** file scope functions ************************************************************************/
+
diff --git a/mc.spec b/mc.spec
index c94274c..34bb295 100644
--- a/mc.spec
+++ b/mc.spec
@@ -1,7 +1,7 @@
Summary: User-friendly text console file manager and visual shell
Name: mc
Version: 4.7.3
-Release: 1%{?dist}
+Release: 2%{?dist}
Epoch: 1
License: GPLv2
Group: System Environment/Shells
@@ -14,6 +14,9 @@ Requires: dev >= 3.3-3
Patch0: mc-extensions.patch
Patch1: mc-mcviewsegfault.patch
+Patch2: mc-achownsegfault.patch
+Patch3: mc-dircopying.patch
+Patch4: mc-dirname.patch
%description
Midnight Commander is a visual shell much like a file manager, only
@@ -26,6 +29,9 @@ specific files.
%setup -q
%patch0 -p1 -b .extensions
%patch1 -p1 -b .mcviewsegfault
+%patch2 -p1 -b .achownsegfault
+%patch3 -p1 -b .dircopying
+%patch4 -p1 -b .dirname
%build
export CFLAGS="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $RPM_OPT_FLAGS"
@@ -87,6 +93,12 @@ rm -rf $RPM_BUILD_ROOT
%dir %{_libexecdir}/mc/extfs.d
%changelog
+* Wed Sep 1 2010 Jindrich Novy <jnovy at redhat.com> 4.7.3-2
+- fix segfault in advanced chown dialog (#625801)
+- fix broken directory copying, backport from upstream (#624973)
+- backport patch fixing crash while copying files to directory
+ with '?' letters in its name (#576622)
+
* Fri Jul 9 2010 Jindrich Novy <jnovy at redhat.com> 4.7.3-1
- update to 4.7.3 (fixes #577960, #603184)
More information about the scm-commits
mailing list