SOURCES: 7.1.304 (NEW), 7.1.305 (NEW) - new

adamg adamg at pld-linux.org
Fri May 30 00:20:44 CEST 2008


Author: adamg                        Date: Thu May 29 22:20:44 2008 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- new

---- Files affected:
SOURCES:
   7.1.304 (NONE -> 1.1)  (NEW), 7.1.305 (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/7.1.304
diff -u /dev/null SOURCES/7.1.304:1.1
--- /dev/null	Fri May 30 00:20:44 2008
+++ SOURCES/7.1.304	Fri May 30 00:20:38 2008
@@ -0,0 +1,477 @@
+To: vim-dev at vim.org
+Subject: Patch 7.1.304
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.1.304
+Problem:    Shortpath_for_invalid_fname() does not work correctly and is
+	    unnecessary complex.
+Solution:   Clean up shortpath_for_invalid_fname(). (mostly by Yegappan
+	    Lakshmanan)
+Files:	    src/eval.c
+
+
+*** ../vim-7.1.303/src/eval.c	Wed May 28 16:48:01 2008
+--- src/eval.c	Wed May 28 16:35:51 2008
+***************
+*** 21068,21075 ****
+  static int shortpath_for_partial __ARGS((char_u **fnamep, char_u **bufp, int *fnamelen));
+  
+  /*
+!  * Get the short pathname of a file.
+!  * Returns 1 on success. *fnamelen is 0 for nonexistent path.
+   */
+      static int
+  get_short_pathname(fnamep, bufp, fnamelen)
+--- 21476,21487 ----
+  static int shortpath_for_partial __ARGS((char_u **fnamep, char_u **bufp, int *fnamelen));
+  
+  /*
+!  * Get the short path (8.3) for the filename in "fnamep".
+!  * Only works for a valid file name.
+!  * When the path gets longer "fnamep" is changed and the allocated buffer
+!  * is put in "bufp".
+!  * *fnamelen is the length of "fnamep" and set to 0 for a nonexistent path.
+!  * Returns OK on success, FAIL on failure.
+   */
+      static int
+  get_short_pathname(fnamep, bufp, fnamelen)
+***************
+*** 21077,21112 ****
+      char_u	**bufp;
+      int		*fnamelen;
+  {
+!     int		l,len;
+      char_u	*newbuf;
+  
+      len = *fnamelen;
+- 
+      l = GetShortPathName(*fnamep, *fnamep, len);
+      if (l > len - 1)
+      {
+  	/* If that doesn't work (not enough space), then save the string
+! 	 * and try again with a new buffer big enough
+! 	 */
+  	newbuf = vim_strnsave(*fnamep, l);
+  	if (newbuf == NULL)
+! 	    return 0;
+  
+  	vim_free(*bufp);
+  	*fnamep = *bufp = newbuf;
+  
+! 	l = GetShortPathName(*fnamep,*fnamep,l+1);
+! 
+! 	/* Really should always succeed, as the buffer is big enough */
+      }
+  
+      *fnamelen = l;
+!     return 1;
+  }
+  
+  /*
+!  * Create a short path name.  Returns the length of the buffer it needs.
+!  * Doesn't copy over the end of the buffer passed in.
+   */
+      static int
+  shortpath_for_invalid_fname(fname, bufp, fnamelen)
+--- 21489,21532 ----
+      char_u	**bufp;
+      int		*fnamelen;
+  {
+!     int		l, len;
+      char_u	*newbuf;
+  
+      len = *fnamelen;
+      l = GetShortPathName(*fnamep, *fnamep, len);
+      if (l > len - 1)
+      {
+  	/* If that doesn't work (not enough space), then save the string
+! 	 * and try again with a new buffer big enough. */
+  	newbuf = vim_strnsave(*fnamep, l);
+  	if (newbuf == NULL)
+! 	    return FAIL;
+  
+  	vim_free(*bufp);
+  	*fnamep = *bufp = newbuf;
+  
+! 	/* Really should always succeed, as the buffer is big enough. */
+! 	l = GetShortPathName(*fnamep, *fnamep, l+1);
+      }
+  
+      *fnamelen = l;
+!     return OK;
+  }
+  
+  /*
+!  * Get the short path (8.3) for the filename in "fname". The converted
+!  * path is returned in "bufp".
+!  *
+!  * Some of the directories specified in "fname" may not exist. This function
+!  * will shorten the existing directories at the beginning of the path and then
+!  * append the remaining non-existing path.
+!  *
+!  * fname - Pointer to the filename to shorten.  On return, contains the
+!  *         pointer to the shortened pathname
+!  * bufp -  Pointer to an allocated buffer for the filename.
+!  * fnamelen - Length of the filename pointed to by fname
+!  *
+!  * Returns OK on success (or nothing done) and FAIL on failure (out of memory).
+   */
+      static int
+  shortpath_for_invalid_fname(fname, bufp, fnamelen)
+***************
+*** 21114,21198 ****
+      char_u	**bufp;
+      int		*fnamelen;
+  {
+!     char_u	*s, *p, *pbuf2, *pbuf3;
+      char_u	ch;
+!     int		len, len2, plen, slen;
+  
+      /* Make a copy */
+!     len2 = *fnamelen;
+!     pbuf2 = vim_strnsave(*fname, len2);
+!     pbuf3 = NULL;
+! 
+!     s = pbuf2 + len2 - 1; /* Find the end */
+!     slen = 1;
+!     plen = len2;
+! 
+!     if (after_pathsep(pbuf2, s + 1))
+!     {
+! 	--s;
+! 	++slen;
+! 	--plen;
+!     }
+  
+!     do
+      {
+! 	/* Go back one path-separator */
+! 	while (s > pbuf2 && !after_pathsep(pbuf2, s + 1))
+! 	{
+! 	    --s;
+! 	    ++slen;
+! 	    --plen;
+! 	}
+! 	if (s <= pbuf2)
+! 	    break;
+  
+! 	/* Remember the character that is about to be splatted */
+! 	ch = *s;
+! 	*s = 0; /* get_short_pathname requires a null-terminated string */
+! 
+! 	/* Try it in situ */
+! 	p = pbuf2;
+! 	if (!get_short_pathname(&p, &pbuf3, &plen))
+  	{
+! 	    vim_free(pbuf2);
+! 	    return -1;
+  	}
+! 	*s = ch;    /* Preserve the string */
+!     } while (plen == 0);
+  
+!     if (plen > 0)
+      {
+! 	/* Remember the length of the new string.  */
+! 	*fnamelen = len = plen + slen;
+  	vim_free(*bufp);
+! 	if (len > len2)
+  	{
+! 	    /* If there's not enough space in the currently allocated string,
+! 	     * then copy it to a buffer big enough.
+! 	     */
+! 	    *fname= *bufp = vim_strnsave(p, len);
+  	    if (*fname == NULL)
+! 		return -1;
+  	}
+  	else
+  	{
+! 	    /* Transfer pbuf2 to being the main buffer  (it's big enough) */
+! 	    *fname = *bufp = pbuf2;
+! 	    if (p != pbuf2)
+! 		strncpy(*fname, p, plen);
+! 	    pbuf2 = NULL;
+! 	}
+! 	/* Concat the next bit */
+! 	strncpy(*fname + plen, s, slen);
+! 	(*fname)[len] = '\0';
+      }
+!     vim_free(pbuf3);
+!     vim_free(pbuf2);
+!     return 0;
+  }
+  
+  /*
+   * Get a pathname for a partial path.
+   */
+      static int
+  shortpath_for_partial(fnamep, bufp, fnamelen)
+--- 21534,21639 ----
+      char_u	**bufp;
+      int		*fnamelen;
+  {
+!     char_u	*short_fname, *save_fname, *pbuf_unused;
+!     char_u	*endp, *save_endp;
+      char_u	ch;
+!     int		old_len, len;
+!     int		new_len, sfx_len;
+!     int		retval = OK;
+  
+      /* Make a copy */
+!     old_len = *fnamelen;
+!     save_fname = vim_strnsave(*fname, old_len);
+!     pbuf_unused = NULL;
+!     short_fname = NULL;
+  
+!     endp = save_fname + old_len - 1; /* Find the end of the copy */
+!     save_endp = endp;
+! 
+!     /*
+!      * Try shortening the supplied path till it succeeds by removing one
+!      * directory at a time from the tail of the path.
+!      */
+!     len = 0;
+!     for (;;)
+      {
+! 	/* go back one path-separator */
+! 	while (endp > save_fname && !after_pathsep(save_fname, endp + 1))
+! 	    --endp;
+! 	if (endp <= save_fname)
+! 	    break;		/* processed the complete path */
+  
+! 	/*
+! 	 * Replace the path separator with a NUL and try to shorten the
+! 	 * resulting path.
+! 	 */
+! 	ch = *endp;
+! 	*endp = 0;
+! 	short_fname = save_fname;
+! 	len = STRLEN(short_fname) + 1;
+! 	if (get_short_pathname(&short_fname, &pbuf_unused, &len) == FAIL)
+  	{
+! 	    retval = FAIL;
+! 	    goto theend;
+  	}
+! 	*endp = ch;	/* preserve the string */
+! 
+! 	if (len > 0)
+! 	    break;	/* successfully shortened the path */
+  
+! 	/* failed to shorten the path. Skip the path separator */
+! 	--endp;
+!     }
+! 
+!     if (len > 0)
+      {
+! 	/*
+! 	 * Succeeded in shortening the path. Now concatenate the shortened
+! 	 * path with the remaining path at the tail.
+! 	 */
+! 
+! 	/* Compute the length of the new path. */
+! 	sfx_len = (int)(save_endp - endp) + 1;
+! 	new_len = len + sfx_len;
+! 
+! 	*fnamelen = new_len;
+  	vim_free(*bufp);
+! 	if (new_len > old_len)
+  	{
+! 	    /* There is not enough space in the currently allocated string,
+! 	     * copy it to a buffer big enough. */
+! 	    *fname = *bufp = vim_strnsave(short_fname, new_len);
+  	    if (*fname == NULL)
+! 	    {
+! 		retval = FAIL;
+! 		goto theend;
+! 	    }
+  	}
+  	else
+  	{
+! 	    /* Transfer short_fname to the main buffer (it's big enough),
+! 	     * unless get_short_pathname() did its work in-place. */
+! 	    *fname = *bufp = save_fname;
+! 	    if (short_fname != save_fname)
+! 		vim_strncpy(save_fname, short_fname, len);
+! 	    save_fname = NULL;
+! 	}
+! 
+! 	/* concat the not-shortened part of the path */
+! 	vim_strncpy(*fname + len, endp, sfx_len);
+! 	(*fname)[new_len] = NUL;
+      }
+! 
+! theend:
+!     vim_free(pbuf_unused);
+!     vim_free(save_fname);
+! 
+!     return retval;
+  }
+  
+  /*
+   * Get a pathname for a partial path.
++  * Returns OK for success, FAIL for failure.
+   */
+      static int
+  shortpath_for_partial(fnamep, bufp, fnamelen)
+***************
+*** 21222,21229 ****
+  
+      len = tflen = (int)STRLEN(tfname);
+  
+!     if (!get_short_pathname(&tfname, &pbuf, &len))
+! 	return -1;
+  
+      if (len == 0)
+      {
+--- 21663,21670 ----
+  
+      len = tflen = (int)STRLEN(tfname);
+  
+!     if (get_short_pathname(&tfname, &pbuf, &len) == FAIL)
+! 	return FAIL;
+  
+      if (len == 0)
+      {
+***************
+*** 21232,21239 ****
+  	 * there's not a lot of point in guessing what it might be.
+  	 */
+  	len = tflen;
+! 	if (shortpath_for_invalid_fname(&tfname, &pbuf, &len) == -1)
+! 	    return -1;
+      }
+  
+      /* Count the paths backward to find the beginning of the desired string. */
+--- 21673,21680 ----
+  	 * there's not a lot of point in guessing what it might be.
+  	 */
+  	len = tflen;
+! 	if (shortpath_for_invalid_fname(&tfname, &pbuf, &len) == FAIL)
+! 	    return FAIL;
+      }
+  
+      /* Count the paths backward to find the beginning of the desired string. */
+***************
+*** 21257,21263 ****
+  	if (p >= tfname)
+  	    *p = '~';
+  	else
+! 	    return -1;
+      }
+      else
+  	++p;
+--- 21698,21704 ----
+  	if (p >= tfname)
+  	    *p = '~';
+  	else
+! 	    return FAIL;
+      }
+      else
+  	++p;
+***************
+*** 21268,21274 ****
+      *bufp = pbuf;
+      *fnamep = p;
+  
+!     return 0;
+  }
+  #endif /* WIN3264 */
+  
+--- 21709,21715 ----
+      *bufp = pbuf;
+      *fnamep = p;
+  
+!     return OK;
+  }
+  #endif /* WIN3264 */
+  
+***************
+*** 21276,21282 ****
+   * Adjust a filename, according to a string of modifiers.
+   * *fnamep must be NUL terminated when called.  When returning, the length is
+   * determined by *fnamelen.
+!  * Returns valid flags.
+   * When there is an error, *fnamep is set to NULL.
+   */
+      int
+--- 21717,21723 ----
+   * Adjust a filename, according to a string of modifiers.
+   * *fnamep must be NUL terminated when called.  When returning, the length is
+   * determined by *fnamelen.
+!  * Returns VALID_ flags or -1 for failure.
+   * When there is an error, *fnamep is set to NULL.
+   */
+      int
+***************
+*** 21488,21494 ****
+  	 */
+  	if (!has_fullname && !vim_isAbsName(*fnamep))
+  	{
+! 	    if (shortpath_for_partial(fnamep, bufp, fnamelen) == -1)
+  		return -1;
+  	}
+  	else
+--- 21929,21935 ----
+  	 */
+  	if (!has_fullname && !vim_isAbsName(*fnamep))
+  	{
+! 	    if (shortpath_for_partial(fnamep, bufp, fnamelen) == FAIL)
+  		return -1;
+  	}
+  	else
+***************
+*** 21498,21504 ****
+  	    /* Simple case, already have the full-name
+  	     * Nearly always shorter, so try first time. */
+  	    l = *fnamelen;
+! 	    if (!get_short_pathname(fnamep, bufp, &l))
+  		return -1;
+  
+  	    if (l == 0)
+--- 21939,21945 ----
+  	    /* Simple case, already have the full-name
+  	     * Nearly always shorter, so try first time. */
+  	    l = *fnamelen;
+! 	    if (get_short_pathname(fnamep, bufp, &l) == FAIL)
+  		return -1;
+  
+  	    if (l == 0)
+***************
+*** 21506,21512 ****
+  		/* Couldn't find the filename.. search the paths.
+  		 */
+  		l = *fnamelen;
+! 		if (shortpath_for_invalid_fname(fnamep, bufp, &l ) == -1)
+  		    return -1;
+  	    }
+  	    *fnamelen = l;
+--- 21947,21953 ----
+  		/* Couldn't find the filename.. search the paths.
+  		 */
+  		l = *fnamelen;
+! 		if (shortpath_for_invalid_fname(fnamep, bufp, &l) == FAIL)
+  		    return -1;
+  	    }
+  	    *fnamelen = l;
+*** ../vim-7.1.303/src/version.c	Thu May 29 15:33:13 2008
+--- src/version.c	Thu May 29 21:41:55 2008
+***************
+*** 668,669 ****
+--- 673,676 ----
+  {   /* Add new patch number below this line */
++ /**/
++     304,
+  /**/
+
+-- 
+"The future's already arrived - it's just not evenly distributed yet."
+		-- William Gibson
+
+ /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

================================================================
Index: SOURCES/7.1.305
diff -u /dev/null SOURCES/7.1.305:1.1
--- /dev/null	Fri May 30 00:20:44 2008
+++ SOURCES/7.1.305	Fri May 30 00:20:38 2008
@@ -0,0 +1,155 @@
+To: vim-dev at vim.org
+Subject: Patch 7.1.305
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.1.305
+Problem:    Editing a compressed file with special characters in the name
+	    doesn't work properly.
+Solution:   Escape special characters.
+Files:	    runtime/autoload/gzip.vim
+
+
+*** ../vim-7.1.304/runtime/autoload/gzip.vim	Thu May 10 18:54:26 2007
+--- runtime/autoload/gzip.vim	Thu May 29 22:30:59 2008
+***************
+*** 1,6 ****
+  " Vim autoload file for editing compressed files.
+  " Maintainer: Bram Moolenaar <Bram at vim.org>
+! " Last Change: 2007 May 10
+  
+  " These functions are used by the gzip plugin.
+  
+--- 1,6 ----
+  " Vim autoload file for editing compressed files.
+  " Maintainer: Bram Moolenaar <Bram at vim.org>
+! " Last Change: 2008 May 29
+  
+  " These functions are used by the gzip plugin.
+  
+***************
+*** 73,80 ****
+    let empty = line("'[") == 1 && line("']") == line("$")
+    let tmp = tempname()
+    let tmpe = tmp . "." . expand("<afile>:e")
+    " write the just read lines to a temp file "'[,']w tmp.gz"
+!   execute "silent '[,']w " . escape(tmpe, ' ')
+    " uncompress the temp file: call system("gzip -dn tmp.gz")
+    call system(a:cmd . " " . s:escape(tmpe))
+    if !filereadable(tmp)
+--- 73,87 ----
+    let empty = line("'[") == 1 && line("']") == line("$")
+    let tmp = tempname()
+    let tmpe = tmp . "." . expand("<afile>:e")
++   if exists('*fnameescape')
++     let tmp_esc = fnameescape(tmp)
++     let tmpe_esc = fnameescape(tmpe)
++   else
++     let tmp_esc = escape(tmp, ' ')
++     let tmpe_esc = escape(tmpe, ' ')
++   endif
+    " write the just read lines to a temp file "'[,']w tmp.gz"
+!   execute "silent '[,']w " . tmpe_esc
+    " uncompress the temp file: call system("gzip -dn tmp.gz")
+    call system(a:cmd . " " . s:escape(tmpe))
+    if !filereadable(tmp)
+***************
+*** 95,106 ****
+      setlocal nobin
+      if exists(":lockmarks")
+        if empty
+! 	execute "silent lockmarks " . l . "r ++edit " . tmp
+        else
+! 	execute "silent lockmarks " . l . "r " . tmp
+        endif
+      else
+!       execute "silent " . l . "r " . tmp
+      endif
+  
+      " if buffer became empty, delete trailing blank line
+--- 102,113 ----
+      setlocal nobin
+      if exists(":lockmarks")
+        if empty
+! 	execute "silent lockmarks " . l . "r ++edit " . tmp_esc
+        else
+! 	execute "silent lockmarks " . l . "r " . tmp_esc
+        endif
+      else
+!       execute "silent " . l . "r " . tmp_esc
+      endif
+  
+      " if buffer became empty, delete trailing blank line
+***************
+*** 110,117 ****
+      endif
+      " delete the temp file and the used buffers
+      call delete(tmp)
+!     silent! exe "bwipe " . tmp
+!     silent! exe "bwipe " . tmpe
+    endif
+  
+    " Restore saved option values.
+--- 117,124 ----
+      endif
+      " delete the temp file and the used buffers
+      call delete(tmp)
+!     silent! exe "bwipe " . tmp_esc
+!     silent! exe "bwipe " . tmpe_esc
+    endif
+  
+    " Restore saved option values.
+***************
+*** 124,133 ****
+  
<<Diff was trimmed, longer than 597 lines>>


More information about the pld-cvs-commit mailing list