fix segfault in Replace dialog, show proper contents in history
This commit is contained in:
parent
b2df7e77bf
commit
92144a5e41
30
mc-historyfix.patch
Normal file
30
mc-historyfix.patch
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
diff --git a/src/widget.c b/src/widget.c
|
||||||
|
index 280575a..bf052cd 100644
|
||||||
|
--- a/src/widget.c
|
||||||
|
+++ b/src/widget.c
|
||||||
|
@@ -1492,12 +1492,12 @@ show_hist (GList ** history, Widget * widget)
|
||||||
|
entry->text = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- destroy_dlg (query_dlg);
|
||||||
|
-
|
||||||
|
/* restore history direction */
|
||||||
|
if (query_dlg->y < widget->y)
|
||||||
|
z = g_list_reverse (z);
|
||||||
|
|
||||||
|
+ destroy_dlg (query_dlg);
|
||||||
|
+
|
||||||
|
g_list_foreach (*history, (GFunc) g_free, NULL);
|
||||||
|
g_list_free (*history);
|
||||||
|
*history = g_list_last (z);
|
||||||
|
@@ -2751,9 +2751,7 @@ listbox_key (WListbox * l, int key)
|
||||||
|
static inline void
|
||||||
|
listbox_destroy (WListbox * l)
|
||||||
|
{
|
||||||
|
- /* don't delete list in modifable listbox */
|
||||||
|
- if (!l->deletable)
|
||||||
|
- listbox_remove_list (l);
|
||||||
|
+ listbox_remove_list (l);
|
||||||
|
}
|
||||||
|
|
||||||
|
static cb_ret_t
|
110
mc-replacefix.patch
Normal file
110
mc-replacefix.patch
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
diff --git a/src/editor/editcmd.c b/src/editor/editcmd.c
|
||||||
|
index 0e8bb1d..f568bdf 100644
|
||||||
|
--- a/src/editor/editcmd.c
|
||||||
|
+++ b/src/editor/editcmd.c
|
||||||
|
@@ -1785,7 +1785,6 @@ edit_replace_cmd (WEdit * edit, int again)
|
||||||
|
|
||||||
|
if ((edit->search_start >= 0) && (edit->search_start < edit->last_byte))
|
||||||
|
{
|
||||||
|
- gboolean replace_yes;
|
||||||
|
gsize i;
|
||||||
|
|
||||||
|
edit->found_start = edit->search_start;
|
||||||
|
@@ -1794,11 +1793,11 @@ edit_replace_cmd (WEdit * edit, int again)
|
||||||
|
edit_cursor_move (edit, edit->search_start - edit->curs1);
|
||||||
|
edit_scroll_screen_over_cursor (edit);
|
||||||
|
|
||||||
|
- replace_yes = TRUE;
|
||||||
|
-
|
||||||
|
if (edit->replace_mode == 0)
|
||||||
|
{
|
||||||
|
int l;
|
||||||
|
+ int prompt;
|
||||||
|
+
|
||||||
|
l = edit->curs_row - edit->num_widget_lines / 3;
|
||||||
|
if (l > 0)
|
||||||
|
edit_scroll_downward (edit, l);
|
||||||
|
@@ -1814,52 +1813,49 @@ edit_replace_cmd (WEdit * edit, int again)
|
||||||
|
/* and prompt 2/3 down */
|
||||||
|
disp1 = edit_replace_cmd__conv_to_display (saved1);
|
||||||
|
disp2 = edit_replace_cmd__conv_to_display (saved2);
|
||||||
|
+ prompt = editcmd_dialog_replace_prompt_show (edit, disp1, disp2, -1, -1);
|
||||||
|
+ g_free (disp1);
|
||||||
|
+ g_free (disp2);
|
||||||
|
|
||||||
|
- switch (editcmd_dialog_replace_prompt_show (edit, disp1, disp2, -1, -1))
|
||||||
|
- {
|
||||||
|
- case B_ENTER:
|
||||||
|
- replace_yes = TRUE;
|
||||||
|
- break;
|
||||||
|
- case B_SKIP_REPLACE:
|
||||||
|
- replace_yes = FALSE;
|
||||||
|
- break;
|
||||||
|
- case B_REPLACE_ALL:
|
||||||
|
+ if (prompt == B_REPLACE_ALL)
|
||||||
|
edit->replace_mode = 1;
|
||||||
|
- break;
|
||||||
|
- case B_CANCEL:
|
||||||
|
- replace_yes = FALSE;
|
||||||
|
+ else if (prompt == B_SKIP_REPLACE)
|
||||||
|
+ {
|
||||||
|
+ if (edit_search_options.backwards)
|
||||||
|
+ edit->search_start--;
|
||||||
|
+ else
|
||||||
|
+ edit->search_start++;
|
||||||
|
+ continue; /* loop */
|
||||||
|
+ }
|
||||||
|
+ else if (prompt == B_CANCEL)
|
||||||
|
+ {
|
||||||
|
edit->replace_mode = -1;
|
||||||
|
- break;
|
||||||
|
+ break; /* loop */
|
||||||
|
}
|
||||||
|
- g_free (disp1);
|
||||||
|
- g_free (disp2);
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (replace_yes)
|
||||||
|
+ /* don't process string each time */
|
||||||
|
+ if (tmp_str == NULL)
|
||||||
|
{
|
||||||
|
- /* don't process string each time */
|
||||||
|
- if (tmp_str == NULL)
|
||||||
|
- {
|
||||||
|
- tmp_str = g_string_new (input2);
|
||||||
|
- repl_str = mc_search_prepare_replace_str (edit->search, tmp_str);
|
||||||
|
+ tmp_str = g_string_new (input2);
|
||||||
|
+ repl_str = mc_search_prepare_replace_str (edit->search, tmp_str);
|
||||||
|
|
||||||
|
- if (edit->search->error != MC_SEARCH_E_OK)
|
||||||
|
- {
|
||||||
|
- edit_error_dialog (_("Replace"), edit->search->error_str);
|
||||||
|
- break;
|
||||||
|
- }
|
||||||
|
+ if (edit->search->error != MC_SEARCH_E_OK)
|
||||||
|
+ {
|
||||||
|
+ edit_error_dialog (_("Replace"), edit->search->error_str);
|
||||||
|
+ break;
|
||||||
|
}
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- /* delete then insert new */
|
||||||
|
- for (i = 0; i < len; i++)
|
||||||
|
- edit_delete (edit, 1);
|
||||||
|
+ /* delete then insert new */
|
||||||
|
+ for (i = 0; i < len; i++)
|
||||||
|
+ edit_delete (edit, 1);
|
||||||
|
|
||||||
|
- for (i = 0; i < repl_str->len; i++)
|
||||||
|
- edit_insert (edit, repl_str->str[i]);
|
||||||
|
+ for (i = 0; i < repl_str->len; i++)
|
||||||
|
+ edit_insert (edit, repl_str->str[i]);
|
||||||
|
|
||||||
|
- edit->found_len = repl_str->len;
|
||||||
|
- times_replaced++;
|
||||||
|
- }
|
||||||
|
+ edit->found_len = repl_str->len;
|
||||||
|
+ times_replaced++;
|
||||||
|
|
||||||
|
/* so that we don't find the same string again */
|
||||||
|
if (edit_search_options.backwards)
|
10
mc.spec
10
mc.spec
@ -1,7 +1,7 @@
|
|||||||
Summary: User-friendly text console file manager and visual shell
|
Summary: User-friendly text console file manager and visual shell
|
||||||
Name: mc
|
Name: mc
|
||||||
Version: 4.7.3
|
Version: 4.7.3
|
||||||
Release: 3%{?dist}
|
Release: 4%{?dist}
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
License: GPLv2
|
License: GPLv2
|
||||||
Group: System Environment/Shells
|
Group: System Environment/Shells
|
||||||
@ -17,6 +17,8 @@ Patch1: mc-mcviewsegfault.patch
|
|||||||
Patch2: mc-achownsegfault.patch
|
Patch2: mc-achownsegfault.patch
|
||||||
Patch3: mc-dircopying.patch
|
Patch3: mc-dircopying.patch
|
||||||
Patch4: mc-dirname.patch
|
Patch4: mc-dirname.patch
|
||||||
|
Patch5: mc-replacefix.patch
|
||||||
|
Patch6: mc-historyfix.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
Midnight Commander is a visual shell much like a file manager, only
|
Midnight Commander is a visual shell much like a file manager, only
|
||||||
@ -32,6 +34,8 @@ specific files.
|
|||||||
%patch2 -p1 -b .achownsegfault
|
%patch2 -p1 -b .achownsegfault
|
||||||
%patch3 -p1 -b .dircopying
|
%patch3 -p1 -b .dircopying
|
||||||
%patch4 -p1 -b .dirname
|
%patch4 -p1 -b .dirname
|
||||||
|
%patch5 -p1 -b .replacefix
|
||||||
|
%patch6 -p1 -b .historyfix
|
||||||
|
|
||||||
%build
|
%build
|
||||||
export CFLAGS="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $RPM_OPT_FLAGS"
|
export CFLAGS="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $RPM_OPT_FLAGS"
|
||||||
@ -93,6 +97,10 @@ rm -rf $RPM_BUILD_ROOT
|
|||||||
%dir %{_libexecdir}/mc/extfs.d
|
%dir %{_libexecdir}/mc/extfs.d
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Sep 3 2010 Jindrich Novy <jnovy@redhat.com> 4.7.3-4
|
||||||
|
- fix segfault when pressing Cancel in Replace String dialog (#629847)
|
||||||
|
- show proper contents in history and fix memleak (ticket #2299)
|
||||||
|
|
||||||
* Thu Sep 2 2010 Jindrich Novy <jnovy@redhat.com> 4.7.3-3
|
* Thu Sep 2 2010 Jindrich Novy <jnovy@redhat.com> 4.7.3-3
|
||||||
- fix broken directory copying, backport from upstream (#624973)
|
- fix broken directory copying, backport from upstream (#624973)
|
||||||
- backport patch fixing crash while copying files to directory
|
- backport patch fixing crash while copying files to directory
|
||||||
|
Loading…
Reference in New Issue
Block a user