Search the web
Sign In
New User? Sign Up
vimdev · Vim (Vi IMproved) text editor developers list
? Already a member? Sign in to Yahoo!

Yahoo! Groups Tips

Did you know...
Hear how Yahoo! Groups has changed the lives of others. Take me there.

Best of Y! Groups

   Check them out and nominate your group.
Having problems with message search? Fill out this form to ensure your group is one of the first to be migrated to the new message search system.

Messages

  Messages Help
Advanced
Patch 7.2.228   Message List  
Reply | Forward Message #54551 of 55368 |


Patch 7.2.228
Problem: Cscope is limited to 8 connections.
Solution: Allocated the connection array to handle any number of
connections. (Dominique Pelle)
Files: runtime/doc/if_cscop.txt, src/if_cscope.h, src/if_cscope.c


*** ../vim-7.2.227/runtime/doc/if_cscop.txt 2009-03-18 14:30:46.000000000 +0100
--- runtime/doc/if_cscop.txt 2009-07-09 15:40:48.000000000 +0200
***************
*** 355,367 ****
The DJGPP-built version from http://cscope.sourceforge.net is known to not
work with Vim.

! There are a couple of hard-coded limitations:
!
! 1. The maximum number of cscope connections allowed is 8. Do you
! really need more?
!
! 2. Doing a |:tjump| when |:cstag| searches the tag files is not
! configurable (e.g., you can't do a tselect instead).

==============================================================================
6. Suggested usage *cscope-suggestions*
--- 355,362 ----
The DJGPP-built version from http://cscope.sourceforge.net is known to not
work with Vim.

! Hard-coded limitation: doing a |:tjump| when |:cstag| searches the tag files
! is not configurable (e.g., you can't do a tselect instead).

==============================================================================
6. Suggested usage *cscope-suggestions*
*** ../vim-7.2.227/src/if_cscope.h 2008-08-25 04:35:13.000000000 +0200
--- src/if_cscope.h 2009-07-09 15:39:32.000000000 +0200
***************
*** 25,31 ****

#define CSCOPE_SUCCESS 0
#define CSCOPE_FAILURE -1
- #define CSCOPE_MAX_CONNECTIONS 8 /* you actually need more? */

#define CSCOPE_DBFILE "cscope.out"
#define CSCOPE_PROMPT ">> "
--- 25,30 ----
*** ../vim-7.2.227/src/if_cscope.c 2009-05-16 17:29:37.000000000 +0200
--- src/if_cscope.c 2009-07-09 15:39:32.000000000 +0200
***************
*** 46,52 ****
static int cs_find __ARGS((exarg_T *eap));
static int cs_find_common __ARGS((char *opt, char *pat, int, int, int));
static int cs_help __ARGS((exarg_T *eap));
- static void cs_init __ARGS((void));
static void clear_csinfo __ARGS((int i));
static int cs_insert_filelist __ARGS((char *, char *, char *,
struct stat *));
--- 46,51 ----
***************
*** 66,72 ****
static int cs_show __ARGS((exarg_T *eap));


! static csinfo_T csinfo[CSCOPE_MAX_CONNECTIONS];
static int eap_arg_len; /* length of eap->arg, set in
cs_lookup_cmd() */
static cscmd_T cs_cmds[] =
--- 65,74 ----
static int cs_show __ARGS((exarg_T *eap));


! static csinfo_T * csinfo = NULL;
! static int csinfo_size = 0; /* number of items allocated in
! csinfo[] */
!
static int eap_arg_len; /* length of eap->arg, set in
cs_lookup_cmd() */
static cscmd_T cs_cmds[] =
***************
*** 144,166 ****
}
case EXP_CSCOPE_KILL:
{
! static char_u connection[2];

/* ":cscope kill" accepts connection numbers or partial names of
* the pathname of the cscope database as argument. Only complete
* with connection numbers. -1 can also be used to kill all
* connections. */
! for (i = 0, current_idx = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
{
if (csinfo[i].fname == NULL)
continue;
if (current_idx++ == idx)
{
! /* Connection number fits in one character since
! * CSCOPE_MAX_CONNECTIONS is < 10 */
! connection[0] = i + '0';
! connection[1] = NUL;
! return connection;
}
}
return (current_idx == idx && idx > 0) ? (char_u *)"-1" : NULL;
--- 146,165 ----
}
case EXP_CSCOPE_KILL:
{
! static char connection[5];

/* ":cscope kill" accepts connection numbers or partial names of
* the pathname of the cscope database as argument. Only complete
* with connection numbers. -1 can also be used to kill all
* connections. */
! for (i = 0, current_idx = 0; i < csinfo_size; i++)
{
if (csinfo[i].fname == NULL)
continue;
if (current_idx++ == idx)
{
! vim_snprintf(connection, sizeof(connection), "%d", i);
! return (char_u *)connection;
}
}
return (current_idx == idx && idx > 0) ? (char_u *)"-1" : NULL;
***************
*** 223,229 ****
{
cscmd_T *cmdp;

- cs_init();
if ((cmdp = cs_lookup_cmd(eap)) == NULL)
{
cs_help(eap);
--- 222,227 ----
***************
*** 284,291 ****
{
int ret = FALSE;

- cs_init();
-
if (*eap->arg == NUL)
{
(void)EMSG(_("E562: Usage: cstag <ident>"));
--- 282,287 ----
***************
*** 441,447 ****
if (num < 0 || num > 4 || (num > 0 && !dbpath))
return FALSE;

! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
{
if (!csinfo[i].fname)
continue;
--- 437,443 ----
if (num < 0 || num > 4 || (num > 0 && !dbpath))
return FALSE;

! for (i = 0; i < csinfo_size; i++)
{
if (!csinfo[i].fname)
continue;
***************
*** 684,690 ****
short i;
short cnt = 0;

! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
{
if (csinfo[i].fname != NULL)
cnt++;
--- 680,686 ----
short i;
short cnt = 0;

! for (i = 0; i < csinfo_size; i++)
{
if (csinfo[i].fname != NULL)
cnt++;
***************
*** 1112,1118 ****
{
int i;
char *cmd;
! int nummatches[CSCOPE_MAX_CONNECTIONS], totmatches;
#ifdef FEAT_QUICKFIX
char cmdletter;
char *qfpos;
--- 1108,1115 ----
{
int i;
char *cmd;
! int *nummatches;
! int totmatches;
#ifdef FEAT_QUICKFIX
char cmdletter;
char *qfpos;
***************
*** 1123,1135 ****
if (cmd == NULL)
return FALSE;

/* send query to all open connections, then count the total number
* of matches so we can alloc matchesp all in one swell foop
*/
! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
nummatches[i] = 0;
totmatches = 0;
! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
{
if (csinfo[i].fname == NULL || csinfo[i].to_fp == NULL)
continue;
--- 1120,1136 ----
if (cmd == NULL)
return FALSE;

+ nummatches = (int *)alloc(sizeof(int)*csinfo_size);
+ if (nummatches == NULL)
+ return FALSE;
+
/* send query to all open connections, then count the total number
* of matches so we can alloc matchesp all in one swell foop
*/
! for (i = 0; i < csinfo_size; i++)
nummatches[i] = 0;
totmatches = 0;
! for (i = 0; i < csinfo_size; i++)
{
if (csinfo[i].fname == NULL || csinfo[i].to_fp == NULL)
continue;
***************
*** 1154,1160 ****
--- 1155,1164 ----
char *buf;

if (!verbose)
+ {
+ vim_free(nummatches);
return FALSE;
+ }

buf = (char *)alloc((unsigned)(strlen(opt) + strlen(pat) + strlen(nf)));
if (buf == NULL)
***************
*** 1165,1170 ****
--- 1169,1175 ----
(void)EMSG(buf);
vim_free(buf);
}
+ vim_free(nummatches);
return FALSE;
}

***************
*** 1217,1222 ****
--- 1222,1228 ----
(void)EMSG(buf);
vim_free(buf);
}
+ vim_free(nummatches);
return FALSE;
}
}
***************
*** 1264,1269 ****
--- 1270,1276 ----
}
mch_remove(tmp);
vim_free(tmp);
+ vim_free(nummatches);
return TRUE;
}
else
***************
*** 1275,1280 ****
--- 1282,1288 ----
/* read output */
cs_fill_results((char *)pat, totmatches, nummatches, &matches,
&contexts, &matched);
+ vim_free(nummatches);
if (matches == NULL)
return FALSE;

***************
*** 1328,1353 ****
} /* cs_help */


- /*
- * PRIVATE: cs_init
- *
- * initialize cscope structure if not already
- */
- static void
- cs_init()
- {
- short i;
- static int init_already = FALSE;
-
- if (init_already)
- return;
-
- for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
- clear_csinfo(i);
-
- init_already = TRUE;
- } /* cs_init */
-
static void
clear_csinfo(i)
int i;
--- 1336,1341 ----
***************
*** 1444,1450 ****
#endif

i = -1; /* can be set to the index of an empty item in csinfo */
! for (j = 0; j < CSCOPE_MAX_CONNECTIONS; j++)
{
if (csinfo[j].fname != NULL
#if defined(UNIX)
--- 1432,1438 ----
#endif

i = -1; /* can be set to the index of an empty item in csinfo */
! for (j = 0; j < csinfo_size; j++)
{
if (csinfo[j].fname != NULL
#if defined(UNIX)
***************
*** 1471,1479 ****

if (i == -1)
{
! if (p_csverbose)
! (void)EMSG(_("E569: maximum number of cscope connections reached"));
! return -1;
}

if ((csinfo[i].fname = (char *)alloc((unsigned)strlen(fname)+1)) == NULL)
--- 1459,1483 ----

if (i == -1)
{
! i = csinfo_size;
! if (csinfo_size == 0)
! {
! /* First time allocation: allocate only 1 connection. It should
! * be enough for most users. If more is needed, csinfo will be
! * reallocated. */
! csinfo_size = 1;
! csinfo = (csinfo_T *)alloc_clear(sizeof(csinfo_T));
! }
! else
! {
! /* Reallocate space for more connections. */
! csinfo_size *= 2;
! csinfo = vim_realloc(csinfo, sizeof(csinfo_T)*csinfo_size);
! }
! if (csinfo == NULL)
! return -1;
! for (j = csinfo_size/2; j < csinfo_size; j++)
! clear_csinfo(j);
}

if ((csinfo[i].fname = (char *)alloc((unsigned)strlen(fname)+1)) == NULL)
***************
*** 1580,1594 ****
/* It must be part of a name. We will try to find a match
* within all the names in the csinfo data structure
*/
! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
{
if (csinfo[i].fname != NULL && strstr(csinfo[i].fname, stok))
break;
}
}

! if ((i >= CSCOPE_MAX_CONNECTIONS || i < -1 || csinfo[i].fname == NULL)
! && i != -1)
{
if (p_csverbose)
(void)EMSG2(_("E261: cscope connection %s not found"), stok);
--- 1584,1597 ----
/* It must be part of a name. We will try to find a match
* within all the names in the csinfo data structure
*/
! for (i = 0; i < csinfo_size; i++)
{
if (csinfo[i].fname != NULL && strstr(csinfo[i].fname, stok))
break;
}
}

! if ((i != -1) && (i >= csinfo_size || i < -1 || csinfo[i].fname == NULL))
{
if (p_csverbose)
(void)EMSG2(_("E261: cscope connection %s not found"), stok);
***************
*** 1597,1603 ****
{
if (i == -1)
{
! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
{
if (csinfo[i].fname)
cs_kill_execute(i, csinfo[i].fname);
--- 1600,1606 ----
{
if (i == -1)
{
! for (i = 0; i < csinfo_size; i++)
{
if (csinfo[i].fname)
cs_kill_execute(i, csinfo[i].fname);
***************
*** 1857,1863 ****
if (buf == NULL)
return;

! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
{
if (nummatches_a[i] < 1)
continue;
--- 1860,1866 ----
if (buf == NULL)
return;

! for (i = 0; i < csinfo_size; i++)
{
if (nummatches_a[i] < 1)
continue;
***************
*** 1929,1935 ****
if ((cntxts = (char **)alloc(sizeof(char *) * totmatches)) == NULL)
goto parse_out;

! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
{
if (nummatches_a[i] < 1)
continue;
--- 1932,1938 ----
if ((cntxts = (char **)alloc(sizeof(char *) * totmatches)) == NULL)
goto parse_out;

! for (i = 0; i < csinfo_size; i++)
{
if (nummatches_a[i] < 1)
continue;
***************
*** 2383,2392 ****
int i;
char buf[20]; /* for sprintf " (#%d)" */

/* malloc our db and ppath list */
! dblist = (char **)alloc(CSCOPE_MAX_CONNECTIONS * sizeof(char *));
! pplist = (char **)alloc(CSCOPE_MAX_CONNECTIONS * sizeof(char *));
! fllist = (char **)alloc(CSCOPE_MAX_CONNECTIONS * sizeof(char *));
if (dblist == NULL || pplist == NULL || fllist == NULL)
{
vim_free(dblist);
--- 2386,2398 ----
int i;
char buf[20]; /* for sprintf " (#%d)" */

+ if (csinfo_size == 0)
+ return CSCOPE_SUCCESS;
+
/* malloc our db and ppath list */
! dblist = (char **)alloc(csinfo_size * sizeof(char *));
! pplist = (char **)alloc(csinfo_size * sizeof(char *));
! fllist = (char **)alloc(csinfo_size * sizeof(char *));
if (dblist == NULL || pplist == NULL || fllist == NULL)
{
vim_free(dblist);
***************
*** 2395,2401 ****
return CSCOPE_FAILURE;
}

! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
{
dblist[i] = csinfo[i].fname;
pplist[i] = csinfo[i].ppath;
--- 2401,2407 ----
return CSCOPE_FAILURE;
}

! for (i = 0; i < csinfo_size; i++)
{
dblist[i] = csinfo[i].fname;
pplist[i] = csinfo[i].ppath;
***************
*** 2405,2411 ****
}

/* rebuild the cscope connection list */
! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
{
if (dblist[i] != NULL)
{
--- 2411,2417 ----
}

/* rebuild the cscope connection list */
! for (i = 0; i < csinfo_size; i++)
{
if (dblist[i] != NULL)
{
***************
*** 2502,2508 ****
MSG_PUTS_ATTR(
_(" # pid database name prepend path\n"),
hl_attr(HLF_T));
! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
{
if (csinfo[i].fname == NULL)
continue;
--- 2508,2514 ----
MSG_PUTS_ATTR(
_(" # pid database name prepend path\n"),
hl_attr(HLF_T));
! for (i = 0; i < csinfo_size; i++)
{
if (csinfo[i].fname == NULL)
continue;
***************
*** 2531,2538 ****
{
int i;

! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
cs_release_csp(i, TRUE);
}

#endif /* FEAT_CSCOPE */
--- 2537,2546 ----
{
int i;

! for (i = 0; i < csinfo_size; i++)
cs_release_csp(i, TRUE);
+ vim_free(csinfo);
+ csinfo_size = 0;
}

#endif /* FEAT_CSCOPE */
*** ../vim-7.2.227/src/version.c 2009-07-09 20:13:59.000000000 +0200
--- src/version.c 2009-07-09 21:21:48.000000000 +0200
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 228,
/**/

--
hundred-and-one symptoms of being an internet addict:
84. Books in your bookcase bear the names Bongo, WinSock and Inside OLE

/// Bram Moolenaar -- Bram@... -- 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 ///

--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---




Thu Jul 9, 2009 7:22 pm

Bram@...
Send Email Send Email

Forward
Message #54551 of 55368 |
Expand Messages Author Sort by Date

Patch 7.2.228 Problem: Cscope is limited to 8 connections. Solution: Allocated the connection array to handle any number of connections. (Dominique Pelle)...
Bram Moolenaar
Bram@...
Send Email
Jul 9, 2009
7:23 pm

... This patch isn't in CVS, was it missed? Chris -- Chris Sutcliffe http://emergedesktop.org --~--~---------~--~----~------------~-------~--~----~ You...
Chris Sutcliffe
ir0nh34d@...
Send Email
Jul 9, 2009
11:00 pm

... The checkin script was hanging. I restarted it. -- If your nose runs, and your feet smell, you might be upside down. /// Bram Moolenaar --...
Bram Moolenaar
Bram@...
Send Email
Jul 10, 2009
1:37 pm
Advanced

Copyright © 2009 Yahoo! Inc. All rights reserved.
Privacy Policy - Terms of Service - Guidelines - Help