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();

Reply via email to