On 1/8/19 3:50 PM, a...@freakout.de wrote: > Configuration Information [Automatically generated, do not change]: > Machine: i686 > OS: linux-gnu > Compiler: gcc > Compilation CFLAGS: -fstack-protector -Wno-parentheses -Wno-format-security > uname output: Linux bongo 2.6.32-042stab134.8 #1 SMP Fri Dec 7 17:16:09 MSK > 2018 i686 i686 i386 GNU/Linux > Machine Type: i686-pc-linux-gnu > > Bash Version: 5.0 > Patch Level: 0 > Release Status: release > > Description: > This script "weirdbackslashes": > > $ cat weirdbackslashes > #===begin > PRE='\/' > echo 'define'${PRE}'\ > /' > #===end > > produces with bash4: > $ bash weirdbackslashes > define\/\ > / > > and with bash5: > $ bash5 weirdbackslashes > \d\e\f\i\n\e\/\\\ > /
This was literally the last change I made. I guess I'll have to do it a different way. The attached patch will fix it. Chet -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, UTech, CWRU c...@case.edu http://tiswww.cwru.edu/~chet/
*** ../bash-5.0/bashline.c 2018-11-27 13:20:16.000000000 -0500 --- bashline.c 2019-01-09 09:44:26.000000000 -0500 *************** *** 232,235 **** --- 232,236 ---- static int bash_possible_command_completions __P((int, int)); + static int completion_glob_pattern __P((const char *)); static char *glob_complete_word __P((const char *, int)); static int bash_glob_completion_internal __P((int)); *************** *** 1742,1746 **** /* This could be a globbing pattern, so try to expand it using pathname expansion. */ ! if (!matches && glob_pattern_p (text)) { matches = rl_completion_matches (text, glob_complete_word); --- 1743,1747 ---- /* This could be a globbing pattern, so try to expand it using pathname expansion. */ ! if (!matches && completion_glob_pattern (text)) { matches = rl_completion_matches (text, glob_complete_word); *************** *** 1851,1855 **** } ! globpat = glob_pattern_p (hint_text); /* If this is an absolute program name, do not check it against --- 1852,1856 ---- } ! globpat = completion_glob_pattern (hint_text); /* If this is an absolute program name, do not check it against *************** *** 3714,3717 **** --- 3715,3773 ---- } + static int + completion_glob_pattern (string) + const char *string; + { + register int c; + char *send; + int open; + + DECLARE_MBSTATE; + + open = 0; + send = string + strlen (string); + + while (c = *string++) + { + switch (c) + { + case '?': + case '*': + return (1); + + case '[': + open++; + continue; + + case ']': + if (open) + return (1); + continue; + + case '+': + case '@': + case '!': + if (*string == '(') /*)*/ + return (1); + continue; + + case '\\': + if (*string == 0) + return (0); + } + + /* Advance one fewer byte than an entire multibyte character to + account for the auto-increment in the loop above. */ + #ifdef HANDLE_MULTIBYTE + string--; + ADVANCE_CHAR_P (string, send - string); + string++; + #else + ADVANCE_CHAR_P (string, send - string); + #endif + } + return (0); + } + static char *globtext; static char *globorig; *************** *** 3878,3882 **** } ! if (t && glob_pattern_p (t) == 0) rl_explicit_arg = 1; /* XXX - force glob_complete_word to append `*' */ FREE (t); --- 3934,3938 ---- } ! if (t && completion_glob_pattern (t) == 0) rl_explicit_arg = 1; /* XXX - force glob_complete_word to append `*' */ FREE (t); *** ../bash-5.0/lib/glob/glob_loop.c 2018-12-31 13:35:15.000000000 -0500 --- lib/glob/glob_loop.c 2019-01-09 09:44:36.000000000 -0500 *************** *** 55,59 **** case L('\\'): - #if 0 /* Don't let the pattern end in a backslash (GMATCH returns no match if the pattern ends in a backslash anyway), but otherwise return 1, --- 55,58 ---- *************** *** 61,69 **** and it can be removed. */ return (*p != L('\0')); - #else - /* The pattern may not end with a backslash. */ - if (*p++ == L('\0')) - return 0; - #endif } --- 60,63 ----