Hello community, here is the log from the commit of package bash for openSUSE:Factory checked in at 2012-03-07 20:08:45 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/bash (Old) and /work/SRC/openSUSE:Factory/.bash.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "bash", Maintainer is "wer...@suse.com" Changes: -------- --- /work/SRC/openSUSE:Factory/bash/bash.changes 2011-12-21 09:59:26.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.bash.new/bash.changes 2012-03-07 20:08:48.000000000 +0100 @@ -1,0 +2,12 @@ +Tue Mar 6 12:15:18 UTC 2012 - wer...@suse.de + +- Add small patch for be able to use nanoseconds in comparision + of time stamps of files (bnc#750640) + +------------------------------------------------------------------- +Tue Mar 6 09:33:30 UTC 2012 - wer...@suse.de + +- Reenable patch for bnc#725657 with latest change from latest + git repository of the patch. + +------------------------------------------------------------------- New: ---- bash-4.2-nsec.dif ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ bash.spec ++++++ --- /var/tmp/diff_new_pack.fBRfDD/_old 2012-03-07 20:08:51.000000000 +0100 +++ /var/tmp/diff_new_pack.fBRfDD/_new 2012-03-07 20:08:51.000000000 +0100 @@ -40,6 +40,7 @@ License: GPL-2.0+ Group: System/Shells Url: http://www.gnu.org/software/bash/bash.html +# Git: http://git.savannah.gnu.org/cgit/bash.git Source0: ftp://ftp.gnu.org/gnu/bash/bash-%{bash_vers}.tar.gz Source1: ftp://ftp.gnu.org/gnu/readline/readline-%{rl_vers}.tar.gz Source2: bash-%{bash_vers}-patches.tar.bz2 @@ -72,6 +73,7 @@ Patch15: bash-3.2-longjmp.dif Patch16: bash-4.0-setlocale.dif Patch17: bash-4.0-headers.dif +Patch18: bash-4.2-nsec.dif Patch20: readline-%{rl_vers}.dif Patch21: readline-4.3-input.dif Patch22: readline-6.1-wrap.patch @@ -255,11 +257,12 @@ %prep %setup -q -n bash-%{bash_vers}%{extend} -b1 -b2 -b3 -for p in ../bash-%{bash_vers}-patches/*; do - test -e $p || break - test "${p##*/}" = "bash-4.2-pwd.patch" && continue - echo Patch $p - patch -s -p0 < $p +for patch in ../bash-%{bash_vers}-patches/*; do + level=-p1 + test -e $patch || break + [[ $(head -n 1 $patch) =~ From ]] || level=-p0 + echo Patch $patch + patch -s $level < $patch done unset p %patch1 -p0 -b .manual @@ -279,6 +282,7 @@ %patch15 -p0 -b .longjmp %patch16 -p0 -b .setlocale %patch17 -p0 -b .headers +%patch18 -p0 -b .nsec %patch21 -p0 -b .zerotty %patch22 -p0 -b .wrap %patch23 -p0 -b .conf @@ -569,8 +573,9 @@ %install_info_delete --info-dir=%{_infodir} %{_infodir}/readline.info.gz %clean +LD_LIBRARY_PATH=%{buildroot}/%{_lib} \ ldd -u -r %{buildroot}/bin/bash || true -ldd -u -r %{buildroot}%{_libdir}/libreadline.so || true +ldd -u -r %{buildroot}/%{_lib}/libreadline.so.* || true %{?buildroot: %{__rm} -rf %{buildroot}} %files ++++++ bash-4.2-nsec.dif ++++++ --- test.c +++ test.c 2012-03-06 11:14:00.149934027 +0000 @@ -309,8 +309,17 @@ filecomp (s, t, op) switch (op) { +#if defined(_BSD_SOURCE) || defined(_SVID_SOURCE) || (defined(_XOPEN_SOURCE) && ((_XOPEN_SOURCE - 0) >= 700)) || (defined(_POSIX_C_SOURCE) && ((_POSIX_C_SOURCE - 0) >= 200809L)) +# define st_mtimcmp(t1, t2, CMP) \ + (((t1).st_mtim.tv_sec == (t2).st_mtim.tv_sec) ? \ + ((t1).st_mtim.tv_nsec CMP (t2).st_mtim.tv_nsec) : \ + ((t1).st_mtim.tv_sec CMP (t2).st_mtim.tv_sec)) + case OT: return (r1 < r2 || (r2 == 0 && st_mtimcmp(st1, st2, <))); + case NT: return (r1 > r2 || (r1 == 0 && st_mtimcmp(st1, st2, >))); +#else case OT: return (r1 < r2 || (r2 == 0 && st1.st_mtime < st2.st_mtime)); case NT: return (r1 > r2 || (r1 == 0 && st1.st_mtime > st2.st_mtime)); +#endif case EF: return (same_file (s, t, &st1, &st2)); } return (FALSE); ++++++ bash-4.2-patches.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bash-4.2-patches/bash-4.2-pwd.patch new/bash-4.2-patches/bash-4.2-pwd.patch --- old/bash-4.2-patches/bash-4.2-pwd.patch 2011-10-25 19:04:39.000000000 +0200 +++ new/bash-4.2-patches/bash-4.2-pwd.patch 2012-03-06 10:32:00.000000000 +0100 @@ -1,394 +1,393 @@ -*** ../bash-4.2-patched/bashline.c 2011-01-16 15:32:47.000000000 -0500 ---- bashline.c 2011-07-08 16:30:01.000000000 -0400 -*************** -*** 122,125 **** ---- 122,128 ---- - static int bash_push_line __P((void)); - -+ static rl_icppfunc_t *save_directory_hook __P((void)); -+ static void reset_directory_hook __P((rl_icppfunc_t *)); -+ - static void cleanup_expansion_error __P((void)); - static void maybe_make_readline_line __P((char *)); -*************** -*** 244,251 **** ---- 249,262 ---- - int dircomplete_spelling = 0; - -+ /* Expand directory names during word/filename completion. */ -+ int dircomplete_expand = 0; -+ - static char *bash_completer_word_break_characters = " \t\n\"'@><=;|&(:"; - static char *bash_nohostname_word_break_characters = " \t\n\"'><=;|&(:"; - /* )) */ - -+ static const char *default_filename_quote_characters = " \t\n\\\"'@<>=;|&()#$`?*[!:{~"; /*}*/ -+ static char *custom_filename_quote_characters = 0; -+ - static rl_hook_func_t *old_rl_startup_hook = (rl_hook_func_t *)NULL; - -*************** -*** 502,506 **** - /* Tell the completer that we might want to follow symbolic links or - do other expansion on directory names. */ -! rl_directory_rewrite_hook = bash_directory_completion_hook; - - rl_filename_rewrite_hook = bash_filename_rewrite_hook; ---- 513,517 ---- - /* Tell the completer that we might want to follow symbolic links or - do other expansion on directory names. */ -! set_directory_hook (); - - rl_filename_rewrite_hook = bash_filename_rewrite_hook; -*************** -*** 530,534 **** - - /* characters that need to be quoted when appearing in filenames. */ -! rl_filename_quote_characters = " \t\n\\\"'@<>=;|&()#$`?*[!:{~"; /*}*/ - - rl_filename_quoting_function = bash_quote_filename; ---- 541,545 ---- - - /* characters that need to be quoted when appearing in filenames. */ -! rl_filename_quote_characters = default_filename_quote_characters; - - rl_filename_quoting_function = bash_quote_filename; -*************** -*** 565,570 **** - rl_attempted_completion_function = attempt_shell_completion; - rl_completion_entry_function = NULL; -- rl_directory_rewrite_hook = bash_directory_completion_hook; - rl_ignore_some_completions_function = filename_completion_ignore; - } - ---- 588,595 ---- - rl_attempted_completion_function = attempt_shell_completion; - rl_completion_entry_function = NULL; - rl_ignore_some_completions_function = filename_completion_ignore; -+ rl_filename_quote_characters = default_filename_quote_characters; -+ -+ set_directory_hook (); - } - -*************** -*** 1280,1283 **** ---- 1311,1316 ---- - rl_ignore_some_completions_function = filename_completion_ignore; - -+ rl_filename_quote_characters = default_filename_quote_characters; -+ - /* Determine if this could be a command word. It is if it appears at - the start of the line (ignoring preceding whitespace), or if it -*************** -*** 2694,2697 **** ---- 2754,2803 ---- - } - -+ /* Functions to save and restore the appropriate directory hook */ -+ /* This is not static so the shopt code can call it */ -+ void -+ set_directory_hook () -+ { -+ if (dircomplete_expand) -+ { -+ rl_directory_completion_hook = bash_directory_completion_hook; -+ rl_directory_rewrite_hook = (rl_icppfunc_t *)0; -+ } -+ else -+ { -+ rl_directory_rewrite_hook = bash_directory_completion_hook; -+ rl_directory_completion_hook = (rl_icppfunc_t *)0; -+ } -+ } -+ -+ static rl_icppfunc_t * -+ save_directory_hook () -+ { -+ rl_icppfunc_t *ret; -+ -+ if (dircomplete_expand) -+ { -+ ret = rl_directory_completion_hook; -+ rl_directory_completion_hook = (rl_icppfunc_t *)NULL; -+ } -+ else -+ { -+ ret = rl_directory_rewrite_hook; -+ rl_directory_rewrite_hook = (rl_icppfunc_t *)NULL; -+ } -+ -+ return ret; -+ } -+ -+ static void -+ restore_directory_hook (hookf) -+ rl_icppfunc_t *hookf; -+ { -+ if (dircomplete_expand) -+ rl_directory_completion_hook = hookf; -+ else -+ rl_directory_rewrite_hook = hookf; -+ } -+ - /* Handle symbolic link references and other directory name - expansions while hacking completion. This should return 1 if it modifies -*************** -*** 2703,2720 **** - { - char *local_dirname, *new_dirname, *t; -! int return_value, should_expand_dirname; - WORD_LIST *wl; - struct stat sb; - -! return_value = should_expand_dirname = 0; - local_dirname = *dirname; - -! if (mbschr (local_dirname, '$')) -! should_expand_dirname = 1; - else - { - t = mbschr (local_dirname, '`'); - if (t && unclosed_pair (local_dirname, strlen (local_dirname), "`") == 0) -! should_expand_dirname = 1; - } - ---- 2809,2837 ---- - { - char *local_dirname, *new_dirname, *t; -! int return_value, should_expand_dirname, nextch, closer; - WORD_LIST *wl; - struct stat sb; - -! return_value = should_expand_dirname = nextch = closer = 0; - local_dirname = *dirname; - -! if (t = mbschr (local_dirname, '$')) -! { -! should_expand_dirname = '$'; -! nextch = t[1]; -! /* Deliberately does not handle the deprecated $[...] arithmetic -! expansion syntax */ -! if (nextch == '(') -! closer = ')'; -! else if (nextch == '{') -! closer = '}'; -! else -! nextch = 0; -! } - else - { - t = mbschr (local_dirname, '`'); - if (t && unclosed_pair (local_dirname, strlen (local_dirname), "`") == 0) -! should_expand_dirname = '`'; - } - -*************** -*** 2740,2743 **** ---- 2857,2877 ---- - dispose_words (wl); - local_dirname = *dirname; -+ /* XXX - change rl_filename_quote_characters here based on -+ should_expand_dirname/nextch/closer. This is the only place -+ custom_filename_quote_characters is modified. */ -+ if (rl_filename_quote_characters && *rl_filename_quote_characters) -+ { -+ int i, j, c; -+ i = strlen (default_filename_quote_characters); -+ custom_filename_quote_characters = xrealloc (custom_filename_quote_characters, i+1); -+ for (i = j = 0; c = default_filename_quote_characters[i]; i++) -+ { -+ if (c == should_expand_dirname || c == nextch || c == closer) -+ continue; -+ custom_filename_quote_characters[j++] = c; -+ } -+ custom_filename_quote_characters[j] = '\0'; -+ rl_filename_quote_characters = custom_filename_quote_characters; -+ } - } - else -*************** -*** 3003,3012 **** - orig_func = rl_completion_entry_function; - orig_attempt_func = rl_attempted_completion_function; -- orig_dir_func = rl_directory_rewrite_hook; - orig_ignore_func = rl_ignore_some_completions_function; - orig_rl_completer_word_break_characters = rl_completer_word_break_characters; - rl_completion_entry_function = rl_filename_completion_function; - rl_attempted_completion_function = (rl_completion_func_t *)NULL; -- rl_directory_rewrite_hook = (rl_icppfunc_t *)NULL; - rl_ignore_some_completions_function = filename_completion_ignore; - rl_completer_word_break_characters = " \t\n\"\'"; ---- 3137,3147 ---- - orig_func = rl_completion_entry_function; - orig_attempt_func = rl_attempted_completion_function; - orig_ignore_func = rl_ignore_some_completions_function; - orig_rl_completer_word_break_characters = rl_completer_word_break_characters; -+ -+ orig_dir_func = save_directory_hook (); -+ - rl_completion_entry_function = rl_filename_completion_function; - rl_attempted_completion_function = (rl_completion_func_t *)NULL; - rl_ignore_some_completions_function = filename_completion_ignore; - rl_completer_word_break_characters = " \t\n\"\'"; -*************** -*** 3016,3023 **** - rl_completion_entry_function = orig_func; - rl_attempted_completion_function = orig_attempt_func; -- rl_directory_rewrite_hook = orig_dir_func; - rl_ignore_some_completions_function = orig_ignore_func; - rl_completer_word_break_characters = orig_rl_completer_word_break_characters; - - return r; - } ---- 3151,3159 ---- - rl_completion_entry_function = orig_func; - rl_attempted_completion_function = orig_attempt_func; - rl_ignore_some_completions_function = orig_ignore_func; - rl_completer_word_break_characters = orig_rl_completer_word_break_characters; - -+ restore_directory_hook (orig_dir_func); -+ - return r; - } -*** ../bash-4.2-patched/bashline.h 2009-01-04 14:32:22.000000000 -0500 ---- bashline.h 2011-07-08 16:22:22.000000000 -0400 -*************** -*** 34,41 **** ---- 34,46 ---- - extern int bash_re_edit __P((char *)); - -+ extern void bashline_set_event_hook __P((void)); -+ extern void bashline_reset_event_hook __P((void)); -+ - extern int bind_keyseq_to_unix_command __P((char *)); - - extern char **bash_default_completion __P((const char *, int, int, int, int)); - -+ void set_directory_hook __P((void)); -+ - /* Used by programmable completion code. */ - extern char *command_word_completion_function __P((const char *, int)); -*** ../bash-4.2-patched/builtins/shopt.def 2010-07-02 22:42:44.000000000 -0400 ---- builtins/shopt.def 2011-07-08 16:31:28.000000000 -0400 -*************** -*** 62,65 **** ---- 62,69 ---- - #include "bashgetopt.h" - -+ #if defined (READLINE) -+ # include "../bashline.h" -+ #endif -+ - #if defined (HISTORY) - # include "../bashhist.h" -*************** -*** 95,99 **** - extern int no_empty_command_completion; - extern int force_fignore; -! extern int dircomplete_spelling; - - extern int enable_hostname_completion __P((int)); ---- 100,104 ---- - extern int no_empty_command_completion; - extern int force_fignore; -! extern int dircomplete_spelling, dircomplete_expand; - - extern int enable_hostname_completion __P((int)); -*************** -*** 122,125 **** ---- 127,134 ---- - #endif - -+ #if defined (READLINE) -+ static int shopt_set_complete_direxpand __P((char *, int)); -+ #endif -+ - static int shopt_login_shell; - static int shopt_compat31; -*************** -*** 151,154 **** ---- 160,164 ---- - { "compat41", &shopt_compat41, set_compatibility_level }, - #if defined (READLINE) -+ { "direxpand", &dircomplete_expand, shopt_set_complete_direxpand }, - { "dirspell", &dircomplete_spelling, (shopt_set_func_t *)NULL }, - #endif -*************** -*** 536,539 **** ---- 547,561 ---- - } - -+ #if defined (READLINE) -+ static int -+ shopt_set_complete_direxpand (option_name, mode) -+ char *option_name; -+ int mode; -+ { -+ set_directory_hook (); -+ return 0; -+ } -+ #endif -+ - #if defined (RESTRICTED_SHELL) - /* Don't allow the value of restricted_shell to be modified. */ -*** ../bash-4.2-patched/doc/bash.1 2011-01-16 15:31:39.000000000 -0500 ---- doc/bash.1 2011-08-27 13:20:57.000000000 -0400 -*************** -*** 8949,8952 **** ---- 8993,9006 ---- - The default bash behavior remains as in previous versions. - .TP 8 -+ .B direxpand -+ If set, -+ .B bash -+ replaces directory names with the results of word expansion when performing -+ filename completion. This changes the contents of the readline editing -+ buffer. -+ If not set, -+ .B bash -+ attempts to preserve what the user typed. -+ .TP 8 - .B dirspell - If set, -*** ../bash-4.2-patched/doc/bashref.texi 2011-01-16 15:31:57.000000000 -0500 ---- doc/bashref.texi 2011-08-27 13:20:59.000000000 -0400 -*************** -*** 4536,4539 **** ---- 4561,4571 ---- - The default Bash behavior remains as in previous versions. - -+ @item direxpand -+ If set, Bash -+ replaces directory names with the results of word expansion when performing -+ filename completion. This changes the contents of the readline editing -+ buffer. -+ If not set, Bash attempts to preserve what the user typed. -+ - @item dirspell - If set, Bash -*** ../bash-4.2-patched/tests/shopt.right 2010-07-02 23:36:30.000000000 -0400 ---- tests/shopt.right 2011-09-02 09:24:27.000000000 -0400 -*************** -*** 13,16 **** ---- 13,17 ---- - shopt -u compat40 - shopt -u compat41 -+ shopt -u direxpand - shopt -u dirspell - shopt -u dotglob -*************** -*** 69,72 **** ---- 70,74 ---- - shopt -u compat40 - shopt -u compat41 -+ shopt -u direxpand - shopt -u dirspell - shopt -u dotglob -*************** -*** 102,105 **** ---- 104,108 ---- - compat40 off - compat41 off -+ direxpand off - dirspell off - dotglob off +From b3203139c0ad0bd9fa902d5e7d8bf9064a74775f Mon Sep 17 00:00:00 2001 +From: Chet Ramey <chet.ra...@case.edu> +Date: Wed, 23 Nov 2011 22:58:51 +0000 +Subject: Bash-4.2 direxpand shopt variable and associated changes, including heuristics to avoid quoting shell variables during word completion + +--- +diff --git a/bashline.c b/bashline.c +index 52c6de6..d42f3f0 100644 +--- a/bashline.c ++++ b/bashline.c +@@ -121,6 +121,9 @@ static int bash_directory_completion_hook __P((char **)); + static int filename_completion_ignore __P((char **)); + static int bash_push_line __P((void)); + ++static rl_icppfunc_t *save_directory_hook __P((void)); ++static void reset_directory_hook __P((rl_icppfunc_t *)); ++ + static void cleanup_expansion_error __P((void)); + static void maybe_make_readline_line __P((char *)); + static void set_up_new_line __P((char *)); +@@ -243,10 +246,16 @@ int force_fignore = 1; + /* Perform spelling correction on directory names during word completion */ + int dircomplete_spelling = 0; + ++/* Expand directory names during word/filename completion. */ ++int dircomplete_expand = 0; ++ + static char *bash_completer_word_break_characters = " \t\n\"'@><=;|&(:"; + static char *bash_nohostname_word_break_characters = " \t\n\"'><=;|&(:"; + /* )) */ + ++static const char *default_filename_quote_characters = " \t\n\\\"'@<>=;|&()#$`?*[!:{~"; /*}*/ ++static char *custom_filename_quote_characters = 0; ++ + static rl_hook_func_t *old_rl_startup_hook = (rl_hook_func_t *)NULL; + + static int dot_in_path = 0; +@@ -501,7 +510,7 @@ initialize_readline () + + /* Tell the completer that we might want to follow symbolic links or + do other expansion on directory names. */ +- rl_directory_rewrite_hook = bash_directory_completion_hook; ++ set_directory_hook (); + + rl_filename_rewrite_hook = bash_filename_rewrite_hook; + +@@ -529,7 +538,7 @@ initialize_readline () + enable_hostname_completion (perform_hostname_completion); + + /* characters that need to be quoted when appearing in filenames. */ +- rl_filename_quote_characters = " \t\n\\\"'@<>=;|&()#$`?*[!:{~"; /*}*/ ++ rl_filename_quote_characters = default_filename_quote_characters; + + rl_filename_quoting_function = bash_quote_filename; + rl_filename_dequoting_function = bash_dequote_filename; +@@ -564,8 +573,10 @@ bashline_reset () + tilde_initialize (); + rl_attempted_completion_function = attempt_shell_completion; + rl_completion_entry_function = NULL; +- rl_directory_rewrite_hook = bash_directory_completion_hook; + rl_ignore_some_completions_function = filename_completion_ignore; ++ rl_filename_quote_characters = default_filename_quote_characters; ++ ++ set_directory_hook (); + } + + /* Contains the line to push into readline. */ +@@ -1279,6 +1290,9 @@ attempt_shell_completion (text, start, end) + matches = (char **)NULL; + rl_ignore_some_completions_function = filename_completion_ignore; + ++ rl_filename_quote_characters = default_filename_quote_characters; ++ set_directory_hook (); ++ + /* Determine if this could be a command word. It is if it appears at + the start of the line (ignoring preceding whitespace), or if it + appears after a character that separates commands. It cannot be a +@@ -1591,6 +1605,12 @@ command_word_completion_function (hint_text, state) + } + else + { ++ if (dircomplete_expand && dot_or_dotdot (filename_hint)) ++ { ++ dircomplete_expand = 0; ++ set_directory_hook (); ++ dircomplete_expand = 1; ++ } + mapping_over = 4; + goto inner; + } +@@ -1791,6 +1811,9 @@ globword: + + inner: + val = rl_filename_completion_function (filename_hint, istate); ++ if (mapping_over == 4 && dircomplete_expand) ++ set_directory_hook (); ++ + istate = 1; + + if (val == 0) +@@ -2693,6 +2716,52 @@ bash_filename_rewrite_hook (fname, fnlen) + return conv; + } + ++/* Functions to save and restore the appropriate directory hook */ ++/* This is not static so the shopt code can call it */ ++void ++set_directory_hook () ++{ ++ if (dircomplete_expand) ++ { ++ rl_directory_completion_hook = bash_directory_completion_hook; ++ rl_directory_rewrite_hook = (rl_icppfunc_t *)0; ++ } ++ else ++ { ++ rl_directory_rewrite_hook = bash_directory_completion_hook; ++ rl_directory_completion_hook = (rl_icppfunc_t *)0; ++ } ++} ++ ++static rl_icppfunc_t * ++save_directory_hook () ++{ ++ rl_icppfunc_t *ret; ++ ++ if (dircomplete_expand) ++ { ++ ret = rl_directory_completion_hook; ++ rl_directory_completion_hook = (rl_icppfunc_t *)NULL; ++ } ++ else ++ { ++ ret = rl_directory_rewrite_hook; ++ rl_directory_rewrite_hook = (rl_icppfunc_t *)NULL; ++ } ++ ++ return ret; ++} ++ ++static void ++restore_directory_hook (hookf) ++ rl_icppfunc_t *hookf; ++{ ++ if (dircomplete_expand) ++ rl_directory_completion_hook = hookf; ++ else ++ rl_directory_rewrite_hook = hookf; ++} ++ + /* Handle symbolic link references and other directory name + expansions while hacking completion. This should return 1 if it modifies + the DIRNAME argument, 0 otherwise. It should make sure not to modify +@@ -2702,20 +2771,31 @@ bash_directory_completion_hook (dirname) + char **dirname; + { + char *local_dirname, *new_dirname, *t; +- int return_value, should_expand_dirname; ++ int return_value, should_expand_dirname, nextch, closer; + WORD_LIST *wl; + struct stat sb; + +- return_value = should_expand_dirname = 0; ++ return_value = should_expand_dirname = nextch = closer = 0; + local_dirname = *dirname; + +- if (mbschr (local_dirname, '$')) +- should_expand_dirname = 1; ++ if (t = mbschr (local_dirname, '$')) ++ { ++ should_expand_dirname = '$'; ++ nextch = t[1]; ++ /* Deliberately does not handle the deprecated $[...] arithmetic ++ expansion syntax */ ++ if (nextch == '(') ++ closer = ')'; ++ else if (nextch == '{') ++ closer = '}'; ++ else ++ nextch = 0; ++ } + else + { + t = mbschr (local_dirname, '`'); + if (t && unclosed_pair (local_dirname, strlen (local_dirname), "`") == 0) +- should_expand_dirname = 1; ++ should_expand_dirname = '`'; + } + + #if defined (HAVE_LSTAT) +@@ -2739,6 +2819,23 @@ bash_directory_completion_hook (dirname) + free (new_dirname); + dispose_words (wl); + local_dirname = *dirname; ++ /* XXX - change rl_filename_quote_characters here based on ++ should_expand_dirname/nextch/closer. This is the only place ++ custom_filename_quote_characters is modified. */ ++ if (rl_filename_quote_characters && *rl_filename_quote_characters) ++ { ++ int i, j, c; ++ i = strlen (default_filename_quote_characters); ++ custom_filename_quote_characters = xrealloc (custom_filename_quote_characters, i+1); ++ for (i = j = 0; c = default_filename_quote_characters[i]; i++) ++ { ++ if (c == should_expand_dirname || c == nextch || c == closer) ++ continue; ++ custom_filename_quote_characters[j++] = c; ++ } ++ custom_filename_quote_characters[j] = '\0'; ++ rl_filename_quote_characters = custom_filename_quote_characters; ++ } + } + else + { +@@ -3002,12 +3099,13 @@ bash_complete_filename_internal (what_to_do) + + orig_func = rl_completion_entry_function; + orig_attempt_func = rl_attempted_completion_function; +- orig_dir_func = rl_directory_rewrite_hook; + orig_ignore_func = rl_ignore_some_completions_function; + orig_rl_completer_word_break_characters = rl_completer_word_break_characters; ++ ++ orig_dir_func = save_directory_hook (); ++ + rl_completion_entry_function = rl_filename_completion_function; + rl_attempted_completion_function = (rl_completion_func_t *)NULL; +- rl_directory_rewrite_hook = (rl_icppfunc_t *)NULL; + rl_ignore_some_completions_function = filename_completion_ignore; + rl_completer_word_break_characters = " \t\n\"\'"; + +@@ -3015,10 +3113,11 @@ bash_complete_filename_internal (what_to_do) + + rl_completion_entry_function = orig_func; + rl_attempted_completion_function = orig_attempt_func; +- rl_directory_rewrite_hook = orig_dir_func; + rl_ignore_some_completions_function = orig_ignore_func; + rl_completer_word_break_characters = orig_rl_completer_word_break_characters; + ++ restore_directory_hook (orig_dir_func); ++ + return r; + } + +diff --git a/bashline.h b/bashline.h +index 9daa8f9..38964ea 100644 +--- a/bashline.h ++++ b/bashline.h +@@ -33,10 +33,15 @@ extern void bashline_reset __P((void)); + extern void bashline_reinitialize __P((void)); + extern int bash_re_edit __P((char *)); + ++extern void bashline_set_event_hook __P((void)); ++extern void bashline_reset_event_hook __P((void)); ++ + extern int bind_keyseq_to_unix_command __P((char *)); + + extern char **bash_default_completion __P((const char *, int, int, int, int)); + ++void set_directory_hook __P((void)); ++ + /* Used by programmable completion code. */ + extern char *command_word_completion_function __P((const char *, int)); + extern char *bash_groupname_completion_function __P((const char *, int)); +diff --git a/builtins/shopt.def b/builtins/shopt.def +index 27685aa..6cd8c4f 100644 +--- a/builtins/shopt.def ++++ b/builtins/shopt.def +@@ -61,6 +61,10 @@ $END + #include "common.h" + #include "bashgetopt.h" + ++#if defined (READLINE) ++# include "../bashline.h" ++#endif ++ + #if defined (HISTORY) + # include "../bashhist.h" + #endif +@@ -94,7 +98,7 @@ extern int extended_glob; + extern int hist_verify, history_reediting, perform_hostname_completion; + extern int no_empty_command_completion; + extern int force_fignore; +-extern int dircomplete_spelling; ++extern int dircomplete_spelling, dircomplete_expand; + + extern int enable_hostname_completion __P((int)); + #endif +@@ -121,6 +125,10 @@ static int set_compatibility_level __P((char *, int)); + static int set_restricted_shell __P((char *, int)); + #endif + ++#if defined (READLINE) ++static int shopt_set_complete_direxpand __P((char *, int)); ++#endif ++ + static int shopt_login_shell; + static int shopt_compat31; + static int shopt_compat32; +@@ -150,6 +158,7 @@ static struct { + { "compat40", &shopt_compat40, set_compatibility_level }, + { "compat41", &shopt_compat41, set_compatibility_level }, + #if defined (READLINE) ++ { "direxpand", &dircomplete_expand, shopt_set_complete_direxpand }, + { "dirspell", &dircomplete_spelling, (shopt_set_func_t *)NULL }, + #endif + { "dotglob", &glob_dot_filenames, (shopt_set_func_t *)NULL }, +@@ -535,6 +544,17 @@ set_compatibility_level (option_name, mode) + return 0; + } + ++#if defined (READLINE) ++static int ++shopt_set_complete_direxpand (option_name, mode) ++ char *option_name; ++ int mode; ++{ ++ set_directory_hook (); ++ return 0; ++} ++#endif ++ + #if defined (RESTRICTED_SHELL) + /* Don't allow the value of restricted_shell to be modified. */ + +diff --git a/doc/bash.1 b/doc/bash.1 +index 0ba4f8e..103d27e 100644 +--- a/doc/bash.1 ++++ b/doc/bash.1 +@@ -8948,6 +8948,16 @@ parameter expansion as a special character. The single quotes must match + quoted. This is the behavior of posix mode through version 4.1. + The default bash behavior remains as in previous versions. + .TP 8 ++.B direxpand ++If set, ++.B bash ++replaces directory names with the results of word expansion when performing ++filename completion. This changes the contents of the readline editing ++buffer. ++If not set, ++.B bash ++attempts to preserve what the user typed. ++.TP 8 + .B dirspell + If set, + .B bash +diff --git a/doc/bashref.texi b/doc/bashref.texi +index b4fd8d3..ae982d5 100644 +--- a/doc/bashref.texi ++++ b/doc/bashref.texi +@@ -4535,6 +4535,13 @@ parameter expansion as a special character. The single quotes must match + quoted. This is the behavior of @sc{posix} mode through version 4.1. + The default Bash behavior remains as in previous versions. + ++@item direxpand ++If set, Bash ++replaces directory names with the results of word expansion when performing ++filename completion. This changes the contents of the readline editing ++buffer. ++If not set, Bash attempts to preserve what the user typed. ++ + @item dirspell + If set, Bash + attempts spelling correction on directory names during word completion +diff --git a/tests/shopt.right b/tests/shopt.right +index 4080503..0d3c08c 100644 +--- a/tests/shopt.right ++++ b/tests/shopt.right +@@ -12,6 +12,7 @@ shopt -u compat31 + shopt -u compat32 + shopt -u compat40 + shopt -u compat41 ++shopt -u direxpand + shopt -u dirspell + shopt -u dotglob + shopt -u execfail +@@ -68,6 +69,7 @@ shopt -u compat31 + shopt -u compat32 + shopt -u compat40 + shopt -u compat41 ++shopt -u direxpand + shopt -u dirspell + shopt -u dotglob + shopt -u execfail +@@ -101,6 +103,7 @@ compat31 off + compat32 off + compat40 off + compat41 off ++direxpand off + dirspell off + dotglob off + execfail off +-- +cgit v0.9.0.2 -- To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org