r409 - trunk/vim/debian/patches

James Vega jamessan-guest at costa.debian.org
Fri Nov 18 15:52:18 UTC 2005


Author: jamessan-guest
Date: 2005-11-18 15:52:18 +0000 (Fri, 18 Nov 2005)
New Revision: 409

Modified:
   trunk/vim/debian/patches/304_memline.c.diff
Log:
Updated memline.c patch to close #336560.


Modified: trunk/vim/debian/patches/304_memline.c.diff
===================================================================
--- trunk/vim/debian/patches/304_memline.c.diff	2005-11-11 19:36:56 UTC (rev 408)
+++ trunk/vim/debian/patches/304_memline.c.diff	2005-11-18 15:52:18 UTC (rev 409)
@@ -1,33 +1,72 @@
 diff -urN vim64/src/memline.c vim64.new/src/memline.c
---- vim64/src/memline.c	2005-02-17 11:02:53.000000000 +0100
-+++ vim64.new/src/memline.c	2005-10-17 12:04:36.000000000 +0200
-@@ -3251,6 +3251,25 @@
+--- vim64/src/memline.c	2005-02-17 05:02:53.000000000 -0500
++++ vim64.new/src/memline.c	2005-11-18 09:18:01.000000000 -0500
+@@ -3251,6 +3251,64 @@
      }
  }
  
-+    void
++    int
 +resolvesymlink(fname, buf, bufsiz)
 +    char_u	*fname, *buf;
 +    size_t	bufsiz;
 +{
 +    char_u	tmp[PATH_MAX];
++    int ret;
 +
 +    if (fname == NULL)
-+	return;
-+    if (readlink((char *) fname, (char *) buf, bufsiz) == -1)
-+	STRCPY(buf, fname); /* not a symlink: return fname unmodified */
-+    else
-+    {	/* symlink: recursively expand */
-+	STRCPY(tmp, buf);
-+	while (readlink((char *) tmp, (char *) buf, bufsiz) != -1)
-+	    STRCPY(tmp, buf);
-+    }
++	return 0;
++    STRCPY(tmp, fname);
++    do
++    {
++	ret = readlink((char *) tmp, (char *) buf, bufsiz);
++	if (ret == -1)
++	{
++	    if (errno == EINVAL)  /* found non-symlink */
++		STRCPY(buf, tmp);
++	    else
++		return -1;
++	}
++	else
++	{
++	    /*
++	     * check whether the symlink is relative or absolute.
++	     * If it's relative, build a new path based on the directory
++	     * portion of the filename (if any) and the path the symlink
++	     * points to.
++	     */
++	    if (!mch_isFullName(buf))
++	    {
++		char_u *p, *dir;
++		p = tmp + STRLEN(tmp) - 1;
++		while (!vim_ispathsep(*p) && (p >= tmp))
++		    --p;
++		if (p != tmp)
++		{
++		    p = vim_strnsave(tmp, p - tmp);
++		    dir = concat_fnames(p, buf, TRUE);
++		    STRNCPY(tmp, dir, PATH_MAX);
++		    vim_free(dir);
++		    vim_free(p);
++		}
++	    }
++	    else
++		STRNCPY(tmp, buf, PATH_MAX);
++	}
++    } while (ret != -1);
++
++    /*
++     * Try to resolve the full name of the file so the swapfile name will be
++     * consistent even when opening a relative symlink from different working
++     * directories.
++     */
++    if (vim_FullName(buf, tmp, PATH_MAX, TRUE) == OK)
++	STRCPY(buf, tmp);
 +}
 +
  /*
   * make swap file name out of the file name and a directory name
   */
-@@ -3260,6 +3279,8 @@
+@@ -3260,6 +3318,8 @@
      char_u	*dir_name;
  {
      char_u	*r, *s;
@@ -36,19 +75,20 @@
  
  #if defined(UNIX) || defined(WIN3264)  /* Need _very_ long file names */
      s = dir_name + STRLEN(dir_name);
-@@ -3275,6 +3296,11 @@
+@@ -3275,6 +3335,12 @@
      }
  #endif
  
 +    if (buf->b_fname != NULL)
 +    {
 +	fname_p = fname;
-+	resolvesymlink(buf->b_fname, fname, PATH_MAX);
++	if (resolvesymlink(buf->b_fname, fname, PATH_MAX) == -1)
++	    fname_p = buf->b_fname; /* symlink resolution failed */
 +    }
      r = buf_modname(
  #ifdef SHORT_FNAME
  	    TRUE,
-@@ -3285,7 +3311,7 @@
+@@ -3285,7 +3351,7 @@
  	    /* Avoid problems if fname has special chars, eg <Wimp$Scrap> */
  	    buf->b_ffname,
  #else




More information about the pkg-vim-maintainers mailing list