indent: fix off-by-one error in comment wrapping The manual page says that the default maximum length of a comment line is 78. The test 'comments.0' wrongly assumed that this 78 would refer to the maximum _column_ allowed, which is off by one. Fix the wording in the test 'comments.0' and remove the (now satisfied) expectation comments in the test 'token-comment.0'. Several other tests just happened to hit that limit, fix these as well.diff -r1.1 -r1.2 src/tests/usr.bin/indent/comments.0
(rillig)
--- src/tests/usr.bin/indent/Attic/comments.0 2019/04/04 15:27:35 1.1
+++ src/tests/usr.bin/indent/Attic/comments.0 2021/03/14 01:34:13 1.2
@@ -1,33 +1,34 @@ | @@ -1,33 +1,34 @@ | |||
1 | /* $NetBSD: comments.0,v 1.1 2019/04/04 15:27:35 kamil Exp $ */ | 1 | /* $NetBSD: comments.0,v 1.2 2021/03/14 01:34:13 rillig Exp $ */ | |
2 | /* $FreeBSD: head/usr.bin/indent/tests/comments.0 321383 2017-07-23 15:07:52Z pstef $ */ | 2 | /* $FreeBSD: head/usr.bin/indent/tests/comments.0 321383 2017-07-23 15:07:52Z pstef $ */ | |
3 | typedef enum x { | 3 | typedef enum x { | |
4 | aaaaaaaaaaaaaaaaaaaaaa = 1 << 0, /* test a */ | 4 | aaaaaaaaaaaaaaaaaaaaaa = 1 << 0, /* test a */ | |
5 | bbbbbbbbbbbbbbbbb = 1 << 1, /* test b */ | 5 | bbbbbbbbbbbbbbbbb = 1 << 1, /* test b */ | |
6 | cccccccccccccc = 1 << 1, /* test c */ | 6 | cccccccccccccc = 1 << 1, /* test c */ | |
7 | dddddddddddddddddddddddddddddd = 1 << 2 /* test d */ | 7 | dddddddddddddddddddddddddddddd = 1 << 2 /* test d */ | |
8 | } x; | 8 | } x; | |
9 | 9 | |||
10 | /* See r303597, r303598, r309219, and r309343 */ | 10 | /* See r303597, r303598, r309219, and r309343 */ | |
11 | void t(void) { | 11 | void t(void) { | |
12 | /* | 12 | /* | |
13 | * Old indent wrapped the URL near where this sentence ends. | 13 | * Old indent wrapped the URL near where this sentence ends. | |
14 | * | 14 | * | |
15 | * https://www.freebsd.org/cgi/man.cgi?query=indent&apropos=0&sektion=0&manpath=FreeBSD+12-current&arch=default&format=html | 15 | * https://www.freebsd.org/cgi/man.cgi?query=indent&apropos=0&sektion=0&manpath=FreeBSD+12-current&arch=default&format=html | |
16 | */ | 16 | */ | |
17 | 17 | |||
18 | /* | 18 | /* | |
19 | * Old indent did not wrap to column 78 | 19 | * The default maximum line length for comments is 78, and the 'kk' at | |
20 | * | 20 | * the end makes the line exactly 78 bytes long. | |
21 | * | |||
21 | * aaaaaa bbbbbb cccccc dddddd eeeeee ffffff ggggg hhhhh iiiii jjjj kk | 22 | * aaaaaa bbbbbb cccccc dddddd eeeeee ffffff ggggg hhhhh iiiii jjjj kk | |
22 | */ | 23 | */ | |
23 | 24 | |||
24 | /* | 25 | /* | |
25 | * Old indent unnecessarily removed the star comment continuation on the next line. | 26 | * Old indent unnecessarily removed the star comment continuation on the next line. | |
26 | * | 27 | * | |
27 | * *test* | 28 | * *test* | |
28 | */ | 29 | */ | |
29 | 30 | |||
30 | /* r309219 Go through linked list, freeing from the malloced (t[-1]) address. */ | 31 | /* r309219 Go through linked list, freeing from the malloced (t[-1]) address. */ | |
31 | 32 | |||
32 | /* r309343 */ | 33 | /* r309343 */ | |
33 | } | 34 | } |
--- src/tests/usr.bin/indent/Attic/comments.0.stdout 2019/04/04 15:27:35 1.1
+++ src/tests/usr.bin/indent/Attic/comments.0.stdout 2021/03/14 01:34:13 1.2
@@ -1,37 +1,37 @@ | @@ -1,37 +1,37 @@ | |||
1 | /* $NetBSD: comments.0.stdout,v 1.1 2019/04/04 15:27:35 kamil Exp $ */ | 1 | /* $NetBSD: comments.0.stdout,v 1.2 2021/03/14 01:34:13 rillig Exp $ */ | |
2 | /* $FreeBSD: head/usr.bin/indent/tests/comments.0.stdout 334563 2018-06-03 15:28:55Z pstef $ */ | 2 | /* $FreeBSD: head/usr.bin/indent/tests/comments.0.stdout 334563 2018-06-03 15:28:55Z pstef $ */ | |
3 | typedef enum x { | 3 | typedef enum x { | |
4 | aaaaaaaaaaaaaaaaaaaaaa = 1 << 0, /* test a */ | 4 | aaaaaaaaaaaaaaaaaaaaaa = 1 << 0, /* test a */ | |
5 | bbbbbbbbbbbbbbbbb = 1 << 1, /* test b */ | 5 | bbbbbbbbbbbbbbbbb = 1 << 1, /* test b */ | |
6 | cccccccccccccc = 1 << 1, /* test c */ | 6 | cccccccccccccc = 1 << 1, /* test c */ | |
7 | dddddddddddddddddddddddddddddd = 1 << 2 /* test d */ | 7 | dddddddddddddddddddddddddddddd = 1 << 2 /* test d */ | |
8 | } x; | 8 | } x; | |
9 | 9 | |||
10 | /* See r303597, r303598, r309219, and r309343 */ | 10 | /* See r303597, r303598, r309219, and r309343 */ | |
11 | void | 11 | void | |
12 | t(void) | 12 | t(void) | |
13 | { | 13 | { | |
14 | /* | 14 | /* | |
15 | * Old indent wrapped the URL near where this sentence ends. | 15 | * Old indent wrapped the URL near where this sentence ends. | |
16 | * | 16 | * | |
17 | * https://www.freebsd.org/cgi/man.cgi?query=indent&apropos=0&sektion=0&manpath=FreeBSD+12-current&arch=default&format=html | 17 | * https://www.freebsd.org/cgi/man.cgi?query=indent&apropos=0&sektion=0&manpath=FreeBSD+12-current&arch=default&format=html | |
18 | */ | 18 | */ | |
19 | 19 | |||
20 | /* | 20 | /* | |
21 | * Old indent did not wrap to column 78 | 21 | * The default maximum line length for comments is 78, and the 'kk' at | |
22 | * the end makes the line exactly 78 bytes long. | |||
22 | * | 23 | * | |
23 | * aaaaaa bbbbbb cccccc dddddd eeeeee ffffff ggggg hhhhh iiiii jjjj | 24 | * aaaaaa bbbbbb cccccc dddddd eeeeee ffffff ggggg hhhhh iiiii jjjj kk | |
24 | * kk | |||
25 | */ | 25 | */ | |
26 | 26 | |||
27 | /* | 27 | /* | |
28 | * Old indent unnecessarily removed the star comment continuation on | 28 | * Old indent unnecessarily removed the star comment continuation on | |
29 | * the next line. | 29 | * the next line. | |
30 | * | 30 | * | |
31 | * *test* | 31 | * *test* | |
32 | */ | 32 | */ | |
33 | 33 | |||
34 | /* | 34 | /* | |
35 | * r309219 Go through linked list, freeing from the malloced (t[-1]) | 35 | * r309219 Go through linked list, freeing from the malloced (t[-1]) | |
36 | * address. | 36 | * address. | |
37 | */ | 37 | */ |
--- src/tests/usr.bin/indent/Attic/opt-bap+sob.0.stdout 2021/03/08 22:13:05 1.1
+++ src/tests/usr.bin/indent/Attic/opt-bap+sob.0.stdout 2021/03/14 01:34:13 1.2
@@ -1,20 +1,20 @@ | @@ -1,20 +1,20 @@ | |||
1 | /* $NetBSD: opt-bap+sob.0.stdout,v 1.1 2021/03/08 22:13:05 rillig Exp $ */ | 1 | /* $NetBSD: opt-bap+sob.0.stdout,v 1.2 2021/03/14 01:34:13 rillig Exp $ */ | |
2 | /* $FreeBSD$ */ | 2 | /* $FreeBSD$ */ | |
3 | 3 | |||
4 | /* | 4 | /* | |
5 | * As of 2021-03-08, the combination of -bap and -sob, which occurs in the | 5 | * As of 2021-03-08, the combination of -bap and -sob, which occurs in the | |
6 | * example indent.pro from NetBSD, removes the empty line above the | 6 | * example indent.pro from NetBSD, removes the empty line above the separator. | |
7 | * separator. Seen in games/cgram/cgram.c. | 7 | * Seen in games/cgram/cgram.c. | |
8 | */ | 8 | */ | |
9 | 9 | |||
10 | void | 10 | void | |
11 | function1(void) | 11 | function1(void) | |
12 | { | 12 | { | |
13 | } | 13 | } | |
14 | /* $ FIXME: Keep the empty line between the '}' and the '//'. */ | 14 | /* $ FIXME: Keep the empty line between the '}' and the '//'. */ | |
15 | ///// separator ///// | 15 | ///// separator ///// | |
16 | 16 | |||
17 | void | 17 | void | |
18 | function2(void) | 18 | function2(void) | |
19 | { | 19 | { | |
20 | } | 20 | } |
--- src/tests/usr.bin/indent/Attic/token-keyword_do_else.0.stdout 2021/03/12 00:13:06 1.1
+++ src/tests/usr.bin/indent/Attic/token-keyword_do_else.0.stdout 2021/03/14 01:34:13 1.2
@@ -1,10 +1,10 @@ | @@ -1,10 +1,10 @@ | |||
1 | /* $NetBSD: token-keyword_do_else.0.stdout,v 1.1 2021/03/12 00:13:06 rillig Exp $ */ | 1 | /* $NetBSD: token-keyword_do_else.0.stdout,v 1.2 2021/03/14 01:34:13 rillig Exp $ */ | |
2 | /* $FreeBSD$ */ | 2 | /* $FreeBSD$ */ | |
3 | 3 | |||
4 | /* | 4 | /* | |
5 | * Tests for the keyword 'do' or 'else'. These two keywords are followed by | 5 | * Tests for the keyword 'do' or 'else'. These two keywords are followed by a | |
6 | * a space. In contrast to 'for', 'if' and 'while', the space is not | 6 | * space. In contrast to 'for', 'if' and 'while', the space is not followed | |
7 | * followed by a parenthesized expression. | 7 | * by a parenthesized expression. | |
8 | */ | 8 | */ | |
9 | 9 | |||
10 | /* TODO: Add some code to be formatted. */ | 10 | /* TODO: Add some code to be formatted. */ |
--- src/tests/usr.bin/indent/Attic/opt-P.0.stdout 2021/03/07 10:12:18 1.2
+++ src/tests/usr.bin/indent/Attic/opt-P.0.stdout 2021/03/14 01:34:13 1.3
@@ -1,8 +1,7 @@ | @@ -1,8 +1,7 @@ | |||
1 | /* $NetBSD: opt-P.0.stdout,v 1.2 2021/03/07 10:12:18 rillig Exp $ */ | 1 | /* $NetBSD: opt-P.0.stdout,v 1.3 2021/03/14 01:34:13 rillig Exp $ */ | |
2 | /* $FreeBSD$ */ | 2 | /* $FreeBSD$ */ | |
3 | 3 | |||
4 | /* | 4 | /* | |
5 | * Mentioning another profile via -P has no effect since only a single | 5 | * Mentioning another profile via -P has no effect since only a single profile | |
6 | * profile can be specified on the command line, and there is no 'include' | 6 | * can be specified on the command line, and there is no 'include' option. | |
7 | * option. | |||
8 | */ | 7 | */ |
--- src/tests/usr.bin/indent/Attic/token-comment.0.stdout 2021/03/14 00:50:39 1.2
+++ src/tests/usr.bin/indent/Attic/token-comment.0.stdout 2021/03/14 01:34:13 1.3
@@ -1,25 +1,21 @@ | @@ -1,25 +1,21 @@ | |||
1 | /* $NetBSD: token-comment.0.stdout,v 1.2 2021/03/14 00:50:39 rillig Exp $ */ | 1 | /* $NetBSD: token-comment.0.stdout,v 1.3 2021/03/14 01:34:13 rillig Exp $ */ | |
2 | /* $FreeBSD$ */ | 2 | /* $FreeBSD$ */ | |
3 | 3 | |||
4 | /* | 4 | /* | |
5 | * Tests for formatting comments. C99 defines block comments and end-of-line | 5 | * Tests for formatting comments. C99 defines block comments and end-of-line | |
6 | * comments. Indent further distinguishes box comments that are a special | 6 | * comments. Indent further distinguishes box comments that are a special | |
7 | * kind of block comments. | 7 | * kind of block comments. | |
8 | */ | 8 | */ | |
9 | 9 | |||
10 | /* TODO: Add some code to be formatted. */ | 10 | /* TODO: Add some code to be formatted. */ | |
11 | 11 | |||
12 | /* 456789 123456789 123456789 123456789 123456789 123456789 123456789 12345 */ | 12 | /* 456789 123456789 123456789 123456789 123456789 123456789 123456789 12345 */ | |
13 | /* 456789 123456789 123456789 123456789 123456789 123456789 123456789 123456 */ | 13 | /* 456789 123456789 123456789 123456789 123456789 123456789 123456789 123456 */ | |
14 | /* 456789 123456789 123456789 123456789 123456789 123456789 123456789 1234567 */ | 14 | /* 456789 123456789 123456789 123456789 123456789 123456789 123456789 1234567 */ | |
15 | /* $ XXX: The '12345678' should be kept on the main line since it adds up */ | |||
16 | /* $ XXX: to a line length of exactly 78, which according to the manual */ | |||
17 | /* $ XXX: page should be ok. */ | |||
18 | /* | 15 | /* | |
19 | * 456789 123456789 123456789 123456789 123456789 123456789 123456789 | 16 | * 456789 123456789 123456789 123456789 123456789 123456789 123456789 12345678 | |
20 | * 12345678 | |||
21 | */ | 17 | */ | |
22 | /* | 18 | /* | |
23 | * 456789 123456789 123456789 123456789 123456789 123456789 123456789 | 19 | * 456789 123456789 123456789 123456789 123456789 123456789 123456789 | |
24 | * 123456789 | 20 | * 123456789 | |
25 | */ | 21 | */ |
--- src/usr.bin/indent/pr_comment.c 2021/03/14 00:22:16 1.31
+++ src/usr.bin/indent/pr_comment.c 2021/03/14 01:34:13 1.32
@@ -1,14 +1,14 @@ | @@ -1,14 +1,14 @@ | |||
1 | /* $NetBSD: pr_comment.c,v 1.31 2021/03/14 00:22:16 rillig Exp $ */ | 1 | /* $NetBSD: pr_comment.c,v 1.32 2021/03/14 01:34:13 rillig Exp $ */ | |
2 | 2 | |||
3 | /*- | 3 | /*- | |
4 | * SPDX-License-Identifier: BSD-4-Clause | 4 | * SPDX-License-Identifier: BSD-4-Clause | |
5 | * | 5 | * | |
6 | * Copyright (c) 1985 Sun Microsystems, Inc. | 6 | * Copyright (c) 1985 Sun Microsystems, Inc. | |
7 | * Copyright (c) 1980, 1993 | 7 | * Copyright (c) 1980, 1993 | |
8 | * The Regents of the University of California. All rights reserved. | 8 | * The Regents of the University of California. All rights reserved. | |
9 | * All rights reserved. | 9 | * All rights reserved. | |
10 | * | 10 | * | |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without | |
12 | * modification, are permitted provided that the following conditions | 12 | * modification, are permitted provided that the following conditions | |
13 | * are met: | 13 | * are met: | |
14 | * 1. Redistributions of source code must retain the above copyright | 14 | * 1. Redistributions of source code must retain the above copyright | |
@@ -36,27 +36,27 @@ | @@ -36,27 +36,27 @@ | |||
36 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 36 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
37 | * SUCH DAMAGE. | 37 | * SUCH DAMAGE. | |
38 | */ | 38 | */ | |
39 | 39 | |||
40 | #if 0 | 40 | #if 0 | |
41 | #ifndef lint | 41 | #ifndef lint | |
42 | static char sccsid[] = "@(#)pr_comment.c 8.1 (Berkeley) 6/6/93"; | 42 | static char sccsid[] = "@(#)pr_comment.c 8.1 (Berkeley) 6/6/93"; | |
43 | #endif /* not lint */ | 43 | #endif /* not lint */ | |
44 | #endif | 44 | #endif | |
45 | 45 | |||
46 | #include <sys/cdefs.h> | 46 | #include <sys/cdefs.h> | |
47 | #ifndef lint | 47 | #ifndef lint | |
48 | #if defined(__NetBSD__) | 48 | #if defined(__NetBSD__) | |
49 | __RCSID("$NetBSD: pr_comment.c,v 1.31 2021/03/14 00:22:16 rillig Exp $"); | 49 | __RCSID("$NetBSD: pr_comment.c,v 1.32 2021/03/14 01:34:13 rillig Exp $"); | |
50 | #elif defined(__FreeBSD__) | 50 | #elif defined(__FreeBSD__) | |
51 | __FBSDID("$FreeBSD: head/usr.bin/indent/pr_comment.c 334927 2018-06-10 16:44:18Z pstef $"); | 51 | __FBSDID("$FreeBSD: head/usr.bin/indent/pr_comment.c 334927 2018-06-10 16:44:18Z pstef $"); | |
52 | #endif | 52 | #endif | |
53 | #endif | 53 | #endif | |
54 | 54 | |||
55 | #include <err.h> | 55 | #include <err.h> | |
56 | #include <stdio.h> | 56 | #include <stdio.h> | |
57 | #include <stdlib.h> | 57 | #include <stdlib.h> | |
58 | #include <string.h> | 58 | #include <string.h> | |
59 | 59 | |||
60 | #include "indent.h" | 60 | #include "indent.h" | |
61 | 61 | |||
62 | static void | 62 | static void | |
@@ -190,26 +190,31 @@ process_comment(void) | @@ -190,26 +190,31 @@ process_comment(void) | |||
190 | *e_com++ = '/'; | 190 | *e_com++ = '/'; | |
191 | *e_com++ = e_token[-1]; | 191 | *e_com++ = e_token[-1]; | |
192 | if (*buf_ptr != ' ' && !ps.box_com) | 192 | if (*buf_ptr != ' ' && !ps.box_com) | |
193 | *e_com++ = ' '; | 193 | *e_com++ = ' '; | |
194 | 194 | |||
195 | /* | 195 | /* | |
196 | * Don't put a break delimiter if this is a one-liner that won't wrap. | 196 | * Don't put a break delimiter if this is a one-liner that won't wrap. | |
197 | */ | 197 | */ | |
198 | if (break_delim) | 198 | if (break_delim) | |
199 | for (t_ptr = buf_ptr; *t_ptr != '\0' && *t_ptr != '\n'; t_ptr++) { | 199 | for (t_ptr = buf_ptr; *t_ptr != '\0' && *t_ptr != '\n'; t_ptr++) { | |
200 | if (t_ptr >= buf_end) | 200 | if (t_ptr >= buf_end) | |
201 | fill_buffer(); | 201 | fill_buffer(); | |
202 | if (t_ptr[0] == '*' && t_ptr[1] == '/') { | 202 | if (t_ptr[0] == '*' && t_ptr[1] == '/') { | |
203 | /* | |||
204 | * XXX: This computation ignores the leading " * ", as well | |||
205 | * as the trailing ' ' '*' '/'. In simple cases, these cancel | |||
206 | * out since they are equally long. | |||
207 | */ | |||
203 | int right_margin = indentation_after_range(ps.com_col - 1, | 208 | int right_margin = indentation_after_range(ps.com_col - 1, | |
204 | buf_ptr, t_ptr + 2); | 209 | buf_ptr, t_ptr + 2); | |
205 | if (right_margin < adj_max_line_length) | 210 | if (right_margin < adj_max_line_length) | |
206 | break_delim = false; | 211 | break_delim = false; | |
207 | break; | 212 | break; | |
208 | } | 213 | } | |
209 | } | 214 | } | |
210 | 215 | |||
211 | if (break_delim) { | 216 | if (break_delim) { | |
212 | char *t = e_com; | 217 | char *t = e_com; | |
213 | e_com = s_com + 2; | 218 | e_com = s_com + 2; | |
214 | *e_com = 0; | 219 | *e_com = 0; | |
215 | if (opt.blanklines_before_blockcomments && ps.last_token != lbrace) | 220 | if (opt.blanklines_before_blockcomments && ps.last_token != lbrace) | |
@@ -331,27 +336,27 @@ process_comment(void) | @@ -331,27 +336,27 @@ process_comment(void) | |||
331 | do { | 336 | do { | |
332 | check_size_comment(1, &last_bl); | 337 | check_size_comment(1, &last_bl); | |
333 | *e_com = *buf_ptr++; | 338 | *e_com = *buf_ptr++; | |
334 | if (buf_ptr >= buf_end) | 339 | if (buf_ptr >= buf_end) | |
335 | fill_buffer(); | 340 | fill_buffer(); | |
336 | if (*e_com == ' ' || *e_com == '\t') | 341 | if (*e_com == ' ' || *e_com == '\t') | |
337 | last_bl = e_com; /* remember we saw a blank */ | 342 | last_bl = e_com; /* remember we saw a blank */ | |
338 | ++e_com; | 343 | ++e_com; | |
339 | now_len++; | 344 | now_len++; | |
340 | } while (!memchr("*\n\r\b\t", *buf_ptr, 6) && | 345 | } while (!memchr("*\n\r\b\t", *buf_ptr, 6) && | |
341 | (now_len < adj_max_line_length || !last_bl)); | 346 | (now_len < adj_max_line_length || !last_bl)); | |
342 | ps.last_nl = false; | 347 | ps.last_nl = false; | |
343 | /* XXX: signed character comparison '>' does not work for UTF-8 */ | 348 | /* XXX: signed character comparison '>' does not work for UTF-8 */ | |
344 | if (now_len >= adj_max_line_length && | 349 | if (now_len > adj_max_line_length && | |
345 | !ps.box_com && e_com[-1] > ' ') { | 350 | !ps.box_com && e_com[-1] > ' ') { | |
346 | /* | 351 | /* | |
347 | * the comment is too long, it must be broken up | 352 | * the comment is too long, it must be broken up | |
348 | */ | 353 | */ | |
349 | if (last_bl == NULL) { | 354 | if (last_bl == NULL) { | |
350 | dump_line(); | 355 | dump_line(); | |
351 | if (!ps.box_com && opt.star_comment_cont) | 356 | if (!ps.box_com && opt.star_comment_cont) | |
352 | *e_com++ = ' ', *e_com++ = '*', *e_com++ = ' '; | 357 | *e_com++ = ' ', *e_com++ = '*', *e_com++ = ' '; | |
353 | break; | 358 | break; | |
354 | } | 359 | } | |
355 | *e_com = '\0'; | 360 | *e_com = '\0'; | |
356 | e_com = last_bl; | 361 | e_com = last_bl; | |
357 | dump_line(); | 362 | dump_line(); |