Patch 8.0.1723
Problem:    Using one item array size declaration is misleading.
Solution:   Instead of using "[1]" and actually using a larger array, use
            "[]".  This is to verify that this C99 feature works for all
            compilers.
Files:      src/structs.h, src/getchar.c


*** ../vim-8.0.1722/src/structs.h       2018-04-10 15:59:04.295392601 +0200
--- src/structs.h       2018-04-16 14:45:10.504367039 +0200
***************
*** 511,517 ****
  struct buffblock
  {
      buffblock_T       *b_next;        /* pointer to next buffblock */
!     char_u    b_str[1];       /* contents (actually longer) */
  };
  
  /*
--- 511,517 ----
  struct buffblock
  {
      buffblock_T       *b_next;        /* pointer to next buffblock */
!     char_u    b_str[];        /* contents (flexible array) */
  };
  
  /*
***************
*** 519,525 ****
   */
  struct buffheader
  {
!     buffblock_T       bh_first;       /* first (dummy) block of list */
      buffblock_T       *bh_curr;       /* buffblock for appending */
      int               bh_index;       /* index for reading */
      int               bh_space;       /* space in bh_curr for appending */
--- 519,525 ----
   */
  struct buffheader
  {
!     buffblock_T       *bh_first;      /* first block of the list */
      buffblock_T       *bh_curr;       /* buffblock for appending */
      int               bh_index;       /* index for reading */
      int               bh_space;       /* space in bh_curr for appending */
*** ../vim-8.0.1722/src/getchar.c       2018-03-04 18:07:04.256592423 +0100
--- src/getchar.c       2018-04-16 14:38:22.299064897 +0200
***************
*** 40,48 ****
  
  #define MINIMAL_SIZE 20                       /* minimal size for b_str */
  
! static buffheader_T redobuff = {{NULL, {NUL}}, NULL, 0, 0};
! static buffheader_T old_redobuff = {{NULL, {NUL}}, NULL, 0, 0};
! static buffheader_T recordbuff = {{NULL, {NUL}}, NULL, 0, 0};
  
  static int typeahead_char = 0;                /* typeahead char that's not 
flushed */
  
--- 40,48 ----
  
  #define MINIMAL_SIZE 20                       /* minimal size for b_str */
  
! static buffheader_T redobuff = {NULL, NULL, 0, 0};
! static buffheader_T old_redobuff = {NULL, NULL, 0, 0};
! static buffheader_T recordbuff = {NULL, NULL, 0, 0};
  
  static int typeahead_char = 0;                /* typeahead char that's not 
flushed */
  
***************
*** 138,149 ****
  {
      buffblock_T       *p, *np;
  
!     for (p = buf->bh_first.b_next; p != NULL; p = np)
      {
        np = p->b_next;
        vim_free(p);
      }
!     buf->bh_first.b_next = NULL;
  }
  
  /*
--- 138,150 ----
  {
      buffblock_T       *p, *np;
  
!     for (p = buf->bh_first; p != NULL; p = np)
      {
        np = p->b_next;
        vim_free(p);
      }
!     buf->bh_first = NULL;
!     buf->bh_curr = NULL;
  }
  
  /*
***************
*** 159,174 ****
      char_u        *p = NULL;
      char_u        *p2;
      char_u        *str;
!     buffblock_T *bp;
  
      /* compute the total length of the string */
!     for (bp = buffer->bh_first.b_next; bp != NULL; bp = bp->b_next)
        count += (long_u)STRLEN(bp->b_str);
  
      if ((count || dozero) && (p = lalloc(count + 1, TRUE)) != NULL)
      {
        p2 = p;
!       for (bp = buffer->bh_first.b_next; bp != NULL; bp = bp->b_next)
            for (str = bp->b_str; *str; )
                *p2++ = *str++;
        *p2 = NUL;
--- 160,175 ----
      char_u        *p = NULL;
      char_u        *p2;
      char_u        *str;
!     buffblock_T           *bp;
  
      /* compute the total length of the string */
!     for (bp = buffer->bh_first; bp != NULL; bp = bp->b_next)
        count += (long_u)STRLEN(bp->b_str);
  
      if ((count || dozero) && (p = lalloc(count + 1, TRUE)) != NULL)
      {
        p2 = p;
!       for (bp = buffer->bh_first; bp != NULL; bp = bp->b_next)
            for (str = bp->b_str; *str; )
                *p2++ = *str++;
        *p2 = NUL;
***************
*** 232,248 ****
      long              slen)   /* length of "s" or -1 */
  {
      buffblock_T *p;
!     long_u        len;
  
      if (slen < 0)
        slen = (long)STRLEN(s);
      if (slen == 0)                            /* don't add empty strings */
        return;
  
!     if (buf->bh_first.b_next == NULL) /* first add to list */
      {
        buf->bh_space = 0;
!       buf->bh_curr = &(buf->bh_first);
      }
      else if (buf->bh_curr == NULL)    /* buffer has already been read */
      {
--- 233,249 ----
      long              slen)   /* length of "s" or -1 */
  {
      buffblock_T *p;
!     long_u    len;
  
      if (slen < 0)
        slen = (long)STRLEN(s);
      if (slen == 0)                            /* don't add empty strings */
        return;
  
!     if (buf->bh_first == NULL)        /* first add to list */
      {
        buf->bh_space = 0;
!       buf->bh_curr = NULL;
      }
      else if (buf->bh_curr == NULL)    /* buffer has already been read */
      {
***************
*** 250,258 ****
        return;
      }
      else if (buf->bh_index != 0)
!       mch_memmove(buf->bh_first.b_next->b_str,
!                   buf->bh_first.b_next->b_str + buf->bh_index,
!                   STRLEN(buf->bh_first.b_next->b_str + buf->bh_index) + 1);
      buf->bh_index = 0;
  
      if (buf->bh_space >= (int)slen)
--- 251,259 ----
        return;
      }
      else if (buf->bh_index != 0)
!       mch_memmove(buf->bh_first->b_str,
!                   buf->bh_first->b_str + buf->bh_index,
!                   STRLEN(buf->bh_first->b_str + buf->bh_index) + 1);
      buf->bh_index = 0;
  
      if (buf->bh_space >= (int)slen)
***************
*** 267,282 ****
            len = MINIMAL_SIZE;
        else
            len = slen;
!       p = (buffblock_T *)lalloc((long_u)(sizeof(buffblock_T) + len),
!                                                                       TRUE);
        if (p == NULL)
            return; /* no space, just forget it */
        buf->bh_space = (int)(len - slen);
        vim_strncpy(p->b_str, s, (size_t)slen);
  
!       p->b_next = buf->bh_curr->b_next;
!       buf->bh_curr->b_next = p;
!       buf->bh_curr = p;
      }
      return;
  }
--- 268,292 ----
            len = MINIMAL_SIZE;
        else
            len = slen;
!       p = (buffblock_T *)lalloc((long_u)(sizeof(buffblock_T) + len + 1),
!                                                                        TRUE);
        if (p == NULL)
            return; /* no space, just forget it */
        buf->bh_space = (int)(len - slen);
        vim_strncpy(p->b_str, s, (size_t)slen);
  
!       if (buf->bh_curr == NULL)
!       {
!           p->b_next = NULL;
!           buf->bh_first = p;
!           buf->bh_curr = p;
!       }
!       else
!       {
!           p->b_next = buf->bh_curr->b_next;
!           buf->bh_curr->b_next = p;
!           buf->bh_curr = p;
!       }
      }
      return;
  }
