Loading ...
Sorry, an error occurred while loading the content.

Patch 7.2.228

Expand Messages
  • Bram Moolenaar
    Patch 7.2.228 Problem: Cscope is limited to 8 connections. Solution: Allocated the connection array to handle any number of connections. (Dominique Pelle)
    Message 1 of 3 , Jul 9, 2009
    • 0 Attachment
      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
      -~----------~----~----~----~------~----~------~--~---
    • Chris Sutcliffe
      ... This patch isn t in CVS, was it missed? Chris -- Chris Sutcliffe http://emergedesktop.org --~--~---------~--~----~------------~-------~--~----~ You
      Message 2 of 3 , Jul 9, 2009
      • 0 Attachment
        > 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

        This patch isn't in CVS, was it missed?

        Chris

        --
        Chris Sutcliffe
        http://emergedesktop.org

        --~--~---------~--~----~------------~-------~--~----~
        You received this message from the "vim_dev" maillist.
        For more information, visit http://www.vim.org/maillist.php
        -~----------~----~----~----~------~----~------~--~---
      • Bram Moolenaar
        ... The checkin script was hanging. I restarted it. -- If your nose runs, and your feet smell, you might be upside down. /// Bram Moolenaar --
        Message 3 of 3 , Jul 10, 2009
        • 0 Attachment
          Chris Sutcliffe wrote:

          > > 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
          >
          > This patch isn't in CVS, was it missed?

          The checkin script was hanging. I restarted it.

          --
          If your nose runs, and your feet smell, you might be upside down.

          /// 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
          -~----------~----~----~----~------~----~------~--~---
        Your message has been successfully submitted and would be delivered to recipients shortly.