diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | Src/Zle/zle_main.c | 13 | ||||
-rw-r--r-- | Src/mkmakemod.sh | 8 | ||||
-rw-r--r-- | Src/module.c | 21 |
4 files changed, 37 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog index 120987be1..6bffc7043 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2005-08-09 Peter Stephenson <pws@csr.com> + * 21583: Thorsten Dahlheimer: Src/module.c: extend circularity + test of zmodload -A. + + * 21582: Thorsten Dahlheimer: Src/module.c: failure status of + zmodload -R was wrong. + + * 21578: Thorsten Dahlheimer: Src/mkmakemod.sh: script used not + to exit after cleaning up. + * 21577 (adapted): Dan Bullok: Src/Zle/zle_main.c, Src/init.c, Src/utils.c: improved 21567 which reexpands the prompt and refreshes but doesn't trash the line editor. diff --git a/Src/Zle/zle_main.c b/Src/Zle/zle_main.c index e6f83cb3e..1acff3bbb 100644 --- a/Src/Zle/zle_main.c +++ b/Src/Zle/zle_main.c @@ -1481,6 +1481,17 @@ resetprompt(UNUSED(char **args)) return redisplay(NULL); } +/* same bug called from outside zle */ + +/**/ +mod_export void +zle_resetprompt(void) +{ reexpandprompt(); + if (zleactive) + redisplay(NULL); +} + + /**/ mod_export void trashzle(void) @@ -1572,6 +1583,7 @@ setup_(UNUSED(Module m)) { /* Set up editor entry points */ trashzleptr = trashzle; + zle_resetpromptptr = zle_resetprompt; zrefreshptr = zrefresh; zleaddtolineptr = zleaddtoline; zlegetlineptr = zlegetline; @@ -1659,6 +1671,7 @@ finish_(UNUSED(Module m)) /* editor entry points */ trashzleptr = noop_function; + zle_resetpromptptr = noop_function; zrefreshptr = noop_function; zleaddtolineptr = noop_function_int; zlegetlineptr = NULL; diff --git a/Src/mkmakemod.sh b/Src/mkmakemod.sh index 38c5e72e1..e67b7a7a8 100644 --- a/Src/mkmakemod.sh +++ b/Src/mkmakemod.sh @@ -37,7 +37,7 @@ # `:<<\Make' and `Make' -- this will be copied into Makemod.in. # # The resulting Makemod.in knows how to build each module that is defined. -# For each module in also knows how to build a .mdh file. Each source file +# For each module it also knows how to build a .mdh file. Each source file # should #include the .mdh file for the module it is a part of. The .mdh # file #includes the .mdh files for any module dependencies, then each of # $headers, and then each .epro (for global declarations). It will @@ -92,7 +92,7 @@ if $first_stage; then dir_top=`echo $the_subdir | sed 's,[^/][^/]*,..,g'` - trap "rm -f $the_subdir/${the_makefile}.in" 1 2 15 + trap "rm -f $the_subdir/${the_makefile}.in; exit 1" 1 2 15 echo "creating $the_subdir/${the_makefile}.in" exec 3>&1 >$the_subdir/${the_makefile}.in echo "##### ${the_makefile}.in generated automatically by mkmakemod.sh" @@ -466,11 +466,11 @@ if $first_stage; then fi if $second_stage ; then - trap "rm -f $the_subdir/${the_makefile}" 1 2 15 + trap "rm -f $the_subdir/${the_makefile}; exit 1" 1 2 15 ${CONFIG_SHELL-/bin/sh} ./config.status \ --file=$the_subdir/${the_makefile}:$the_subdir/${the_makefile}.in || - return 1 + exit 1 fi exit 0 diff --git a/Src/module.c b/Src/module.c index 7a0fcf811..ee493ad0c 100644 --- a/Src/module.c +++ b/Src/module.c @@ -1043,7 +1043,6 @@ bin_zmodload_alias(char *nam, char **args, Options ops) */ LinkNode node; Module m; - int ret = 0; if (!*args) { if (OPT_ISSET(ops,'R')) { @@ -1058,7 +1057,7 @@ bin_zmodload_alias(char *nam, char **args, Options ops) return 0; } - for (; !ret && *args; args++) { + for (; *args; args++) { char *eqpos = strchr(*args, '='); char *aliasname = eqpos ? eqpos+1 : NULL; if (eqpos) @@ -1078,8 +1077,7 @@ bin_zmodload_alias(char *nam, char **args, Options ops) m = (Module) getdata(node); if (!(m->flags & MOD_ALIAS)) { zwarnnam(nam, "module is not an alias: %s", *args, 0); - ret = 1; - break; + return 1; } delete_module(node); } else { @@ -1093,12 +1091,15 @@ bin_zmodload_alias(char *nam, char **args, Options ops) zwarnnam(nam, "invalid module name `%s'", aliasname, 0); return 1; } - find_module(aliasname, 1, &mname); - if (!strcmp(mname, *args)) { - zwarnnam(nam, "module alias would refer to itself: %s", - *args, 0); - return 1; - } + do { + if (!strcmp(mname, *args)) { + zwarnnam(nam, "module alias would refer to itself: %s", + *args, 0); + return 1; + } + } while ((node = find_module(mname, 0, NULL)) + && ((m = (Module) getdata(node))->flags & MOD_ALIAS) + && (mname = m->u.alias)); node = find_module(*args, 0, NULL); if (node) { m = (Module) getdata(node); |