diff -U 3 -H -d -r -N -- bash-4.3/arrayfunc.c bash-4.3.mod/arrayfunc.c
old
|
new
|
|
597 | 597 | if (assoc_p (var)) |
598 | 598 | { |
599 | 599 | val = expand_assignment_string_to_string (val, 0); |
| 600 | if (val == 0) |
| 601 | { |
| 602 | val = (char *)xmalloc (1); |
| 603 | val[0] = '\0'; /* like do_assignment_internal */ |
| 604 | } |
600 | 605 | free_val = 1; |
601 | 606 | } |
602 | 607 | |
diff -U 3 -H -d -r -N -- bash-4.3/jobs.c bash-4.3.mod/jobs.c
old
|
new
|
|
4374 | 4374 | void |
4375 | 4375 | end_job_control () |
4376 | 4376 | { |
4377 | | if (interactive_shell) /* XXX - should it be interactive? */ |
| 4377 | if (interactive_shell || job_control) /* XXX - should it be just job_control? */ |
4378 | 4378 | { |
4379 | 4379 | terminate_stopped_jobs (); |
4380 | 4380 | |
diff -U 3 -H -d -r -N -- bash-4.3/lib/glob/glob.c bash-4.3.mod/lib/glob/glob.c
old
|
new
|
|
179 | 179 | char *pat, *dname; |
180 | 180 | int flags; |
181 | 181 | { |
182 | | char *pp, *pe, *t; |
183 | | int n, r; |
| 182 | char *pp, *pe, *t, *se; |
| 183 | int n, r, negate; |
184 | 184 | |
| 185 | negate = *pat == '!'; |
185 | 186 | pp = pat + 2; |
186 | | pe = pp + strlen (pp) - 1; /*(*/ |
187 | | if (*pe != ')') |
188 | | return 0; |
189 | | if ((t = strchr (pp, '|')) == 0) /* easy case first */ |
| 187 | se = pp + strlen (pp) - 1; /* end of string */ |
| 188 | pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */ |
| 189 | /* we should check for invalid extglob pattern here */ |
| 190 | /* if pe != se we have more of the pattern at the end of the extglob |
| 191 | pattern. Check the easy case first ( */ |
| 192 | if (pe == se && *pe == ')' && (t = strchr (pp, '|')) == 0) |
190 | 193 | { |
191 | 194 | *pe = '\0'; |
| 195 | #if defined (HANDLE_MULTIBYTE) |
| 196 | r = mbskipname (pp, dname, flags); |
| 197 | #else |
192 | 198 | r = skipname (pp, dname, flags); /*(*/ |
| 199 | #endif |
193 | 200 | *pe = ')'; |
194 | 201 | return r; |
195 | 202 | } |
| 203 | |
| 204 | /* check every subpattern */ |
196 | 205 | while (t = glob_patscan (pp, pe, '|')) |
197 | 206 | { |
198 | 207 | n = t[-1]; |
199 | 208 | t[-1] = '\0'; |
| 209 | #if defined (HANDLE_MULTIBYTE) |
| 210 | r = mbskipname (pp, dname, flags); |
| 211 | #else |
200 | 212 | r = skipname (pp, dname, flags); |
| 213 | #endif |
201 | 214 | t[-1] = n; |
202 | 215 | if (r == 0) /* if any pattern says not skip, we don't skip */ |
203 | 216 | return r; |
204 | 217 | pp = t; |
205 | 218 | } /*(*/ |
206 | 219 | |
207 | | if (pp == pe) /* glob_patscan might find end of pattern */ |
| 220 | /* glob_patscan might find end of pattern */ |
| 221 | if (pp == se) |
208 | 222 | return r; |
209 | 223 | |
210 | | *pe = '\0'; |
211 | | # if defined (HANDLE_MULTIBYTE) |
212 | | r = mbskipname (pp, dname, flags); /*(*/ |
213 | | # else |
214 | | r = skipname (pp, dname, flags); /*(*/ |
215 | | # endif |
216 | | *pe = ')'; |
217 | | return r; |
| 224 | /* but if it doesn't then we didn't match a leading dot */ |
| 225 | return 0; |
218 | 226 | } |
219 | 227 | #endif |
220 | 228 | |
… |
… |
|
277 | 285 | int flags; |
278 | 286 | { |
279 | 287 | #if EXTENDED_GLOB |
280 | | wchar_t *pp, *pe, *t, n; |
281 | | int r; |
| 288 | wchar_t *pp, *pe, *t, n, *se; |
| 289 | int r, negate; |
282 | 290 | |
| 291 | negate = *pat == L'!'; |
283 | 292 | pp = pat + 2; |
284 | | pe = pp + wcslen (pp) - 1; /*(*/ |
285 | | if (*pe != L')') |
286 | | return 0; |
287 | | if ((t = wcschr (pp, L'|')) == 0) |
| 293 | se = pp + wcslen (pp) - 1; /*(*/ |
| 294 | pe = glob_patscan_wc (pp, se, 0); |
| 295 | |
| 296 | if (pe == se && *pe == ')' && (t = wcschr (pp, L'|')) == 0) |
288 | 297 | { |
289 | 298 | *pe = L'\0'; |
290 | 299 | r = wchkname (pp, dname); /*(*/ |
291 | 300 | *pe = L')'; |
292 | 301 | return r; |
293 | 302 | } |
| 303 | |
| 304 | /* check every subpattern */ |
294 | 305 | while (t = glob_patscan_wc (pp, pe, '|')) |
295 | 306 | { |
296 | 307 | n = t[-1]; |
… |
… |
|
305 | 316 | if (pp == pe) /* glob_patscan_wc might find end of pattern */ |
306 | 317 | return r; |
307 | 318 | |
308 | | *pe = L'\0'; |
309 | | r = wchkname (pp, dname); /*(*/ |
310 | | *pe = L')'; |
311 | | return r; |
| 319 | /* but if it doesn't then we didn't match a leading dot */ |
| 320 | return 0; |
312 | 321 | #else |
313 | 322 | return (wchkname (pat, dname)); |
314 | 323 | #endif |
diff -U 3 -H -d -r -N -- bash-4.3/lib/glob/gmisc.c bash-4.3.mod/lib/glob/gmisc.c
old
|
new
|
|
210 | 210 | case '+': |
211 | 211 | case '!': |
212 | 212 | case '@': |
| 213 | case '?': |
213 | 214 | return (pat[1] == LPAREN); |
214 | 215 | default: |
215 | 216 | return 0; |
diff -U 3 -H -d -r -N -- bash-4.3/lib/readline/readline.c bash-4.3.mod/lib/readline/readline.c
old
|
new
|
|
744 | 744 | r = _rl_subseq_result (r, cxt->oldmap, cxt->okey, (cxt->flags & KSEQ_SUBSEQ)); |
745 | 745 | |
746 | 746 | RL_CHECK_SIGNALS (); |
747 | | if (r == 0) /* success! */ |
| 747 | /* We only treat values < 0 specially to simulate recursion. */ |
| 748 | if (r >= 0 || (r == -1 && (cxt->flags & KSEQ_SUBSEQ) == 0)) /* success! or failure! */ |
748 | 749 | { |
749 | 750 | _rl_keyseq_chain_dispose (); |
750 | 751 | RL_UNSETSTATE (RL_STATE_MULTIKEY); |
… |
… |
|
964 | 965 | #if defined (VI_MODE) |
965 | 966 | if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap && |
966 | 967 | key != ANYOTHERKEY && |
967 | | rl_key_sequence_length == 1 && /* XXX */ |
| 968 | _rl_dispatching_keymap == vi_movement_keymap && |
968 | 969 | _rl_vi_textmod_command (key)) |
969 | 970 | _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign); |
970 | 971 | #endif |
diff -U 3 -H -d -r -N -- bash-4.3/parse.y bash-4.3.mod/parse.y
old
|
new
|
|
3398 | 3398 | within a double-quoted ${...} construct "an even number of |
3399 | 3399 | unescaped double-quotes or single-quotes, if any, shall occur." */ |
3400 | 3400 | /* This was changed in Austin Group Interp 221 */ |
3401 | | if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') |
| 3401 | if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') |
3402 | 3402 | continue; |
3403 | 3403 | |
3404 | 3404 | /* Could also check open == '`' if we want to parse grouping constructs |
diff -U 3 -H -d -r -N -- bash-4.3/patchlevel.h bash-4.3.mod/patchlevel.h
old
|
new
|
|
25 | 25 | regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh |
26 | 26 | looks for to find the patch level (for the sccs version string). */ |
27 | 27 | |
28 | | #define PATCHLEVEL 0 |
| 28 | #define PATCHLEVEL 8 |
29 | 29 | |
30 | 30 | #endif /* _PATCHLEVEL_H_ */ |
diff -U 3 -H -d -r -N -- bash-4.3/test.c bash-4.3.mod/test.c
old
|
new
|
|
646 | 646 | return (v && invisible_p (v) == 0 && var_isset (v) ? TRUE : FALSE); |
647 | 647 | |
648 | 648 | case 'R': |
649 | | v = find_variable (arg); |
650 | | return (v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v) ? TRUE : FALSE); |
| 649 | v = find_variable_noref (arg); |
| 650 | return ((v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v)) ? TRUE : FALSE); |
651 | 651 | } |
652 | 652 | |
653 | 653 | /* We can't actually get here, but this shuts up gcc. */ |
… |
… |
|
723 | 723 | case 'o': case 'p': case 'r': case 's': case 't': |
724 | 724 | case 'u': case 'v': case 'w': case 'x': case 'z': |
725 | 725 | case 'G': case 'L': case 'O': case 'S': case 'N': |
| 726 | case 'R': |
726 | 727 | return (1); |
727 | 728 | } |
728 | 729 | |
diff -U 3 -H -d -r -N -- bash-4.3/trap.c bash-4.3.mod/trap.c
old
|
new
|
|
920 | 920 | subst_assign_varlist = 0; |
921 | 921 | |
922 | 922 | #if defined (JOB_CONTROL) |
923 | | save_pipeline (1); /* XXX only provides one save level */ |
| 923 | if (sig != DEBUG_TRAP) /* run_debug_trap does this */ |
| 924 | save_pipeline (1); /* XXX only provides one save level */ |
924 | 925 | #endif |
925 | 926 | |
926 | 927 | /* If we're in a function, make sure return longjmps come here, too. */ |
… |
… |
|
940 | 941 | trap_exit_value = last_command_exit_value; |
941 | 942 | |
942 | 943 | #if defined (JOB_CONTROL) |
943 | | restore_pipeline (1); |
| 944 | if (sig != DEBUG_TRAP) /* run_debug_trap does this */ |
| 945 | restore_pipeline (1); |
944 | 946 | #endif |
945 | 947 | |
946 | 948 | subst_assign_varlist = save_subst_varlist; |
diff -U 3 -H -d -r -N -- bash-4.3/y.tab.c bash-4.3.mod/y.tab.c
old
|
new
|
|
5710 | 5710 | within a double-quoted ${...} construct "an even number of |
5711 | 5711 | unescaped double-quotes or single-quotes, if any, shall occur." */ |
5712 | 5712 | /* This was changed in Austin Group Interp 221 */ |
5713 | | if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') |
| 5713 | if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') |
5714 | 5714 | continue; |
5715 | 5715 | |
5716 | 5716 | /* Could also check open == '`' if we want to parse grouping constructs |