***************
*** 348,357 ****
  }
  
  /* First read ahead buffer. Used for translated commands. */
! static buffheader_T readbuf1 = {{NULL, {NUL}}, NULL, 0, 0};
  
  /* Second read ahead buffer. Used for redo. */
! static buffheader_T readbuf2 = {{NULL, {NUL}}, NULL, 0, 0};
  
  /*
   * Get one byte from the read buffers.  Use readbuf1 one first, use readbuf2
--- 358,367 ----
  }
  
  /* First read ahead buffer. Used for translated commands. */
! static buffheader_T readbuf1 = {NULL, NULL, 0, 0};
  
  /* Second read ahead buffer. Used for redo. */
! static buffheader_T readbuf2 = {NULL, NULL, 0, 0};
  
  /*
   * Get one byte from the read buffers.  Use readbuf1 one first, use readbuf2
***************
*** 376,392 ****
      char_u    c;
      buffblock_T       *curr;
  
!     if (buf->bh_first.b_next == NULL)  /* buffer is empty */
        return NUL;
  
!     curr = buf->bh_first.b_next;
      c = curr->b_str[buf->bh_index];
  
      if (advance)
      {
        if (curr->b_str[++buf->bh_index] == NUL)
        {
!           buf->bh_first.b_next = curr->b_next;
            vim_free(curr);
            buf->bh_index = 0;
        }
--- 386,402 ----
      char_u    c;
      buffblock_T       *curr;
  
!     if (buf->bh_first == NULL)  /* buffer is empty */
        return NUL;
  
!     curr = buf->bh_first;
      c = curr->b_str[buf->bh_index];
  
      if (advance)
      {
        if (curr->b_str[++buf->bh_index] == NUL)
        {
!           buf->bh_first = curr->b_next;
            vim_free(curr);
            buf->bh_index = 0;
        }
***************
*** 400,413 ****
      static void
  start_stuff(void)
  {
!     if (readbuf1.bh_first.b_next != NULL)
      {
!       readbuf1.bh_curr = &(readbuf1.bh_first);
        readbuf1.bh_space = 0;
      }
!     if (readbuf2.bh_first.b_next != NULL)
      {
!       readbuf2.bh_curr = &(readbuf2.bh_first);
        readbuf2.bh_space = 0;
      }
  }
--- 410,423 ----
      static void
  start_stuff(void)
  {
!     if (readbuf1.bh_first != NULL)
      {
!       readbuf1.bh_curr = readbuf1.bh_first;
        readbuf1.bh_space = 0;
      }
!     if (readbuf2.bh_first != NULL)
      {
!       readbuf2.bh_curr = readbuf2.bh_first;
        readbuf2.bh_space = 0;
      }
  }
***************
*** 418,425 ****
      int
  stuff_empty(void)
  {
!     return (readbuf1.bh_first.b_next == NULL
!        && readbuf2.bh_first.b_next == NULL);
  }
  
  /*
--- 428,435 ----
      int
  stuff_empty(void)
  {
!     return (readbuf1.bh_first == NULL
!        && readbuf2.bh_first == NULL);
  }
  
  /*
***************
*** 429,435 ****
      int
  readbuf1_empty(void)
  {
!     return (readbuf1.bh_first.b_next == NULL);
  }
  
  /*
--- 439,445 ----
      int
  readbuf1_empty(void)
  {
!     return (readbuf1.bh_first == NULL);
  }
  
  /*
***************
*** 494,500 ****
      {
        free_buff(&old_redobuff);
        old_redobuff = redobuff;
!       redobuff.bh_first.b_next = NULL;
      }
  }
  
--- 504,510 ----
      {
        free_buff(&old_redobuff);
        old_redobuff = redobuff;
!       redobuff.bh_first = NULL;
      }
  }
  
***************
*** 509,515 ****
      {
        free_buff(&redobuff);
        redobuff = old_redobuff;
!       old_redobuff.bh_first.b_next = NULL;
        start_stuff();
        while (read_readbuffers(TRUE) != NUL)
            ;
--- 519,525 ----
      {
        free_buff(&redobuff);
        redobuff = old_redobuff;
!       old_redobuff.bh_first = NULL;
        start_stuff();
        while (read_readbuffers(TRUE) != NUL)
            ;
***************
*** 526,534 ****
      char_u    *s;
  
      save_redo->sr_redobuff = redobuff;
!     redobuff.bh_first.b_next = NULL;
      save_redo->sr_old_redobuff = old_redobuff;
!     old_redobuff.bh_first.b_next = NULL;
  
      /* Make a copy, so that ":normal ." in a function works. */
      s = get_buffcont(&save_redo->sr_redobuff, FALSE);
--- 536,544 ----
      char_u    *s;
  
      save_redo->sr_redobuff = redobuff;
!     redobuff.bh_first = NULL;
      save_redo->sr_old_redobuff = old_redobuff;
!     old_redobuff.bh_first = NULL;
  
      /* Make a copy, so that ":normal ." in a function works. */
      s = get_buffcont(&save_redo->sr_redobuff, FALSE);
***************
*** 747,755 ****
      if (init)
      {
        if (old_redo)
!           bp = old_redobuff.bh_first.b_next;
        else
!           bp = redobuff.bh_first.b_next;
        if (bp == NULL)
            return FAIL;
        p = bp->b_str;
--- 757,765 ----
      if (init)
      {
        if (old_redo)
!           bp = old_redobuff.bh_first;
        else
!           bp = redobuff.bh_first;
        if (bp == NULL)
            return FAIL;
        p = bp->b_str;
***************
*** 1372,1380 ****
      old_char = -1;
  
      tp->save_readbuf1 = readbuf1;
!     readbuf1.bh_first.b_next = NULL;
      tp->save_readbuf2 = readbuf2;
!     readbuf2.bh_first.b_next = NULL;
  # ifdef USE_INPUT_BUF
      tp->save_inputbuf = get_input_buf();
  # endif
--- 1382,1390 ----
      old_char = -1;
  
      tp->save_readbuf1 = readbuf1;
!     readbuf1.bh_first = NULL;
      tp->save_readbuf2 = readbuf2;
!     readbuf2.bh_first = NULL;
  # ifdef USE_INPUT_BUF
      tp->save_inputbuf = get_input_buf();
  # endif
*** ../vim-8.0.1722/src/version.c       2018-04-15 23:45:12.982388377 +0200
--- src/version.c       2018-04-16 14:44:26.152663276 +0200
***************
*** 764,765 ****
--- 764,767 ----
  {   /* Add new patch number below this line */
+ /**/
+     1723,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
195. Your cat has its own home page.

 /// Bram Moolenaar -- [email protected] -- 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    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui