Module Name: src Committed By: rillig Date: Sat Jun 17 23:03:20 UTC 2023
Modified Files: src/usr.bin/indent: io.c lexi.c pr_comment.c Log Message: indent: clean up Extract duplicate code for handling line continuations. Prevent theoretic undefined behavior in strspn, as inp.s is not null-terminated. Remove adding extra space characters when processing comments, as these are not necessary to force a line of output. No functional change. To generate a diff of this commit: cvs rdiff -u -r1.228 -r1.229 src/usr.bin/indent/io.c cvs rdiff -u -r1.231 -r1.232 src/usr.bin/indent/lexi.c cvs rdiff -u -r1.167 -r1.168 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/io.c diff -u src/usr.bin/indent/io.c:1.228 src/usr.bin/indent/io.c:1.229 --- src/usr.bin/indent/io.c:1.228 Sat Jun 17 22:28:49 2023 +++ src/usr.bin/indent/io.c Sat Jun 17 23:03:20 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: io.c,v 1.228 2023/06/17 22:28:49 rillig Exp $ */ +/* $NetBSD: io.c,v 1.229 2023/06/17 23:03:20 rillig Exp $ */ /*- * SPDX-License-Identifier: BSD-4-Clause @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: io.c,v 1.228 2023/06/17 22:28:49 rillig Exp $"); +__RCSID("$NetBSD: io.c,v 1.229 2023/06/17 23:03:20 rillig Exp $"); #include <stdio.h> @@ -341,8 +341,7 @@ output_indented_line(void) if (lab.len == 0 && code.len == 0 && com.len == 0) out.line_kind = lk_blank; - if (want_blank_line() && newlines < 2 - && out.line_kind != lk_blank) + if (want_blank_line() && newlines < 2 && out.line_kind != lk_blank) add_buffered_newline(); /* This kludge aligns function definitions correctly. */ Index: src/usr.bin/indent/lexi.c diff -u src/usr.bin/indent/lexi.c:1.231 src/usr.bin/indent/lexi.c:1.232 --- src/usr.bin/indent/lexi.c:1.231 Sat Jun 17 22:28:49 2023 +++ src/usr.bin/indent/lexi.c Sat Jun 17 23:03:20 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: lexi.c,v 1.231 2023/06/17 22:28:49 rillig Exp $ */ +/* $NetBSD: lexi.c,v 1.232 2023/06/17 23:03:20 rillig Exp $ */ /*- * SPDX-License-Identifier: BSD-4-Clause @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: lexi.c,v 1.231 2023/06/17 22:28:49 rillig Exp $"); +__RCSID("$NetBSD: lexi.c,v 1.232 2023/06/17 23:03:20 rillig Exp $"); #include <stdlib.h> #include <string.h> @@ -182,17 +182,25 @@ token_add_char(char ch) buf_add_char(&token, ch); } +static bool +skip_line_continuation(void) +{ + if (inp_p[0] == '\\' && inp_p[1] == '\n') { + inp_p++; + inp_skip(); + line_no++; + return true; + } + return false; +} + static void lex_number(void) { for (unsigned char s = 'A'; s != 'f' && s != 'i' && s != 'u';) { unsigned char ch = (unsigned char)*inp_p; - if (ch == '\\' && inp_p[1] == '\n') { - inp_p++; - inp_skip(); - line_no++; + if (skip_line_continuation()) continue; - } if (ch >= array_length(lex_number_row) || lex_number_row[ch] == 0) break; @@ -213,13 +221,11 @@ static void lex_word(void) { for (;;) { - if (is_identifier_part(inp_p[0])) + if (is_identifier_part(*inp_p)) token_add_char(*inp_p++); - else if (inp_p[0] == '\\' && inp_p[1] == '\n') { - inp_p++; - inp_skip(); - line_no++; - } else + else if (skip_line_continuation()) + continue; + else return; } } @@ -533,13 +539,11 @@ lexi(void) buf_clear(&token); for (;;) { - if (ch_isblank(inp_p[0])) + if (ch_isblank(*inp_p)) inp_p++; - else if (inp_p[0] == '\\' && inp_p[1] == '\n') { - inp_p++; - inp_skip(); - line_no++; - } else + else if (skip_line_continuation()) + continue; + else break; } Index: src/usr.bin/indent/pr_comment.c diff -u src/usr.bin/indent/pr_comment.c:1.167 src/usr.bin/indent/pr_comment.c:1.168 --- src/usr.bin/indent/pr_comment.c:1.167 Sat Jun 17 22:28:49 2023 +++ src/usr.bin/indent/pr_comment.c Sat Jun 17 23:03:20 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: pr_comment.c,v 1.167 2023/06/17 22:28:49 rillig Exp $ */ +/* $NetBSD: pr_comment.c,v 1.168 2023/06/17 23:03:20 rillig Exp $ */ /*- * SPDX-License-Identifier: BSD-4-Clause @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: pr_comment.c,v 1.167 2023/06/17 22:28:49 rillig Exp $"); +__RCSID("$NetBSD: pr_comment.c,v 1.168 2023/06/17 23:03:20 rillig Exp $"); #include <string.h> @@ -75,6 +75,15 @@ fits_in_one_line(int max_line_length) return false; } +static bool +is_block_comment(void) +{ + const char *p = inp_p; + while (*p == '*') + p++; + return *p == '\n'; +} + static void analyze_comment(bool *p_may_wrap, bool *p_delim, int *p_line_length) { @@ -91,7 +100,7 @@ analyze_comment(bool *p_may_wrap, bool * token.s[token.len - 1] == '/' || (inp_p[0] == '\n' && !opt.format_block_comments)) may_wrap = false; - if (code.len == 0 && inp_p[strspn(inp_p, "*")] == '\n') + if (is_block_comment()) out.line_kind = lk_block_comment; if (com.len > 0) @@ -143,8 +152,7 @@ static void copy_comment_start(bool may_wrap, bool *delim, int line_length) { ps.comment_cont = false; - com_add_char('/'); - com_add_char(token.s[token.len - 1]); /* either '*' or '/' */ + buf_add_chars(&com, token.s, token.len); // "/*" or "//" if (may_wrap) { if (!ch_isblank(inp_p[0])) @@ -180,8 +188,7 @@ copy_comment_wrap_text(int line_length, if (ch_isspace(com.s[com.len - 1])) return; - if (*last_blank == -1) { - /* only a single word in this line */ + if (*last_blank == -1) { /* only a single word in this line */ output_line(); com_add_star(); return; @@ -209,8 +216,6 @@ copy_comment_wrap_newline(ssize_t *last_ { *last_blank = -1; if (seen_newline) { - if (com.len == 0) - com_add_char(' '); /* force empty output line */ if (com.len > 3) { output_line(); com_add_star(); @@ -245,9 +250,7 @@ copy_comment_wrap_finish(int line_length if (delim) { if (com.len > 3) output_line(); - else - buf_clear(&com); - com_add_char(' '); + buf_clear(&com); } else { size_t len = com.len; // XXX: This loop differs from the one below. @@ -316,9 +319,6 @@ copy_comment_nowrap(void) return; } - if (com.len == 0) - com_add_char(' '); /* force output of an - * empty line */ output_line(); line_no++; inp_skip();