changeset 628:efb7557aea10

updated for version 7.0181
author vimboss
date Sat, 14 Jan 2006 21:18:42 +0000
parents 84217af41926
children f3694b073509
files src/Makefile src/fileio.c src/os_unix.c src/po/Makefile
diffstat 4 files changed, 46 insertions(+), 44 deletions(-) [+]
line wrap: on
line diff
--- a/src/Makefile
+++ b/src/Makefile
@@ -1602,7 +1602,6 @@ xxd/xxd$(EXEEXT): xxd/xxd.c
 # Generate the converted .mo files separately, it's no problem if this fails.
 languages:
 	@if test -n "$(MAKEMO)" -a -f $(PODIR)/Makefile; then \
-		$(MAKE) language-check; \
 		cd $(PODIR); \
 		CC="$(CC)" $(MAKE) prefix=$(DESTDIR)$(prefix); \
 	fi
@@ -1610,11 +1609,6 @@ languages:
 		cd $(PODIR); CC="$(CC)" $(MAKE) prefix=$(DESTDIR)$(prefix) converted; \
 	fi
 
-# Separate target to check the po files for valitidy, because it depends on
-# ./vim.
-language-check: $(VIMTARGET)
-	cd $(PODIR); $(MAKE) check VIM=../$(VIMTARGET)
-
 # Update the *.po files for changes in the sources.  Only run manually.
 update-po:
 	cd $(PODIR); CC="$(CC)" $(MAKE) prefix=$(DESTDIR)$(prefix) update-po
@@ -1706,9 +1700,15 @@ types.vim: $(TAGS_SRC) $(TAGS_INCL)
 test check:
 	$(MAKE) -f Makefile $(VIMTARGET)
 	cd testdir; $(MAKE) -f Makefile $(GUI_TESTTARGET) VIMPROG=../$(VIMTARGET) $(GUI_TESTARG)
+	@if test -n "$(MAKEMO)" -a -f $(PODIR)/Makefile; then \
+		cd $(PODIR); $(MAKE) -f Makefile check VIM=../$(VIMTARGET); \
+	fi
 
 testclean:
 	cd testdir; $(MAKE) -f Makefile clean
