Module Name: src
Committed By: manu
Date: Fri Jul 12 15:48:39 UTC 2024
Modified Files:
src/usr.bin/patch: patch.c pch.c pch.h
Log Message:
Let patch(1) handle lines of length beyond INT16_MAX
Borrowed from OpenBSD
https://marc.info/?l=openbsd-bugs&m=168907249732754
To generate a diff of this commit:
cvs rdiff -u -r1.34 -r1.35 src/usr.bin/patch/patch.c
cvs rdiff -u -r1.33 -r1.34 src/usr.bin/patch/pch.c
cvs rdiff -u -r1.10 -r1.11 src/usr.bin/patch/pch.h
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/patch/patch.c
diff -u src/usr.bin/patch/patch.c:1.34 src/usr.bin/patch/patch.c:1.35
--- src/usr.bin/patch/patch.c:1.34 Fri Jun 16 11:27:00 2023
+++ src/usr.bin/patch/patch.c Fri Jul 12 15:48:39 2024
@@ -1,7 +1,7 @@
/*
* $OpenBSD: patch.c,v 1.45 2007/04/18 21:52:24 sobrado Exp $
* $DragonFly: src/usr.bin/patch/patch.c,v 1.10 2008/08/10 23:39:56 joerg Exp $
- * $NetBSD: patch.c,v 1.34 2023/06/16 11:27:00 wiz Exp $
+ * $NetBSD: patch.c,v 1.35 2024/07/12 15:48:39 manu Exp $
*/
/*
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: patch.c,v 1.34 2023/06/16 11:27:00 wiz Exp $");
+__RCSID("$NetBSD: patch.c,v 1.35 2024/07/12 15:48:39 manu Exp $");
#include <sys/types.h>
#include <sys/stat.h>
@@ -106,7 +106,7 @@ static void copy_till(LINENUM, bool);
static bool spew_output(void);
static void dump_line(LINENUM, bool);
static bool patch_match(LINENUM, LINENUM, LINENUM);
-static bool similar(const char *, const char *, int);
+static bool similar(const char *, const char *, ssize_t);
__dead static void usage(void);
/* true if -E was specified on command line. */
@@ -1027,7 +1027,7 @@ patch_match(LINENUM base, LINENUM offset
LINENUM pat_lines = pch_ptrn_lines() - fuzz;
const char *ilineptr;
const char *plineptr;
- short plinelen;
+ ssize_t plinelen;
for (iline = base + offset + fuzz; pline <= pat_lines; pline++, iline++) {
ilineptr = ifetch(iline, offset >= 0);
@@ -1063,7 +1063,7 @@ patch_match(LINENUM base, LINENUM offset
* Do two lines match with canonicalized white space?
*/
static bool
-similar(const char *a, const char *b, int len)
+similar(const char *a, const char *b, ssize_t len)
{
while (len) {
if (isspace((unsigned char)*b)) { /* whitespace (or \n) to match? */
Index: src/usr.bin/patch/pch.c
diff -u src/usr.bin/patch/pch.c:1.33 src/usr.bin/patch/pch.c:1.34
--- src/usr.bin/patch/pch.c:1.33 Fri Jun 16 23:31:53 2023
+++ src/usr.bin/patch/pch.c Fri Jul 12 15:48:39 2024
@@ -1,7 +1,7 @@
/*
* $OpenBSD: pch.c,v 1.37 2007/09/02 15:19:33 deraadt Exp $
* $DragonFly: src/usr.bin/patch/pch.c,v 1.6 2008/08/10 23:35:40 joerg Exp $
- * $NetBSD: pch.c,v 1.33 2023/06/16 23:31:53 wiz Exp $
+ * $NetBSD: pch.c,v 1.34 2024/07/12 15:48:39 manu Exp $
*/
/*
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: pch.c,v 1.33 2023/06/16 23:31:53 wiz Exp $");
+__RCSID("$NetBSD: pch.c,v 1.34 2024/07/12 15:48:39 manu Exp $");
#include <sys/types.h>
#include <sys/stat.h>
@@ -61,7 +61,7 @@ static LINENUM p_max; /* max allowed va
static LINENUM p_context = 3; /* # of context lines */
static LINENUM p_input_line = 0; /* current line # from patch file */
static char **p_line = NULL;/* the text of the hunk */
-static short *p_len = NULL; /* length of each line */
+static ssize_t *p_len = NULL; /* length of each line */
static char *p_char = NULL; /* +, -, and ! */
static int hunkmax = INITHUNKMAX; /* size of above arrays to begin with */
static int p_indent; /* indent to patch */
@@ -135,7 +135,7 @@ set_hunkmax(void)
if (p_line == NULL)
p_line = calloc((size_t) hunkmax, sizeof(char *));
if (p_len == NULL)
- p_len = calloc((size_t) hunkmax, sizeof(short));
+ p_len = calloc((size_t) hunkmax, sizeof(ssize_t));
if (p_char == NULL)
p_char = calloc((size_t) hunkmax, sizeof(char));
}
@@ -148,7 +148,7 @@ grow_hunkmax(void)
{
int new_hunkmax;
char **new_p_line;
- short *new_p_len;
+ ssize_t *new_p_len;
char *new_p_char;
new_hunkmax = hunkmax * 2;
@@ -160,7 +160,7 @@ grow_hunkmax(void)
if (new_p_line == NULL)
free(p_line);
- new_p_len = pch_realloc(p_len, new_hunkmax, sizeof(short));
+ new_p_len = pch_realloc(p_len, new_hunkmax, sizeof(ssize_t));
if (new_p_len == NULL)
free(p_len);
@@ -1207,7 +1207,7 @@ bool
pch_swap(void)
{
char **tp_line; /* the text of the hunk */
- short *tp_len; /* length of each line */
+ ssize_t *tp_len; /* length of each line */
char *tp_char; /* +, -, and ! */
LINENUM i;
LINENUM n;
@@ -1364,7 +1364,7 @@ pch_context(void)
/*
* Return the length of a particular patch line.
*/
-short
+ssize_t
pch_line_len(LINENUM line)
{
return p_len[line];
Index: src/usr.bin/patch/pch.h
diff -u src/usr.bin/patch/pch.h:1.10 src/usr.bin/patch/pch.h:1.11
--- src/usr.bin/patch/pch.h:1.10 Fri Sep 19 18:33:34 2008
+++ src/usr.bin/patch/pch.h Fri Jul 12 15:48:39 2024
@@ -1,7 +1,7 @@
/*
* $OpenBSD: pch.h,v 1.9 2003/10/31 20:20:45 millert Exp $
* $DragonFly: src/usr.bin/patch/pch.h,v 1.1 2004/09/24 18:44:28 joerg Exp $
- * $NetBSD: pch.h,v 1.10 2008/09/19 18:33:34 joerg Exp $
+ * $NetBSD: pch.h,v 1.11 2024/07/12 15:48:39 manu Exp $
*/
/*
@@ -47,7 +47,7 @@ bool there_is_another_patch(void);
bool another_hunk(void);
bool pch_swap(void);
char *pfetch(LINENUM);
-short pch_line_len(LINENUM);
+ssize_t pch_line_len(LINENUM);
LINENUM pch_first(void);
LINENUM pch_ptrn_lines(void);
LINENUM pch_newfirst(void);