diff src/getchar.c @ 13726:d35b1702a1da v8.0.1735

patch 8.0.1735: flexible array member feature not supported by HP-UX commit https://github.com/vim/vim/commit/285e3358696b1bc6296e5d4c53425680ce8fbd54 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Apr 18 23:01:13 2018 +0200 patch 8.0.1735: flexible array member feature not supported by HP-UX Problem: Flexible array member feature not supported by HP-UX. (John Marriott) Solution: Do not use the flexible array member feature of C99.
author Christian Brabandt <cb@256bit.org>
date Wed, 18 Apr 2018 23:15:06 +0200
parents c3bf339a9d2d
children 9de2b25932eb
line wrap: on
line diff
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -40,9 +40,9 @@
 
 #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 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 */
 
@@ -138,13 +138,12 @@ free_buff(buffheader_T *buf)
 {
     buffblock_T	*p, *np;
 
-    for (p = buf->bh_first; p != NULL; p = np)
+    for (p = buf->bh_first.b_next; p != NULL; p = np)
     {
 	np = p->b_next;
 	vim_free(p);
     }
-    buf->bh_first = NULL;
-    buf->bh_curr = NULL;
+    buf->bh_first.b_next = NULL;
 }
 
 /*
@@ -160,16 +159,16 @@ get_buffcont(
     char_u	    *p = NULL;
     char_u	    *p2;
     char_u	    *str;
-    buffblock_T	    *bp;
+    buffblock_T *bp;
 
     /* compute the total length of the string */
-    for (bp = buffer->bh_first; bp != NULL; bp = bp->b_next)
+    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; bp != NULL; bp = bp->b_next)
+	for (bp = buffer->bh_first.b_next; bp != NULL; bp = bp->b_next)
 	    for (str = bp->b_str; *str; )
 		*p2++ = *str++;
 	*p2 = NUL;
@@ -233,17 +232,17 @@ add_buff(
     long		slen)	/* length of "s" or -1 */
 {
     buffblock_T *p;
-    long_u	len;
+    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 */
+    if (buf->bh_first.b_next == NULL)	/* first add to list */
     {
 	buf->bh_space = 0;
-	buf->bh_curr = NULL;
+	buf->bh_curr = &(buf->bh_first);
     }
     else if (buf->bh_curr == NULL)	/* buffer has already been read */
     {
@@ -251,9 +250,9 @@ add_buff(
 	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);
+	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)
@@ -268,25 +267,16 @@ add_buff(
 	    len = MINIMAL_SIZE;
 	else
 	    len = slen;
-	p = (buffblock_T *)lalloc((long_u)(sizeof(buffblock_T) + len + 1),
-									 TRUE);
+	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);
 
-	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;
-	}
+	p->b_next = buf->bh_curr->b_next;
+	buf->bh_curr->b_next = p;
+	buf->bh_curr = p;
     }
     return;
 }
@@ -358,10 +348,10 @@ add_char_buff(buffheader_T *buf, int c)
 }
 
 /* First read ahead buffer. Used for translated commands. */
-static buffheader_T readbuf1 = {NULL, NULL, 0, 0};
+static buffheader_T readbuf1 = {{NULL, {NUL}}, NULL, 0, 0};
 
 /* Second read ahead buffer. Used for redo. */
-static buffheader_T readbuf2 = {NULL, NULL, 0, 0};
+static buffheader_T readbuf2 = {{NULL, {NUL}}, NULL, 0, 0};
 
 /*
  * Get one byte from the read buffers.  Use readbuf1 one first, use readbuf2
@@ -386,17 +376,17 @@ read_readbuf(buffheader_T *buf, int adva
     char_u	c;
     buffblock_T	*curr;
 
-    if (buf->bh_first == NULL)  /* buffer is empty */
+    if (buf->bh_first.b_next == NULL)  /* buffer is empty */
 	return NUL;
 
-    curr = buf->bh_first;
+    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 = curr->b_next;
+	    buf->bh_first.b_next = curr->b_next;
 	    vim_free(curr);
 	    buf->bh_index = 0;
 	}
@@ -410,14 +400,14 @@ read_readbuf(buffheader_T *buf, int adva
     static void
 start_stuff(void)
 {
-    if (readbuf1.bh_first != NULL)
+    if (readbuf1.bh_first.b_next != NULL)
     {
-	readbuf1.bh_curr = readbuf1.bh_first;
+	readbuf1.bh_curr = &(readbuf1.bh_first);
 	readbuf1.bh_space = 0;
     }
-    if (readbuf2.bh_first != NULL)
+    if (readbuf2.bh_first.b_next != NULL)
     {
-	readbuf2.bh_curr = readbuf2.bh_first;
+	readbuf2.bh_curr = &(readbuf2.bh_first);
 	readbuf2.bh_space = 0;
     }
 }
@@ -428,8 +418,8 @@ start_stuff(void)
     int
 stuff_empty(void)
 {
-    return (readbuf1.bh_first == NULL
-	 && readbuf2.bh_first == NULL);
+    return (readbuf1.bh_first.b_next == NULL
+	 && readbuf2.bh_first.b_next == NULL);
 }
 
 /*
@@ -439,7 +429,7 @@ stuff_empty(void)
     int
 readbuf1_empty(void)
 {
-    return (readbuf1.bh_first == NULL);
+    return (readbuf1.bh_first.b_next == NULL);
 }
 
 /*
@@ -504,7 +494,7 @@ ResetRedobuff(void)
     {
 	free_buff(&old_redobuff);
 	old_redobuff = redobuff;
-	redobuff.bh_first = NULL;
+	redobuff.bh_first.b_next = NULL;
     }
 }
 
@@ -519,7 +509,7 @@ CancelRedo(void)
     {
 	free_buff(&redobuff);
 	redobuff = old_redobuff;
-	old_redobuff.bh_first = NULL;
+	old_redobuff.bh_first.b_next = NULL;
 	start_stuff();
 	while (read_readbuffers(TRUE) != NUL)
 	    ;
@@ -536,9 +526,9 @@ saveRedobuff(save_redo_T *save_redo)
     char_u	*s;
 
     save_redo->sr_redobuff = redobuff;
-    redobuff.bh_first = NULL;
+    redobuff.bh_first.b_next = NULL;
     save_redo->sr_old_redobuff = old_redobuff;
-    old_redobuff.bh_first = NULL;
+    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);
@@ -757,9 +747,9 @@ read_redo(int init, int old_redo)
     if (init)
     {
 	if (old_redo)
-	    bp = old_redobuff.bh_first;
+	    bp = old_redobuff.bh_first.b_next;
 	else
-	    bp = redobuff.bh_first;
+	    bp = redobuff.bh_first.b_next;
 	if (bp == NULL)
 	    return FAIL;
 	p = bp->b_str;
@@ -1382,9 +1372,9 @@ save_typeahead(tasave_T *tp)
     old_char = -1;
 
     tp->save_readbuf1 = readbuf1;
-    readbuf1.bh_first = NULL;
+    readbuf1.bh_first.b_next = NULL;
     tp->save_readbuf2 = readbuf2;
-    readbuf2.bh_first = NULL;
+    readbuf2.bh_first.b_next = NULL;
 # ifdef USE_INPUT_BUF
     tp->save_inputbuf = get_input_buf();
 # endif