+	if test -d $(PODIR); then \
+		cd $(PODIR); $(MAKE) checkclean; \
+	fi
 
 #
 # Avoid overwriting an existing executable, somebody might be running it and
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -6158,7 +6158,8 @@ buf_check_timestamp(buf, focus)
     {
 	retval = 1;
 
-	/* set b_mtime to stop further warnings */
+	/* set b_mtime to stop further warnings (e.g., when executing
+	 * FileChangedShell autocmd) */
 	if (stat_res < 0)
 	{
 	    buf->b_mtime = 0;
@@ -6341,7 +6342,7 @@ buf_check_timestamp(buf, focus)
 
     if (reload)
 	/* Reload the buffer. */
-	buf_reload(buf);
+	buf_reload(buf, orig_mode);
 
 #ifdef FEAT_GUI
     /* restore this in case an autocommand has set it; it would break
@@ -6355,16 +6356,18 @@ buf_check_timestamp(buf, focus)
 /*
  * Reload a buffer that is already loaded.
  * Used when the file was changed outside of Vim.
+ * "orig_mode" is buf->b_orig_mode before the need for reloading was detected.
+ * buf->b_orig_mode may have been reset already.
  */
     void
-buf_reload(buf)
+buf_reload(buf, orig_mode)
     buf_T	*buf;
+    int		orig_mode;
 {
     exarg_T	ea;
     pos_T	old_cursor;
     linenr_T	old_topline;
     int		old_ro = buf->b_p_ro;
-    int		orig_mode = buf->b_orig_mode;
     buf_T	*savebuf;
     int		saved = OK;
 #ifdef FEAT_AUTOCMD
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -4852,6 +4852,8 @@ mch_expandpath(gap, path, flags)
 # define SEEK_END 2
 #endif
 
+#define SHELL_SPECIAL (char_u *)"\t \"&';<>[\\]|"
+
 /* ARGSUSED */
     int
 mch_expand_wildcards(num_pat, pat, num_file, file, flags)
@@ -5048,22 +5050,12 @@ mch_expand_wildcards(num_pat, pat, num_f
 	len += STRLEN(pat[i]) + 3;	/* add space and two quotes */
 #else
 	++len;				/* add space */
-	for (j = 0; pat[i][j] != NUL; )
-	    if (vim_strchr((char_u *)" ';&<>", pat[i][j]) != NULL)
-	    {
-		len += 2;		/* add two quotes */
-		while (pat[i][j] != NUL
-			&& vim_strchr((char_u *)" ';&<>", pat[i][j]) != NULL)
-		{
-		    ++len;
-		    ++j;
-		}
-	    }
-	    else
-	    {
-		++len;
-		++j;
-	    }
+	for (j = 0; pat[i][j] != NUL; ++j)
+	{
+	    if (vim_strchr(SHELL_SPECIAL, pat[i][j]) != NULL)
+		++len;		/* may add a backslash */
+	    ++len;
+	}
 #endif
     }
     command = alloc(len);
@@ -5084,9 +5076,11 @@ mch_expand_wildcards(num_pat, pat, num_f
      */
     if (shell_style == STYLE_BT)
     {
-	STRCPY(command, pat[0] + 1);		/* exclude first backtick */
+	/* change `command; command& ` to (command; command ) */
+	STRCPY(command, "(");
+	STRCAT(command, pat[0] + 1);		/* exclude first backtick */
 	p = command + STRLEN(command) - 1;
-	*p = ' ';				/* remove last backtick */
+	*p-- = ')';				/* remove last backtick */
 	while (p > command && vim_iswhite(*p))
 	    --p;
 	if (*p == '&')				/* remove trailing '&' */
@@ -5114,8 +5108,8 @@ mch_expand_wildcards(num_pat, pat, num_f
 	for (i = 0; i < num_pat; ++i)
 	{
 	    /* When using system() always add extra quotes, because the shell
-	     * is started twice.  Otherwise only put quotes around spaces and
-	     * single quotes. */
+	     * is started twice.  Otherwise put a backslash before special
+	     * characters, except insice ``. */
 #ifdef USE_SYSTEM
 	    STRCAT(command, " \"");
 	    STRCAT(command, pat[i]);
@@ -5125,30 +5119,32 @@ mch_expand_wildcards(num_pat, pat, num_f
 
 	    p = command + STRLEN(command);
 	    *p++ = ' ';
-	    for (j = 0; pat[i][j] != NUL; )
+	    for (j = 0; pat[i][j] != NUL; ++j)
 	    {
 		if (pat[i][j] == '`')
 		{
 		    intick = !intick;
-		    *p++ = pat[i][j++];
+		    *p++ = pat[i][j];
 		}
-		else if (!intick && vim_strchr((char_u *)" ';&<>",
+		else if (pat[i][j] == '\\' && pat[i][j + 1] != NUL)
+		{
+		    /* Remove a backslash, take char literally. */
+		    *p++ = pat[i][++j];
+		}
+		else if (!intick && vim_strchr(SHELL_SPECIAL,
 							   pat[i][j]) != NULL)
 		{
-		    /* Put quotes around special characters, but not when
-		     * inside ``. */
-		    *p++ = '"';
-		    while (pat[i][j] != NUL && vim_strchr((char_u *)" ';&<>",
-							   pat[i][j]) != NULL)
-			*p++ = pat[i][j++];
-		    *p++ = '"';
+		    /* Put a backslash before a special character, but not
+		     * when inside ``. */
+		    *p++ = '\\';
+		    *p++ = pat[i][j];
 		}
 		else
 		{
 		    /* For a backslash also copy the next character, don't
 		     * want to put quotes around it. */
-		    if ((*p++ = pat[i][j++]) == '\\' && pat[i][j] != NUL)
-			*p++ = pat[i][j++];
+		    if ((*p++ = pat[i][j]) == '\\' && pat[i][j + 1] != NUL)
+			*p++ = pat[i][++j];
 		}
 	    }
 	    *p = NUL;
--- a/src/po/Makefile
+++ b/src/po/Makefile
@@ -202,11 +202,14 @@ prefixcheck:
 	  exit 1; \
 	fi
 
-clean:
-	rm -f core core.* *.old.po *.mo *.ck *.pot sjiscorr
+clean: checkclean
+	rm -f core core.* *.old.po *.mo *.pot sjiscorr
 
 distclean: clean
 
+checkclean:
+	rm -f *.ck
+
 #
 # NOTE: If you get an error for gvimext.cpp not found, you need to unpack the
 # extra archive.