Module Name: src
Committed By: rillig
Date: Tue Oct 5 17:12:20 UTC 2021
Modified Files:
src/tests/usr.bin/indent: ps_ind_level.0
src/usr.bin/indent: indent.c
Log Message:
indent: make off-by-one error in main_prepare_parsing more visible
No functional change.
To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/tests/usr.bin/indent/ps_ind_level.0
cvs rdiff -u -r1.105 -r1.106 src/usr.bin/indent/indent.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/tests/usr.bin/indent/ps_ind_level.0
diff -u src/tests/usr.bin/indent/ps_ind_level.0:1.1 src/tests/usr.bin/indent/ps_ind_level.0:1.2
--- src/tests/usr.bin/indent/ps_ind_level.0:1.1 Tue Oct 5 17:09:45 2021
+++ src/tests/usr.bin/indent/ps_ind_level.0 Tue Oct 5 17:12:20 2021
@@ -1,10 +1,10 @@
-/* $NetBSD: ps_ind_level.0,v 1.1 2021/10/05 17:09:45 rillig Exp $ */
+/* $NetBSD: ps_ind_level.0,v 1.2 2021/10/05 17:12:20 rillig Exp $ */
/* $FreeBSD$ */
/* $ */
/* $ The leading indentation in the first line determines the indentation */
/* $ of the remaining code. In this particular test, the indentation is set */
/* $ to 5 and the tabulator is set to 8, to demonstrate an off-by-one error */
-/* $ in main_prepare_parsing that has been fixed in indent.c 1.106 from */
+/* $ in main_prepare_parsing that has been fixed in indent.c 1.107 from */
/* $ 2021-10-05. */
/* $ */
/* $ The declaration in the below line is indented by 3 tabs, amounting to */
Index: src/usr.bin/indent/indent.c
diff -u src/usr.bin/indent/indent.c:1.105 src/usr.bin/indent/indent.c:1.106
--- src/usr.bin/indent/indent.c:1.105 Tue Oct 5 16:33:25 2021
+++ src/usr.bin/indent/indent.c Tue Oct 5 17:12:20 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: indent.c,v 1.105 2021/10/05 16:33:25 rillig Exp $ */
+/* $NetBSD: indent.c,v 1.106 2021/10/05 17:12:20 rillig Exp $ */
/*-
* SPDX-License-Identifier: BSD-4-Clause
@@ -43,7 +43,7 @@ static char sccsid[] = "@(#)indent.c 5.1
#include <sys/cdefs.h>
#if defined(__NetBSD__)
-__RCSID("$NetBSD: indent.c,v 1.105 2021/10/05 16:33:25 rillig Exp $");
+__RCSID("$NetBSD: indent.c,v 1.106 2021/10/05 17:12:20 rillig Exp $");
#elif defined(__FreeBSD__)
__FBSDID("$FreeBSD: head/usr.bin/indent/indent.c 340138 2018-11-04 19:24:49Z oshogbo $");
#endif
@@ -501,19 +501,19 @@ main_prepare_parsing(void)
parse(semicolon);
char *p = buf_ptr;
- int col = 1;
+ int ind = 0;
for (;;) {
if (*p == ' ')
- col++;
+ ind++;
else if (*p == '\t')
- col = opt.tabsize * (1 + (col - 1) / opt.tabsize) + 1;
+ ind = opt.tabsize * (1 + ind / opt.tabsize);
else
break;
p++;
}
- if (col > opt.indent_size)
- ps.ind_level = ps.ind_level_follow = col / opt.indent_size;
+ if (ind >= opt.indent_size)
+ ps.ind_level = ps.ind_level_follow = (ind + 1) / opt.indent_size;
}
static void __attribute__((__noreturn__))