summaryrefslogtreecommitdiffstats
path: root/source/ap/vim/patches/7.3.210
blob: f02fe6fe68cc0c8a97c6e4d3cc6de0dbe8a7d4f9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
To: vim_dev@googlegroups.com
Subject: Patch 7.3.210
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
------------

Patch 7.3.210
Problem:    Can't always find the file when using cscope.
Solution:   Add the 'cscoperelative' option. (Raghavendra D Prabhu)
Files:      runtime/doc/if_cscop.txt, runtime/doc/options.txt,
            src/if_cscope.c, src/options.c, src/options.h


*** ../mercurial/vim73/runtime/doc/if_cscop.txt	2010-09-30 21:38:08.000000000 +0200
--- runtime/doc/if_cscop.txt	2011-06-12 19:54:26.000000000 +0200
***************
*** 271,276 ****
--- 271,285 ----
  	:set cst
  	:set nocst
  <
+ 							*cscoperelative* *csre*
+ If 'cscoperelative' set, then in absence of a prefix given to cscope (prefx
+ is the argument to -P option of cscope), basename of cscope.out location
+ (usually the project root directory) will be used as the prefix to construt
+ absolute path.The default is off. Note: This option is only effective when
+ cscope (cscopeprg) is initialized without a prefix path (-P). Examples: >
+ 	:set csre
+ 	:set nocsre
+ <
  							*cscopetagorder* *csto*
  The value of 'csto' determines the order in which |:cstag| performs a search.
  If 'csto' is set to zero, cscope database(s) are searched first, followed
*** ../mercurial/vim73/runtime/doc/options.txt	2011-05-19 12:22:41.000000000 +0200
--- runtime/doc/options.txt	2011-06-12 20:00:10.000000000 +0200
***************
*** 2209,2214 ****
--- 2209,2224 ----
  	Specifies whether to use quickfix window to show cscope results.
  	See |cscopequickfix|.
  
+ 						*'cscoperelative'* *'csre'*
+ 'cscoperelative' 'csre' boolean (default off)
+ 			global
+ 			{not available when compiled without the |+cscope|
+ 			feature}
+ 			{not in Vi}
+ 	In the absence of a prefix (-P) for cscope. setting this option enables
+ 	to use the basename of cscope.out path as the prefix.
+ 	See |cscoperelative|.
+ 
  				*'cscopetag'* *'cst'* *'nocscopetag'* *'nocst'*
  'cscopetag' 'cst'	boolean (default off)
  			global
*** ../mercurial/vim73/src/if_cscope.c	2011-05-05 16:41:19.000000000 +0200
--- src/if_cscope.c	2011-06-12 20:25:17.000000000 +0200
***************
*** 2471,2512 ****
   */
      static char *
  cs_resolve_file(i, name)
!     int i;
      char *name;
  {
!     char *fullname;
!     int len;
  
      /*
!      * ppath is freed when we destroy the cscope connection.
!      * fullname is freed after cs_make_vim_style_matches, after it's been
!      * copied into the tag buffer used by vim
       */
      len = (int)(strlen(name) + 2);
      if (csinfo[i].ppath != NULL)
  	len += (int)strlen(csinfo[i].ppath);
  
      if ((fullname = (char *)alloc(len)) == NULL)
  	return NULL;
  
!     /*
!      * note/example: this won't work if the cscope output already starts
       * "../.." and the prefix path is also "../..".  if something like this
!      * happens, you are screwed up and need to fix how you're using cscope.
!      */
!     if (csinfo[i].ppath != NULL &&
! 	(strncmp(name, csinfo[i].ppath, strlen(csinfo[i].ppath)) != 0) &&
! 	(name[0] != '/')
  #ifdef WIN32
! 	&& name[0] != '\\' && name[1] != ':'
  #endif
! 	)
  	(void)sprintf(fullname, "%s/%s", csinfo[i].ppath, name);
      else
  	(void)sprintf(fullname, "%s", name);
  
      return fullname;
! } /* cs_resolve_file */
  
  
  /*
--- 2471,2531 ----
   */
      static char *
  cs_resolve_file(i, name)
!     int  i;
      char *name;
  {
!     char	*fullname;
!     int		len;
!     char_u	*csdir = NULL;
  
      /*
!      * Ppath is freed when we destroy the cscope connection.
!      * Fullname is freed after cs_make_vim_style_matches, after it's been
!      * copied into the tag buffer used by Vim.
       */
      len = (int)(strlen(name) + 2);
      if (csinfo[i].ppath != NULL)
  	len += (int)strlen(csinfo[i].ppath);
+     else if (p_csre && csinfo[i].fname != NULL)
+     {
+ 	/* If 'cscoperelative' is set and ppath is not set, use cscope.out
+ 	 * path in path resolution. */
+ 	csdir = alloc(MAXPATHL);
+ 	if (csdir != NULL)
+ 	{
+ 	    vim_strncpy(csdir, (char_u *)csinfo[i].fname,
+ 		    gettail((char_u *)csinfo[i].fname) - 1 - (char_u *)csinfo[i].fname);
+ 	    len += (int)STRLEN(csdir);
+ 	}
+     }
  
      if ((fullname = (char *)alloc(len)) == NULL)
  	return NULL;
  
!     /* Note/example: this won't work if the cscope output already starts
       * "../.." and the prefix path is also "../..".  if something like this
!      * happens, you are screwed up and need to fix how you're using cscope. */
!     if (csinfo[i].ppath != NULL
! 	    && (strncmp(name, csinfo[i].ppath, strlen(csinfo[i].ppath)) != 0)
! 	    && (name[0] != '/')
  #ifdef WIN32
! 	    && name[0] != '\\' && name[1] != ':'
  #endif
!        )
  	(void)sprintf(fullname, "%s/%s", csinfo[i].ppath, name);
+     else if (csdir != NULL && csinfo[i].fname != NULL && STRLEN(csdir) > 0)
+     {
+ 	/* Check for csdir to be non empty to avoid empty path concatenated to
+ 	 * cscope output. TODO: avoid the unnecessary alloc/free of fullname. */
+ 	vim_free(fullname);
+ 	fullname = concat_fnames(csdir, (char_u *)name, TRUE);
+     }
      else
  	(void)sprintf(fullname, "%s", name);
  
+     vim_free(csdir);
      return fullname;
! }
  
  
  /*
*** ../vim-7.3.209/src/version.c	2011-06-12 20:36:00.000000000 +0200
--- src/version.c	2011-06-12 20:37:48.000000000 +0200
***************
*** 711,712 ****
--- 711,714 ----
  {   /* Add new patch number below this line */
+ /**/
+     210,
  /**/

-- 
Apathy Error: Don't bother striking any key.

 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///