indent: fix Clang-Tidy warnings, clean up bakcopy
The comment above and inside bakcopy had been outdated for at least the last 28 years, the backup file is named "%s.BAK", not ".B%s". Prevent buffer overflow for very long filenames (sprintf -> snprintf).
This commit is contained in:
parent
ed959c6f7e
commit
54a4dc048b
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: indent.c,v 1.102 2021/10/05 06:49:19 rillig Exp $ */
|
||||
/* $NetBSD: indent.c,v 1.103 2021/10/05 06:55:24 rillig Exp $ */
|
||||
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-4-Clause
|
||||
|
@ -43,7 +43,7 @@ static char sccsid[] = "@(#)indent.c 5.17 (Berkeley) 6/7/93";
|
|||
|
||||
#include <sys/cdefs.h>
|
||||
#if defined(__NetBSD__)
|
||||
__RCSID("$NetBSD: indent.c,v 1.102 2021/10/05 06:49:19 rillig Exp $");
|
||||
__RCSID("$NetBSD: indent.c,v 1.103 2021/10/05 06:55:24 rillig Exp $");
|
||||
#elif defined(__FreeBSD__)
|
||||
__FBSDID("$FreeBSD: head/usr.bin/indent/indent.c 340138 2018-11-04 19:24:49Z oshogbo $");
|
||||
#endif
|
||||
|
@ -607,7 +607,6 @@ want_blank_before_lparen(void)
|
|||
static void
|
||||
process_lparen_or_lbracket(int dec_ind, bool tabs_to_var, bool sp_sw)
|
||||
{
|
||||
/* count parens to make Healy happy */
|
||||
if (++ps.p_l_follow == nitems(ps.paren_indents)) {
|
||||
diag(0, "Reached internal limit of %zu unclosed parens",
|
||||
nitems(ps.paren_indents));
|
||||
|
@ -625,13 +624,13 @@ process_lparen_or_lbracket(int dec_ind, bool tabs_to_var, bool sp_sw)
|
|||
*code.e++ = token.s[0];
|
||||
|
||||
ps.paren_indents[ps.p_l_follow - 1] =
|
||||
indentation_after_range(0, code.s, code.e);
|
||||
(short)indentation_after_range(0, code.s, code.e);
|
||||
debug_println("paren_indent[%d] is now %d",
|
||||
ps.p_l_follow - 1, ps.paren_indents[ps.p_l_follow - 1]);
|
||||
|
||||
if (sp_sw && ps.p_l_follow == 1 && opt.extra_expression_indent
|
||||
&& ps.paren_indents[0] < 2 * opt.indent_size) {
|
||||
ps.paren_indents[0] = 2 * opt.indent_size;
|
||||
ps.paren_indents[0] = (short)(2 * opt.indent_size);
|
||||
debug_println("paren_indent[0] is now %d", ps.paren_indents[0]);
|
||||
}
|
||||
if (ps.in_or_st && *token.s == '(' && ps.tos <= 2) {
|
||||
|
@ -733,7 +732,7 @@ static void
|
|||
process_question(int *inout_squest)
|
||||
{
|
||||
(*inout_squest)++; /* this will be used when a later colon
|
||||
* appears so we can distinguish the
|
||||
* appears, so we can distinguish the
|
||||
* <c>?<n>:<n> construct */
|
||||
if (ps.want_blank)
|
||||
*code.e++ = ' ';
|
||||
|
@ -1425,37 +1424,31 @@ main(int argc, char **argv)
|
|||
}
|
||||
|
||||
/*
|
||||
* copy input file to backup file if in_name is /blah/blah/blah/file, then
|
||||
* backup file will be ".Bfile" then make the backup file the input and
|
||||
* original input file the output
|
||||
* Copy the input file to the backup file, then make the backup file the input
|
||||
* and the original input file the output.
|
||||
*/
|
||||
static void
|
||||
bakcopy(void)
|
||||
{
|
||||
ssize_t n;
|
||||
int bakchn;
|
||||
int bak_fd;
|
||||
char buff[8 * 1024];
|
||||
const char *p;
|
||||
|
||||
/* construct file name .Bfile */
|
||||
for (p = in_name; *p != '\0'; p++); /* skip to end of string */
|
||||
while (p > in_name && *p != '/') /* find last '/' */
|
||||
p--;
|
||||
if (*p == '/')
|
||||
p++;
|
||||
sprintf(bakfile, "%s%s", p, backup_suffix);
|
||||
const char *last_slash = strrchr(in_name, '/');
|
||||
snprintf(bakfile, sizeof(bakfile), "%s%s",
|
||||
last_slash != NULL ? last_slash + 1 : in_name, backup_suffix);
|
||||
|
||||
/* copy in_name to backup file */
|
||||
bakchn = creat(bakfile, 0600);
|
||||
if (bakchn < 0)
|
||||
bak_fd = creat(bakfile, 0600);
|
||||
if (bak_fd < 0)
|
||||
err(1, "%s", bakfile);
|
||||
while ((n = read(fileno(input), buff, sizeof(buff))) > 0)
|
||||
if (write(bakchn, buff, (size_t)n) != n)
|
||||
if (write(bak_fd, buff, (size_t)n) != n)
|
||||
err(1, "%s", bakfile);
|
||||
if (n < 0)
|
||||
err(1, "%s", in_name);
|
||||
close(bakchn);
|
||||
fclose(input);
|
||||
close(bak_fd);
|
||||
(void)fclose(input);
|
||||
|
||||
/* re-open backup file as the input file */
|
||||
input = fopen(bakfile, "r");
|
||||
|
@ -1492,7 +1485,7 @@ indent_declaration(int cur_dec_ind, bool tabs_to_var)
|
|||
pos = tpos;
|
||||
}
|
||||
}
|
||||
check_size_code((size_t)(cur_dec_ind - pos + 1));
|
||||
check_size_code((size_t)(cur_dec_ind - pos) + 1);
|
||||
while (pos < cur_dec_ind) {
|
||||
*code.e++ = ' ';
|
||||
pos++;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: parse.c,v 1.28 2021/10/05 06:24:06 rillig Exp $ */
|
||||
/* $NetBSD: parse.c,v 1.29 2021/10/05 06:55:24 rillig Exp $ */
|
||||
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-4-Clause
|
||||
|
@ -189,10 +189,10 @@ parse(token_type ttype)
|
|||
ps.cstk[ps.tos] = case_ind;
|
||||
/* save current case indent level */
|
||||
ps.il[ps.tos] = ps.ind_level_follow;
|
||||
case_ind = ps.ind_level_follow + opt.case_indent; /* cases should be
|
||||
* one level deeper than the switch */
|
||||
ps.ind_level_follow += opt.case_indent + 1; /* statements should be
|
||||
* two levels deeper */
|
||||
/* cases should be one level deeper than the switch */
|
||||
case_ind = (float)ps.ind_level_follow + opt.case_indent;
|
||||
/* statements should be two levels deeper */
|
||||
ps.ind_level_follow += (int)opt.case_indent + 1;
|
||||
ps.search_brace = opt.btype_2;
|
||||
break;
|
||||
|
||||
|
@ -258,7 +258,7 @@ reduce_stmt(void)
|
|||
ps.ind_level_follow = ps.il[i];
|
||||
/*
|
||||
* for the time being, we will assume that there is no else on this
|
||||
* if, and set the indentation level accordingly. If an else is
|
||||
* if, and set the indentation level accordingly. If an 'else' is
|
||||
* scanned, it will be fixed up later
|
||||
*/
|
||||
return true;
|
||||
|
|
Loading…
Reference in New Issue