rendered paste bodydiff --git a/lib/filehighlight/ini-file-read.c b/lib/filehighlight/ini-file-read.cindex 44faca4..78d2350 100644--- a/lib/filehighlight/ini-file-read.c+++ b/lib/filehighlight/ini-file-read.c@@ -115,7 +115,7 @@ mc_fhl_parse_get_regexp (mc_fhl_t * fhl, const gchar * group_name) mc_filter = g_new0 (mc_fhl_filter_t, 1); mc_filter->type = MC_FLHGH_T_FREGEXP;- mc_filter->search_condition = mc_search_new (regexp, -1);+ mc_filter->search_condition = mc_search_new (regexp, -1, "ASCII"); mc_filter->search_condition->is_case_sensitive = TRUE; mc_filter->search_condition->search_type = MC_SEARCH_T_REGEX; @@ -162,7 +162,7 @@ mc_fhl_parse_get_extensions (mc_fhl_t * fhl, const gchar * group_name) mc_filter = g_new0 (mc_fhl_filter_t, 1); mc_filter->type = MC_FLHGH_T_FREGEXP;- mc_filter->search_condition = mc_search_new (buf->str, buf->len);+ mc_filter->search_condition = mc_search_new (buf->str, buf->len, "ASCII"); mc_filter->search_condition->is_case_sensitive = mc_config_get_bool (fhl->config, group_name, "extensions_case", TRUE); mc_filter->search_condition->search_type = MC_SEARCH_T_REGEX;diff --git a/lib/search.h b/lib/search.hindex b1fd8eb..e2c3ab0 100644--- a/lib/search.h+++ b/lib/search.h@@ -108,6 +108,7 @@ typedef struct mc_search_struct /* original search string */ gchar *original; gsize original_len;+ gchar *original_charset; /* error code after search */ mc_search_error_t error;@@ -124,7 +125,8 @@ typedef struct mc_search_type_str_struct /*** declarations of public functions ************************************************************/ -mc_search_t *mc_search_new (const gchar * original, gsize original_len);+mc_search_t *mc_search_new (const gchar * original, gsize original_len,+ const gchar * original_charset); void mc_search_free (mc_search_t * lc_mc_search); @@ -144,7 +146,8 @@ gboolean mc_search_is_fixed_search_str (mc_search_t *); gchar **mc_search_get_types_strings_array (size_t * num); -gboolean mc_search (const gchar *, const gchar *, mc_search_type_t);+gboolean mc_search (const gchar * pattern, const gchar * pattern_charset, const gchar * str,+ mc_search_type_t type); int mc_search_getstart_result_by_num (mc_search_t *, int); int mc_search_getend_result_by_num (mc_search_t *, int);diff --git a/lib/search/lib.c b/lib/search/lib.cindex 0ecbff9..2a1c380 100644--- a/lib/search/lib.c+++ b/lib/search/lib.c@@ -64,7 +64,8 @@ mc_search__recode_str (const char *str, gsize str_len, gsize bytes_read; GIConv conv; - if (charset_from == NULL || charset_to == NULL || !strcmp (charset_to, charset_from))+ if (charset_from == NULL || charset_to == NULL+ || g_ascii_strcasecmp (charset_to, charset_from) == 0) { *bytes_written = str_len; return g_strndup (str, str_len);diff --git a/lib/search/search.c b/lib/search/search.cindex 1be600f..c9d3022 100644--- a/lib/search/search.c+++ b/lib/search/search.c@@ -129,11 +129,11 @@ mc_search__conditions_free (GPtrArray * array) } /* --------------------------------------------------------------------------------------------- */- /*** public functions ****************************************************************************/+/* --------------------------------------------------------------------------------------------- */ mc_search_t *-mc_search_new (const gchar * original, gsize str_len)+mc_search_new (const gchar * original, gsize str_len, const gchar * original_charset) { mc_search_t *lc_mc_search; @@ -150,6 +150,8 @@ mc_search_new (const gchar * original, gsize str_len) lc_mc_search = g_malloc0 (sizeof (mc_search_t)); lc_mc_search->original = g_strndup (original, str_len); lc_mc_search->original_len = str_len;+ lc_mc_search->original_charset =+ g_strdup (original_charset != NULL ? original_charset : cp_display); return lc_mc_search; } @@ -162,6 +164,7 @@ mc_search_free (mc_search_t * lc_mc_search) return; g_free (lc_mc_search->original);+ g_free (lc_mc_search->original_charset); g_free (lc_mc_search->error_str); if (lc_mc_search->conditions != NULL)@@ -191,25 +194,27 @@ mc_search_prepare (mc_search_t * lc_mc_search) #ifdef HAVE_CHARSET if (lc_mc_search->is_all_charsets) {- gsize loop1, recoded_str_len;- gchar *buffer;+ gsize loop1; for (loop1 = 0; loop1 < codepages->len; loop1++) {- const char *id = ((codepage_desc *) g_ptr_array_index (codepages, loop1))->id;+ const char *id;+ gsize recoded_str_len;+ gchar *buffer; - if (!g_ascii_strcasecmp (id, cp_display))+ id = ((codepage_desc *) g_ptr_array_index (codepages, loop1))->id;+ if (g_ascii_strcasecmp (id, lc_mc_search->original_charset) == 0) { g_ptr_array_add (ret, mc_search__cond_struct_new (lc_mc_search, lc_mc_search->original, lc_mc_search->original_len,- cp_display));+ lc_mc_search->original_charset)); continue; } buffer = mc_search__recode_str (lc_mc_search->original, lc_mc_search->original_len,- cp_display, id, &recoded_str_len);+ lc_mc_search->original_charset, id, &recoded_str_len); g_ptr_array_add (ret, mc_search__cond_struct_new (lc_mc_search, buffer,@@ -220,9 +225,9 @@ mc_search_prepare (mc_search_t * lc_mc_search) else { g_ptr_array_add (ret,- mc_search__cond_struct_new (lc_mc_search,- lc_mc_search->original,- lc_mc_search->original_len, cp_display));+ mc_search__cond_struct_new (lc_mc_search, lc_mc_search->original,+ lc_mc_search->original_len,+ lc_mc_search->original_charset)); } #else g_ptr_array_add (ret,@@ -384,7 +389,8 @@ mc_search_is_fixed_search_str (mc_search_t * lc_mc_search) /* --------------------------------------------------------------------------------------------- */ gboolean-mc_search (const gchar * pattern, const gchar * str, mc_search_type_t type)+mc_search (const gchar * pattern, const gchar * pattern_charset, const gchar * str,+ mc_search_type_t type) { gboolean ret; mc_search_t *search;@@ -392,7 +398,7 @@ mc_search (const gchar * pattern, const gchar * str, mc_search_type_t type) if (str == NULL) return FALSE; - search = mc_search_new (pattern, -1);+ search = mc_search_new (pattern, -1, pattern_charset); if (search == NULL) return FALSE; diff --git a/src/diffviewer/search.c b/src/diffviewer/search.cindex 19176af..7fb4aa7 100644--- a/src/diffviewer/search.c+++ b/src/diffviewer/search.c@@ -248,7 +248,7 @@ dview_search_cmd (WDiff * dview) return; mc_search_free (dview->search.handle);- dview->search.handle = mc_search_new (dview->search.last_string, -1);+ dview->search.handle = mc_search_new (dview->search.last_string, -1, NULL); if (dview->search.handle == NULL) return;diff --git a/src/editor/editcmd.c b/src/editor/editcmd.cindex 4347fd7..e255efc 100644--- a/src/editor/editcmd.c+++ b/src/editor/editcmd.c@@ -1177,7 +1177,7 @@ edit_collect_completions (WEdit * edit, off_t word_start, gsize word_len, off_t last_byte, start = -1; char *current_word; - srch = mc_search_new (match_expr, -1);+ srch = mc_search_new (match_expr, -1, cp_source); if (srch == NULL) return 0; @@ -2512,7 +2512,7 @@ edit_replace_cmd (WEdit * edit, int again) if (!edit->search) {- edit->search = mc_search_new (input1, -1);+ edit->search = mc_search_new (input1, -1, cp_source); if (edit->search == NULL) { edit->search_start = edit->buffer.curs1;@@ -2706,7 +2706,7 @@ edit_search_cmd (WEdit * edit, gboolean again) g_list_foreach (history, (GFunc) g_free, NULL); g_list_free (history); - edit->search = mc_search_new (edit->last_search_string, -1);+ edit->search = mc_search_new (edit->last_search_string, -1, cp_source); if (edit->search == NULL) { /* if not... then ask for an expression */diff --git a/src/editor/editcmd_dialogs.c b/src/editor/editcmd_dialogs.cindex 865ef3d..0b5004b 100644--- a/src/editor/editcmd_dialogs.c+++ b/src/editor/editcmd_dialogs.c@@ -162,7 +162,7 @@ editcmd_dialog_search_show (WEdit * edit) edit->last_search_string = search_text; mc_search_free (edit->search); - edit->search = mc_search_new (edit->last_search_string, -1);+ edit->search = mc_search_new (edit->last_search_string, -1, cp_source); if (edit->search != NULL) { edit->search->search_type = edit_search_options.type;diff --git a/src/editor/syntax.c b/src/editor/syntax.cindex b3db585..e230957 100644--- a/src/editor/syntax.c+++ b/src/editor/syntax.c@@ -1314,12 +1314,12 @@ edit_read_syntax_file (WEdit * edit, char ***pnames, const char *syntax_file, /* 3: auto-detect rule set from regular expressions */ int q; - q = mc_search (args[1], editor_file, MC_SEARCH_T_REGEX);+ q = mc_search (args[1], "ASCII", editor_file, MC_SEARCH_T_REGEX); /* does filename match arg 1 ? */ if (!q && args[3]) { /* does first line match arg 3 ? */- q = mc_search (args[3], first_line, MC_SEARCH_T_REGEX);+ q = mc_search (args[3], "ASCII", first_line, MC_SEARCH_T_REGEX); } if (q) {diff --git a/src/filemanager/cmd.c b/src/filemanager/cmd.cindex 577d396..ca74945 100644--- a/src/filemanager/cmd.c+++ b/src/filemanager/cmd.c@@ -259,7 +259,7 @@ select_unselect_cmd (const char *title, const char *history_name, gboolean do_se return; } - search = mc_search_new (reg_exp, -1);+ search = mc_search_new (reg_exp, -1, NULL); search->search_type = (shell_patterns != 0) ? MC_SEARCH_T_GLOB : MC_SEARCH_T_REGEX; search->is_entire_line = TRUE; search->is_case_sensitive = case_sens != 0;diff --git a/src/filemanager/dir.c b/src/filemanager/dir.cindex d081630..62fdfbd 100644--- a/src/filemanager/dir.c+++ b/src/filemanager/dir.c@@ -206,7 +206,7 @@ handle_dirent (dir_list * list, const char *fltr, struct dirent *dp, } vfs_path_free (vpath); if (!(S_ISDIR (buf1->st_mode) || *link_to_dir) && (fltr != NULL)- && !mc_search (fltr, dp->d_name, MC_SEARCH_T_GLOB))+ && !mc_search (fltr, NULL, dp->d_name, MC_SEARCH_T_GLOB)) return 0; /* Need to grow the *list? */diff --git a/src/filemanager/ext.c b/src/filemanager/ext.cindex 15ce01d..428a628 100644--- a/src/filemanager/ext.c+++ b/src/filemanager/ext.c@@ -726,7 +726,7 @@ regex_check_type (const vfs_path_t * filename_vpath, const char *ptr, gboolean c { mc_search_t *search; - search = mc_search_new (ptr, -1);+ search = mc_search_new (ptr, -1, "ASCII"); if (search != NULL) { search->search_type = MC_SEARCH_T_REGEX;@@ -917,7 +917,7 @@ regex_command_for (void *target, const vfs_path_t * filename_vpath, const char * if (case_insense) p += 2; - search = mc_search_new (p, -1);+ search = mc_search_new (p, -1, "ASCII"); if (search != NULL) { search->search_type = MC_SEARCH_T_REGEX;@@ -930,7 +930,8 @@ regex_command_for (void *target, const vfs_path_t * filename_vpath, const char * else if (strncmp (p, "directory/", 10) == 0) { if (S_ISDIR (mystat.st_mode)- && mc_search (p + 10, vfs_path_as_str (filename_vpath), MC_SEARCH_T_REGEX))+ && mc_search (p + 10, "ASCII", vfs_path_as_str (filename_vpath),+ MC_SEARCH_T_REGEX)) found = TRUE; } else if (strncmp (p, "shell/", 6) == 0)diff --git a/src/filemanager/filegui.c b/src/filemanager/filegui.cindex fcb602e..384f749 100644--- a/src/filemanager/filegui.c+++ b/src/filemanager/filegui.c@@ -1280,7 +1280,7 @@ file_mask_dialog (FileOpContext * ctx, FileOperation operation, return dest_dir; } - ctx->search_handle = mc_search_new (source_mask, -1);+ ctx->search_handle = mc_search_new (source_mask, -1, NULL); if (ctx->search_handle == NULL) {diff --git a/src/filemanager/find.c b/src/filemanager/find.cindex cf04ca8..53ed323 100644--- a/src/filemanager/find.c+++ b/src/filemanager/find.c@@ -390,7 +390,7 @@ find_check_regexp (const char *r) mc_search_t *search; gboolean regexp_ok = FALSE; - search = mc_search_new (r, -1);+ search = mc_search_new (r, -1, NULL); if (search != NULL) {@@ -1625,7 +1625,7 @@ run_process (void) { int ret; - search_content_handle = mc_search_new (content_pattern, -1);+ search_content_handle = mc_search_new (content_pattern, -1, NULL); if (search_content_handle) { search_content_handle->search_type =@@ -1634,7 +1634,7 @@ run_process (void) search_content_handle->whole_words = options.content_whole_words; search_content_handle->is_all_charsets = options.content_all_charsets; }- search_file_handle = mc_search_new (find_pattern, -1);+ search_file_handle = mc_search_new (find_pattern, -1, NULL); search_file_handle->search_type = options.file_pattern ? MC_SEARCH_T_GLOB : MC_SEARCH_T_REGEX; search_file_handle->is_case_sensitive = options.file_case_sens; search_file_handle->is_all_charsets = options.file_all_charsets;diff --git a/src/filemanager/panel.c b/src/filemanager/panel.cindex 7e4e560..5d8ca7f 100644--- a/src/filemanager/panel.c+++ b/src/filemanager/panel.c@@ -2450,7 +2450,7 @@ do_search (WPanel * panel, int c_code) reg_exp = g_strdup_printf ("%s*", panel->search_buffer); esc_str = strutils_escape (reg_exp, -1, ",|\\{}[]", TRUE);- search = mc_search_new (esc_str, -1);+ search = mc_search_new (esc_str, -1, NULL); search->search_type = MC_SEARCH_T_GLOB; search->is_entire_line = TRUE; switch (panels_options.qsearch_mode)diff --git a/src/filemanager/usermenu.c b/src/filemanager/usermenu.cindex 2c1a8b4..83b6233 100644--- a/src/filemanager/usermenu.c+++ b/src/filemanager/usermenu.c@@ -246,13 +246,14 @@ test_condition (WEdit * edit_widget, char *p, int *condition) char *edit_filename; edit_filename = edit_get_file_name (edit_widget);- *condition = mc_search (arg, edit_filename, search_type) ? 1 : 0;+ *condition = mc_search (arg, "ASCII", edit_filename, search_type) ? 1 : 0; g_free (edit_filename); } else #endif *condition = panel != NULL &&- mc_search (arg, panel->dir.list[panel->selected].fname, search_type) ? 1 : 0;+ mc_search (arg, "ASCII", panel->dir.list[panel->selected].fname,+ search_type) ? 1 : 0; break; case 'y': /* syntax pattern */ #ifdef USE_INTERNAL_EDIT@@ -262,7 +263,7 @@ test_condition (WEdit * edit_widget, char *p, int *condition) if (syntax_type != NULL) { p = extract_arg (p, arg, sizeof (arg));- *condition = mc_search (arg, syntax_type, MC_SEARCH_T_NORMAL) ? 1 : 0;+ *condition = mc_search (arg, "ASCII", syntax_type, MC_SEARCH_T_NORMAL) ? 1 : 0; } } #endif@@ -270,7 +271,8 @@ test_condition (WEdit * edit_widget, char *p, int *condition) case 'd': p = extract_arg (p, arg, sizeof (arg)); *condition = panel != NULL- && mc_search (arg, vfs_path_as_str (panel->cwd_vpath), search_type) ? 1 : 0;+ && mc_search (arg, "ASCII", vfs_path_as_str (panel->cwd_vpath),+ search_type) ? 1 : 0; break; case 't': p = extract_arg (p, arg, sizeof (arg));diff --git a/src/vfs/sftpfs/config_parcer.c b/src/vfs/sftpfs/config_parcer.cindex 577c001..16efb37 100644--- a/src/vfs/sftpfs/config_parcer.c+++ b/src/vfs/sftpfs/config_parcer.c@@ -210,7 +210,7 @@ sftpfs_fill_config_entity_from_config (FILE * ssh_config_handler, gboolean pattern_block_hit = FALSE; mc_search_t *host_regexp; - host_regexp = mc_search_new ("^\\s*host\\s+(.*)$", -1);+ host_regexp = mc_search_new ("^\\s*host\\s+(.*)$", -1, "ASCII"); host_regexp->search_type = MC_SEARCH_T_REGEX; host_regexp->is_case_sensitive = FALSE; @@ -254,7 +254,7 @@ sftpfs_fill_config_entity_from_config (FILE * ssh_config_handler, mc_search_t *pattern_regexp; pattern_block_hit = FALSE;- pattern_regexp = mc_search_new (host_pattern, -1);+ pattern_regexp = mc_search_new (host_pattern, -1, "ASCII"); pattern_regexp->search_type = MC_SEARCH_T_GLOB; pattern_regexp->is_case_sensitive = FALSE; pattern_regexp->is_entire_line = TRUE;@@ -397,7 +397,8 @@ sftpfs_init_config_variables_patterns (void) for (i = 0; config_variables[i].pattern != NULL; i++) {- config_variables[i].pattern_regexp = mc_search_new (config_variables[i].pattern, -1);+ config_variables[i].pattern_regexp =+ mc_search_new (config_variables[i].pattern, -1, "ASCII"); config_variables[i].pattern_regexp->search_type = MC_SEARCH_T_REGEX; config_variables[i].pattern_regexp->is_case_sensitive = FALSE; config_variables[i].offset = structure_offsets[i];diff --git a/src/viewer/actions_cmd.c b/src/viewer/actions_cmd.cindex 7ea556d..99ab7cf 100644--- a/src/viewer/actions_cmd.c+++ b/src/viewer/actions_cmd.c@@ -146,7 +146,7 @@ mcview_continue_search_cmd (mcview_t * view) g_list_foreach (history, (GFunc) g_free, NULL); g_list_free (history); - view->search = mc_search_new (view->last_search_string, -1);+ view->search = mc_search_new (view->last_search_string, -1, cp_source); view->search_nroff_seq = mcview_nroff_seq_new (view); if (view->search == NULL)diff --git a/src/viewer/dialogs.c b/src/viewer/dialogs.cindex 8fba696..d560566 100644--- a/src/viewer/dialogs.c+++ b/src/viewer/dialogs.c@@ -142,7 +142,7 @@ mcview_dialog_search (mcview_t * view) mcview_nroff_seq_free (&view->search_nroff_seq); mc_search_free (view->search); - view->search = mc_search_new (view->last_search_string, -1);+ view->search = mc_search_new (view->last_search_string, -1, cp_source); view->search_nroff_seq = mcview_nroff_seq_new (view); if (view->search != NULL) {