summaryrefslogtreecommitdiff
path: root/packages/mc/mc-4.6.2/99_regexp-replace-fixed.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packages/mc/mc-4.6.2/99_regexp-replace-fixed.patch')
-rw-r--r--packages/mc/mc-4.6.2/99_regexp-replace-fixed.patch312
1 files changed, 0 insertions, 312 deletions
diff --git a/packages/mc/mc-4.6.2/99_regexp-replace-fixed.patch b/packages/mc/mc-4.6.2/99_regexp-replace-fixed.patch
deleted file mode 100644
index 612d77736b..0000000000
--- a/packages/mc/mc-4.6.2/99_regexp-replace-fixed.patch
+++ /dev/null
@@ -1,312 +0,0 @@
---- mc-4.6.2/edit/editcmd.c
-+++ mc-4.6.2/edit/editcmd.c
-@@ -2103,6 +2103,33 @@
- edit_error_dialog (_("Error"), _(" Invalid regular expression, or scanf expression with too many conversions "));
- }
-
-+int mc_isdigit(mc_wchar_t c)
-+{
-+#ifndef UTF8
-+ return isdigit(c);
-+#else /* UTF8 */
-+ return iswdigit(c);
-+#endif /* UTF8 */
-+}
-+
-+mc_wchar_t * mc_memmove(mc_wchar_t *to, mc_wchar_t *from, size_t size)
-+{
-+#ifndef UTF8
-+ return memmove(to, from, size);
-+#else /* UTF8 */
-+ return wmemmove(to, from, size);
-+#endif /* UTF8 */
-+}
-+
-+mc_wchar_t * mc_strchr(mc_wchar_t *str, mc_wchar_t c)
-+{
-+#ifndef UTF8
-+ return strchr(str, c);
-+#else /* UTF8 */
-+ return wcschr(str, c);
-+#endif /* UTF8 */
-+}
-+
- /* call with edit = 0 before shutdown to close memory leaks */
- void
- edit_replace_cmd (WEdit *edit, int again)
-@@ -2119,6 +2146,8 @@
- int replace_continue;
- int treplace_prompt = 0;
- long times_replaced = 0, last_search;
-+ mc_wchar_t *repl_templ;
-+ mc_wchar_t *repl_str;
- int argord[NUM_REPL_ARGS];
-
- if (!edit) {
-@@ -2172,7 +2201,68 @@
-
- }
-
-- {
-+#ifndef UTF8
-+ repl_templ = g_strdup(input2);
-+#else /* UTF8 */
-+ repl_templ = mbstr_to_wchar(input2);
-+#endif /* UTF8 */
-+
-+ if (replace_regexp) {
-+ /*
-+ * edit replace template - convert subpattern references (\1) to
-+ * snprintf_p arguments (%s) and fill "argord" array to match captured
-+ * subpatterns
-+ */
-+ int ao;
-+ int ord;
-+ mc_wchar_t *s;
-+ mc_wchar_t *param;
-+ mc_wchar_t *endptr;
-+#ifndef UTF8
-+#define MC_CHAR(c) ((mc_wchar_t) c)
-+#else /* UTF8 */
-+#define MC_CHAR(c) (L##c)
-+#endif /* UTF8 */
-+
-+ endptr = mc_strchr(repl_templ, MC_CHAR('\0'));
-+ s = repl_templ;
-+ ao = 0;
-+ while ((s = mc_strchr(s, MC_CHAR('\\')))) {
-+ param = s;
-+ s++;
-+ if (!s) break;
-+ /* implement \n \r and \t escape sequences in replace string */
-+ if (*s == MC_CHAR('n')) {
-+ *s = MC_CHAR('\n');
-+ } else if (*s == MC_CHAR('r')) {
-+ *s = MC_CHAR('\r');
-+ } else if (*s == MC_CHAR('t')) {
-+ *s = MC_CHAR('\t');
-+ }
-+ if (!mc_isdigit(*s)) {
-+ mc_memmove(param, s, endptr - s + 1);
-+ continue;
-+ }
-+ ord = 0;
-+ while (mc_isdigit(*s)) {
-+ ord *= 10;
-+ ord += *s - MC_CHAR('0');
-+ s++;
-+ }
-+ if ((ord > 0) && (ord <= NUM_REPL_ARGS)) {
-+ argord[ao++] = ord - 1;
-+ *param++ = MC_CHAR('%');
-+ *param++ = MC_CHAR('s');
-+ mc_memmove(param, s, endptr - s + 1);
-+ s = param;
-+ }
-+ }
-+ while (ao < NUM_REPL_ARGS) {
-+ argord[ao] = ao;
-+ ao++;
-+ }
-+
-+ } else {
- const char *s;
- int ord;
- size_t i;
-@@ -2203,6 +2293,12 @@
- && !replace_backwards)
- edit->search_start++;
-
-+ if (replace_scanf || replace_regexp) {
-+ repl_str = g_malloc(((MAX_REPL_LEN + 2)+1) * sizeof(mc_wchar_t));
-+ } else {
-+ repl_str = repl_templ;
-+ }
-+
- do {
- int len = 0;
- long new_start;
-@@ -2227,8 +2323,47 @@
-
- replace_yes = 1;
-
-+ if (replace_scanf || replace_regexp) {
-+ int ret = 0;
-+
-+ /* we need to fill in sargs just like with scanf */
-+ if (replace_regexp) {
-+ int k, j;
-+ for (k = 1; k < NUM_REPL_ARGS && pmatch[k].rm_eo >= 0;
-+ k++) {
-+ mc_wchar_t *t;
-+
-+ if (pmatch[k].rm_eo - pmatch[k].rm_so > 255) {
-+ ret = -1;
-+ break;
-+ }
-+ t = (mc_wchar_t *) &sargs[k - 1][0];
-+ for (j = 0; j < pmatch[k].rm_eo - pmatch[k].rm_so &&
-+ j < 255; j++, t++)
-+ *t = edit_get_byte (edit, edit->search_start -
-+ pmatch[0].rm_so + pmatch[k].rm_so + j);
-+ *t = '\0';
-+ }
-+ for (; k <= NUM_REPL_ARGS; k++)
-+ sargs[k - 1][0] = 0;
-+ }
-+ if (ret >= 0)
-+ ret = snprintf_p (repl_str, MAX_REPL_LEN + 2, repl_templ,
-+ PRINTF_ARGS);
-+ if (ret < 0) {
-+ edit_error_dialog (_(" Replace "),
-+ ret == -2
-+ ? _(" Error in replacement format string. ")
-+ : _(" Replacement too long. "));
-+ treplace_prompt = 0;
-+ replace_yes = 0;
-+ replace_continue = 0;
-+ }
-+ }
-+
- if (treplace_prompt) {
- int l;
-+ char *displ_repl_str;
- l = edit->curs_row - edit->num_widget_lines / 3;
- if (l > 0)
- edit_scroll_downward (edit, l);
-@@ -2242,7 +2377,15 @@
- /*so that undo stops at each query */
- edit_push_key_press (edit);
-
-- switch (edit_replace_prompt (edit, input2, /* and prompt 2/3 down */
-+#ifndef UTF8
-+ displ_repl_str = g_strdup(repl_str);
-+#else /* UTF8 */
-+ displ_repl_str = wchar_to_mbstr(repl_str);
-+ /* wchar_to_mbstr(str) returns NULL when length of str == 0 */
-+ if (!displ_repl_str) displ_repl_str = g_strdup("");
-+#endif /* UTF8 */
-+ convert_to_display (displ_repl_str);
-+ switch (edit_replace_prompt (edit, displ_repl_str, /* and prompt 2/3 down */
- (edit->num_widget_columns -
- CONFIRM_DLG_WIDTH) / 2,
- edit->num_widget_lines * 2 /
-@@ -2264,99 +2407,15 @@
- replace_continue = 0;
- break;
- }
-+ g_free(displ_repl_str);
- }
- if (replace_yes) { /* delete then insert new */
--#ifdef UTF8
-- mc_wchar_t *winput2 = mbstr_to_wchar(input2);
--#endif /* UTF8 */
-- if (replace_scanf) {
-- mc_wchar_t repl_str[MAX_REPL_LEN + 2];
-- int ret = 0;
--
-- /* we need to fill in sargs just like with scanf */
-- if (replace_regexp) {
-- int k, j;
-- for (k = 1;
-- k < NUM_REPL_ARGS && pmatch[k].rm_eo >= 0;
-- k++) {
--#ifndef UTF8
-- unsigned char *t;
--#else /* UTF8 */
-- mc_wchar_t *t;
--#endif
--
-- if (pmatch[k].rm_eo - pmatch[k].rm_so > 255) {
-- ret = -1;
-- break;
-- }
--#ifndef UTF8
-- t = (unsigned char *) &sargs[k - 1][0];
--#else /* UTF8 */
-- t = (mc_wchar_t *) &sargs[k - 1][0];
--#endif /* UTF8 */
-- for (j = 0;
-- j < pmatch[k].rm_eo - pmatch[k].rm_so
-- && j < 255; j++, t++)
-- *t = edit_get_byte (edit,
-- edit->
-- search_start
-- -
-- pmatch
-- [0].
-- rm_so +
-- pmatch
-- [k].
-- rm_so +
-- j);
-- *t = '\0';
-- }
-- for (; k <= NUM_REPL_ARGS; k++)
-- sargs[k - 1][0] = 0;
-- }
-- if (!ret)
-- ret =
--#ifndef UTF8
-- snprintf_p (repl_str, MAX_REPL_LEN + 2, input2,
--#else /* UTF8 */
-- snprintf_p (repl_str, MAX_REPL_LEN + 2, winput2,
--#endif /* UTF8 */
-- PRINTF_ARGS);
-- if (ret >= 0) {
-- times_replaced++;
-- while (i--)
-- edit_delete (edit);
--#ifndef UTF8
-- while (repl_str[++i])
-- edit_insert (edit, repl_str[i]);
--#else /* UTF8 */
-- while (winput2[++i])
-- edit_insert (edit, winput2[i]);
--#endif /* UTF8 */
-- } else {
-- edit_error_dialog (_(" Replace "),
-- ret ==
-- -2 ?
-- _
-- (" Error in replacement format string. ")
-- : _(" Replacement too long. "));
-- replace_continue = 0;
-- }
-- } else {
-- times_replaced++;
-- while (i--)
-- edit_delete (edit);
--#ifndef UTF8
-- while (input2[++i])
-- edit_insert (edit, input2[i]);
--#else /* UTF8 */
-- while (winput2[++i])
-- edit_insert (edit, winput2[i]);
--#endif /* UTF8 */
-- }
-+ times_replaced++;
-+ while (i--)
-+ edit_delete (edit);
-+ while (repl_str[++i])
-+ edit_insert (edit, repl_str[i]);
- edit->found_len = i;
--#ifdef UTF8
-- g_free (winput2);
--#endif /* UTF8 */
- }
- /* so that we don't find the same string again */
- if (replace_backwards) {
-@@ -2385,6 +2444,12 @@
- }
- } while (replace_continue);
-
-+ /* cleanup */
-+ if (replace_scanf || replace_regexp) {
-+ g_free(repl_str);
-+ }
-+ g_free(repl_templ);
-+
- edit->force = REDRAW_COMPLETELY;
- edit_scroll_screen_over_cursor (edit);
- cleanup: