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