Module Name: src Committed By: rillig Date: Mon Mar 8 20:15:42 UTC 2021
Modified Files: src/usr.bin/indent: indent.c indent_globs.h lexi.c pr_comment.c Log Message: indent: convert big macros to functions Each of these buffers is only modified in a single file. This makes it unnecessary to declare the macros in the global header. To generate a diff of this commit: cvs rdiff -u -r1.33 -r1.34 src/usr.bin/indent/indent.c cvs rdiff -u -r1.15 -r1.16 src/usr.bin/indent/indent_globs.h cvs rdiff -u -r1.24 -r1.25 src/usr.bin/indent/lexi.c cvs rdiff -u -r1.13 -r1.14 src/usr.bin/indent/pr_comment.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/indent/indent.c diff -u src/usr.bin/indent/indent.c:1.33 src/usr.bin/indent/indent.c:1.34 --- src/usr.bin/indent/indent.c:1.33 Mon Mar 8 19:06:48 2021 +++ src/usr.bin/indent/indent.c Mon Mar 8 20:15:42 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: indent.c,v 1.33 2021/03/08 19:06:48 rillig Exp $ */ +/* $NetBSD: indent.c,v 1.34 2021/03/08 20:15:42 rillig Exp $ */ /*- * SPDX-License-Identifier: BSD-4-Clause @@ -46,7 +46,7 @@ static char sccsid[] = "@(#)indent.c 5.1 #include <sys/cdefs.h> #ifndef lint #if defined(__NetBSD__) -__RCSID("$NetBSD: indent.c,v 1.33 2021/03/08 19:06:48 rillig Exp $"); +__RCSID("$NetBSD: indent.c,v 1.34 2021/03/08 20:15:42 rillig Exp $"); #elif defined(__FreeBSD__) __FBSDID("$FreeBSD: head/usr.bin/indent/indent.c 340138 2018-11-04 19:24:49Z oshogbo $"); #endif @@ -133,6 +133,36 @@ const char *simple_backup_suffix = ".BAK * files */ char bakfile[MAXPATHLEN] = ""; +static void +check_size_code(size_t desired_size) +{ + if (e_code + (desired_size) >= l_code) { + int nsize = l_code - s_code + 400 + desired_size; + int code_len = e_code - s_code; + codebuf = (char *)realloc(codebuf, nsize); + if (codebuf == NULL) + err(1, NULL); + e_code = codebuf + code_len + 1; + l_code = codebuf + nsize - 5; + s_code = codebuf + 1; + } +} + +static void +check_size_label(size_t desired_size) +{ + if (e_lab + (desired_size) >= l_lab) { + int nsize = l_lab - s_lab + 400 + desired_size; + int label_len = e_lab - s_lab; + labbuf = (char *)realloc(labbuf, nsize); + if (labbuf == NULL) + err(1, NULL); + e_lab = labbuf + label_len + 1; + l_lab = labbuf + nsize - 5; + s_lab = labbuf + 1; + } +} + int main(int argc, char **argv) { @@ -584,7 +614,7 @@ check_type: * in a line. fix it */ int len = e_com - s_com; - CHECK_SIZE_CODE(len + 3); + check_size_code(len + 3); *e_code++ = ' '; memcpy(e_code, s_com, len); e_code += len; @@ -603,8 +633,8 @@ check_type: /*-----------------------------------------------------*\ | do switch on type of token scanned | \*-----------------------------------------------------*/ - CHECK_SIZE_CODE(3); /* maximum number of increments of e_code - * before the next CHECK_SIZE_CODE or + check_size_code(3); /* maximum number of increments of e_code + * before the next check_size_code or * dump_line() is 2. After that there's the * final increment for the null character. */ switch (type_code) { /* now, decide what to do with the token */ @@ -720,7 +750,7 @@ check_type: { int len = e_token - s_token; - CHECK_SIZE_CODE(len); + check_size_code(len); memcpy(e_code, token, len); e_code += len; } @@ -731,7 +761,7 @@ check_type: { int len = e_token - s_token; - CHECK_SIZE_CODE(len + 1); + check_size_code(len + 1); if (ps.want_blank) *e_code++ = ' '; memcpy(e_code, token, len); @@ -782,7 +812,7 @@ check_type: { int len = e_code - s_code; - CHECK_SIZE_LAB(len + 3); + check_size_label(len + 3); memcpy(e_lab, s_code, len); e_lab += len; *e_lab++ = ':'; @@ -1073,7 +1103,7 @@ check_type: { int len = e_token - s_token; - CHECK_SIZE_CODE(len + 1); + check_size_code(len + 1); if (ps.want_blank) *e_code++ = ' '; memcpy(e_code, s_token, len); @@ -1087,7 +1117,7 @@ check_type: { int len = e_token - s_token; - CHECK_SIZE_CODE(len + 1); + check_size_code(len + 1); if (ps.want_blank) *e_code++ = ' '; memcpy(e_code, token, len); @@ -1128,7 +1158,7 @@ check_type: (s_lab != e_lab) || (s_code != e_code)) dump_line(); - CHECK_SIZE_LAB(1); + check_size_label(1); *e_lab++ = '#'; /* move whole line to 'label' buffer */ { int in_comment = 0; @@ -1142,7 +1172,7 @@ check_type: fill_buffer(); } while (*buf_ptr != '\n' || (in_comment && !had_eof)) { - CHECK_SIZE_LAB(2); + check_size_label(2); *e_lab = *buf_ptr++; if (buf_ptr >= buf_end) fill_buffer(); @@ -1210,7 +1240,7 @@ check_type: buf_end = sc_end; sc_end = NULL; } - CHECK_SIZE_LAB(1); + check_size_label(1); *e_lab = '\0'; /* null terminate line */ ps.pcase = false; } @@ -1343,13 +1373,13 @@ indent_declaration(int cur_dec_ind, int if (tabs_to_var) { int tpos; - CHECK_SIZE_CODE(cur_dec_ind / opt.tabsize); + check_size_code(cur_dec_ind / opt.tabsize); while ((tpos = opt.tabsize * (1 + pos / opt.tabsize)) <= cur_dec_ind) { *e_code++ = '\t'; pos = tpos; } } - CHECK_SIZE_CODE(cur_dec_ind - pos + 1); + check_size_code(cur_dec_ind - pos + 1); while (pos < cur_dec_ind) { *e_code++ = ' '; pos++; Index: src/usr.bin/indent/indent_globs.h diff -u src/usr.bin/indent/indent_globs.h:1.15 src/usr.bin/indent/indent_globs.h:1.16 --- src/usr.bin/indent/indent_globs.h:1.15 Sun Mar 7 20:40:18 2021 +++ src/usr.bin/indent/indent_globs.h Mon Mar 8 20:15:42 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: indent_globs.h,v 1.15 2021/03/07 20:40:18 rillig Exp $ */ +/* $NetBSD: indent_globs.h,v 1.16 2021/03/08 20:15:42 rillig Exp $ */ /*- * SPDX-License-Identifier: BSD-4-Clause @@ -54,58 +54,6 @@ extern FILE *input; /* the fid for the input file */ extern FILE *output; /* the output file */ -#define CHECK_SIZE_CODE(desired_size) \ - if (e_code + (desired_size) >= l_code) { \ - int nsize = l_code-s_code + 400 + desired_size; \ - int code_len = e_code-s_code; \ - codebuf = (char *) realloc(codebuf, nsize); \ - if (codebuf == NULL) \ - err(1, NULL); \ - e_code = codebuf + code_len + 1; \ - l_code = codebuf + nsize - 5; \ - s_code = codebuf + 1; \ - } -#define CHECK_SIZE_COM(desired_size) \ - if (e_com + (desired_size) >= l_com) { \ - int nsize = l_com-s_com + 400 + desired_size; \ - int com_len = e_com - s_com; \ - int blank_pos; \ - if (last_bl != NULL) \ - blank_pos = last_bl - combuf; \ - else \ - blank_pos = -1; \ - combuf = (char *) realloc(combuf, nsize); \ - if (combuf == NULL) \ - err(1, NULL); \ - e_com = combuf + com_len + 1; \ - if (blank_pos > 0) \ - last_bl = combuf + blank_pos; \ - l_com = combuf + nsize - 5; \ - s_com = combuf + 1; \ - } -#define CHECK_SIZE_LAB(desired_size) \ - if (e_lab + (desired_size) >= l_lab) { \ - int nsize = l_lab-s_lab + 400 + desired_size; \ - int label_len = e_lab - s_lab; \ - labbuf = (char *) realloc(labbuf, nsize); \ - if (labbuf == NULL) \ - err(1, NULL); \ - e_lab = labbuf + label_len + 1; \ - l_lab = labbuf + nsize - 5; \ - s_lab = labbuf + 1; \ - } -#define CHECK_SIZE_TOKEN(desired_size) \ - if (e_token + (desired_size) >= l_token) { \ - int nsize = l_token-s_token + 400 + desired_size; \ - int token_len = e_token - s_token; \ - tokenbuf = (char *) realloc(tokenbuf, nsize); \ - if (tokenbuf == NULL) \ - err(1, NULL); \ - e_token = tokenbuf + token_len + 1; \ - l_token = tokenbuf + nsize - 5; \ - s_token = tokenbuf + 1; \ - } - extern char *labbuf; /* buffer for label */ extern char *s_lab; /* start ... */ extern char *e_lab; /* .. and end of stored label */ Index: src/usr.bin/indent/lexi.c diff -u src/usr.bin/indent/lexi.c:1.24 src/usr.bin/indent/lexi.c:1.25 --- src/usr.bin/indent/lexi.c:1.24 Sun Mar 7 22:11:01 2021 +++ src/usr.bin/indent/lexi.c Mon Mar 8 20:15:42 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: lexi.c,v 1.24 2021/03/07 22:11:01 rillig Exp $ */ +/* $NetBSD: lexi.c,v 1.25 2021/03/08 20:15:42 rillig Exp $ */ /*- * SPDX-License-Identifier: BSD-4-Clause @@ -46,7 +46,7 @@ static char sccsid[] = "@(#)lexi.c 8.1 ( #include <sys/cdefs.h> #ifndef lint #if defined(__NetBSD__) -__RCSID("$NetBSD: lexi.c,v 1.24 2021/03/07 22:11:01 rillig Exp $"); +__RCSID("$NetBSD: lexi.c,v 1.25 2021/03/08 20:15:42 rillig Exp $"); #elif defined(__FreeBSD__) __FBSDID("$FreeBSD: head/usr.bin/indent/lexi.c 337862 2018-08-15 18:19:45Z pstef $"); #endif @@ -171,6 +171,21 @@ static char const *table[] = { [0] = "uuiifuufiuuiiuiiiiiuiuuuuu", }; +static void +check_size_token(size_t desired_size) +{ + if (e_token + (desired_size) >= l_token) { + int nsize = l_token - s_token + 400 + desired_size; + int token_len = e_token - s_token; + tokenbuf = (char *)realloc(tokenbuf, nsize); + if (tokenbuf == NULL) + err(1, NULL); + e_token = tokenbuf + token_len + 1; + l_token = tokenbuf + nsize - 5; + s_token = tokenbuf + 1; + } +} + static int strcmp_type(const void *e1, const void *e2) { @@ -277,7 +292,7 @@ lexi(struct parser_state *state) break; } s = table[i][s - 'A']; - CHECK_SIZE_TOKEN(1); + check_size_token(1); *e_token++ = *buf_ptr++; if (buf_ptr >= buf_end) fill_buffer(); @@ -297,7 +312,7 @@ lexi(struct parser_state *state) } else break; } - CHECK_SIZE_TOKEN(1); + check_size_token(1); /* copy it over */ *e_token++ = *buf_ptr++; if (buf_ptr >= buf_end) @@ -420,7 +435,7 @@ lexi(struct parser_state *state) /* Scan a non-alphanumeric token */ - CHECK_SIZE_TOKEN(3); /* things like "<<=" */ + check_size_token(3); /* things like "<<=" */ *e_token++ = *buf_ptr; /* if it is only a one-character token, it is * moved here */ *e_token = '\0'; @@ -448,7 +463,7 @@ lexi(struct parser_state *state) diag(1, "Unterminated literal"); goto stop_lit; } - CHECK_SIZE_TOKEN(2); + check_size_token(2); *e_token = *buf_ptr++; if (buf_ptr >= buf_end) fill_buffer(); @@ -598,7 +613,7 @@ stop_lit: } while (*buf_ptr == '*' || isspace((unsigned char)*buf_ptr)) { if (*buf_ptr == '*') { - CHECK_SIZE_TOKEN(1); + check_size_token(1); *e_token++ = *buf_ptr; } if (++buf_ptr >= buf_end) @@ -634,7 +649,7 @@ stop_lit: /* * handle ||, &&, etc, and also things as in int *****i */ - CHECK_SIZE_TOKEN(1); + check_size_token(1); *e_token++ = *buf_ptr; if (++buf_ptr >= buf_end) fill_buffer(); @@ -647,7 +662,7 @@ stop_lit: if (buf_ptr >= buf_end) /* check for input buffer empty */ fill_buffer(); state->last_u_d = unary_delim; - CHECK_SIZE_TOKEN(1); + check_size_token(1); *e_token = '\0'; /* null terminate the token */ return lexi_end(code); } Index: src/usr.bin/indent/pr_comment.c diff -u src/usr.bin/indent/pr_comment.c:1.13 src/usr.bin/indent/pr_comment.c:1.14 --- src/usr.bin/indent/pr_comment.c:1.13 Sun Mar 7 22:11:01 2021 +++ src/usr.bin/indent/pr_comment.c Mon Mar 8 20:15:42 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: pr_comment.c,v 1.13 2021/03/07 22:11:01 rillig Exp $ */ +/* $NetBSD: pr_comment.c,v 1.14 2021/03/08 20:15:42 rillig Exp $ */ /*- * SPDX-License-Identifier: BSD-4-Clause @@ -46,7 +46,7 @@ static char sccsid[] = "@(#)pr_comment.c #include <sys/cdefs.h> #ifndef lint #if defined(__NetBSD__) -__RCSID("$NetBSD: pr_comment.c,v 1.13 2021/03/07 22:11:01 rillig Exp $"); +__RCSID("$NetBSD: pr_comment.c,v 1.14 2021/03/08 20:15:42 rillig Exp $"); #elif defined(__FreeBSD__) __FBSDID("$FreeBSD: head/usr.bin/indent/pr_comment.c 334927 2018-06-10 16:44:18Z pstef $"); #endif @@ -59,6 +59,28 @@ __FBSDID("$FreeBSD: head/usr.bin/indent/ #include "indent.h" +static void +check_size_comment(size_t desired_size, char **last_bl_ptr) +{ + if (e_com + (desired_size) >= l_com) { + int nsize = l_com - s_com + 400 + desired_size; + int com_len = e_com - s_com; + int blank_pos; + if (*last_bl_ptr != NULL) + blank_pos = *last_bl_ptr - combuf; + else + blank_pos = -1; + combuf = (char *)realloc(combuf, nsize); + if (combuf == NULL) + err(1, NULL); + e_com = combuf + com_len + 1; + if (blank_pos > 0) + *last_bl_ptr = combuf + blank_pos; + l_com = combuf + nsize - 5; + s_com = combuf + 1; + } +} + /* * NAME: * pr_comment @@ -216,7 +238,7 @@ pr_comment(void) * copied */ switch (*buf_ptr) { /* this checks for various spcl cases */ case 014: /* check for a form feed */ - CHECK_SIZE_COM(3); + check_size_comment(3, &last_bl); if (!ps.box_com) { /* in a text comment, break the line here */ ps.use_ff = true; /* fix so dump_line uses a form feed */ @@ -245,7 +267,7 @@ pr_comment(void) return; } last_bl = NULL; - CHECK_SIZE_COM(4); + check_size_comment(4, &last_bl); if (ps.box_com || ps.last_nl) { /* if this is a boxed comment, * we dont ignore the newline */ if (s_com == e_com) @@ -295,7 +317,7 @@ pr_comment(void) * of comment */ if (++buf_ptr >= buf_end) /* get to next char after * */ fill_buffer(); - CHECK_SIZE_COM(4); + check_size_comment(4, &last_bl); if (*buf_ptr == '/') { /* it is the end!!! */ end_of_comment: if (++buf_ptr >= buf_end) @@ -323,7 +345,7 @@ pr_comment(void) default: /* we have a random char */ now_col = count_spaces_until(ps.com_col, s_com, e_com); do { - CHECK_SIZE_COM(1); + check_size_comment(1, &last_bl); *e_com = *buf_ptr++; if (buf_ptr >= buf_end) fill_buffer(); @@ -356,7 +378,7 @@ pr_comment(void) /* * t_ptr will be somewhere between e_com (dump_line() reset) * and l_com. So it's safe to copy byte by byte from t_ptr - * to e_com without any CHECK_SIZE_COM(). + * to e_com without any check_size_comment(). */ while (*t_ptr != '\0') { if (*t_ptr == ' ' || *t_ptr == '\t')