Compare commits
16 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
30c705e495 | ||
|
|
fd5c7c3b39 | ||
|
|
66c0191743 |
||
|
|
f07f8c37a4 | ||
|
|
3ef05884d7 | ||
|
|
1159f22114 | ||
|
|
d7a248ef6e | ||
|
|
e55ec778c3 | ||
|
|
0d56b9fccf | ||
|
|
efeeb64f37 | ||
|
|
112f3556e3 | ||
|
|
33ebdf4509 | ||
|
|
9421e38500 | ||
|
|
22cf0d6a15 | ||
|
|
0ea6b50511 | ||
|
|
96115b78aa |
25 changed files with 390 additions and 829 deletions
1
.fmf/version
Normal file
1
.fmf/version
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
1
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -9,3 +9,5 @@ diffutils-2.8.1.tar.gz
|
||||||
/diffutils-3.8.tar.xz
|
/diffutils-3.8.tar.xz
|
||||||
/diffutils-3.9.tar.xz
|
/diffutils-3.9.tar.xz
|
||||||
/diffutils-3.10.tar.xz
|
/diffutils-3.10.tar.xz
|
||||||
|
/diffutils-3.11.tar.xz
|
||||||
|
/diffutils-3.12.tar.xz
|
||||||
|
|
|
||||||
85
0001-sdiff-pacify-gcc-flto-Wmaybe-uninitialized.patch
Normal file
85
0001-sdiff-pacify-gcc-flto-Wmaybe-uninitialized.patch
Normal file
|
|
@ -0,0 +1,85 @@
|
||||||
|
From 45a4762bf3241e7fb6a2e01d382791ae44236841 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Paul Eggert <eggert@cs.ucla.edu>
|
||||||
|
Date: Wed, 23 Apr 2025 11:34:20 -0700
|
||||||
|
Subject: [PATCH] sdiff: pacify gcc -flto -Wmaybe-uninitialized
|
||||||
|
|
||||||
|
* src/sdiff.c (edit): Portmanteauize two locals into one, which
|
||||||
|
arguably makes the code clearer, and anyway pacifies gcc -flto
|
||||||
|
-Wmaybe-uninitialized with gcc (GCC) 15.0.1 20250329 (Red Hat
|
||||||
|
15.0.1-0) x86-64 (Bug#78019).
|
||||||
|
---
|
||||||
|
src/sdiff.c | 19 +++++++++++--------
|
||||||
|
1 file changed, 11 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/sdiff.c b/src/sdiff.c
|
||||||
|
index 5b1b162..15b8dce 100644
|
||||||
|
--- a/src/sdiff.c
|
||||||
|
+++ b/src/sdiff.c
|
||||||
|
@@ -857,8 +857,7 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen,
|
||||||
|
{
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
- int cmd0;
|
||||||
|
- int cmd1;
|
||||||
|
+ int cmd;
|
||||||
|
bool gotcmd = false;
|
||||||
|
|
||||||
|
while (! gotcmd)
|
||||||
|
@@ -867,8 +866,8 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen,
|
||||||
|
perror_fatal (_("write failed"));
|
||||||
|
ck_fflush (stdout);
|
||||||
|
|
||||||
|
- cmd0 = skip_white ();
|
||||||
|
- switch (cmd0)
|
||||||
|
+ cmd = skip_white ();
|
||||||
|
+ switch (cmd)
|
||||||
|
{
|
||||||
|
case '1': case '2': case 'l': case 'r':
|
||||||
|
case 's': case 'v': case 'q':
|
||||||
|
@@ -882,12 +881,15 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen,
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'e':
|
||||||
|
- cmd1 = skip_white ();
|
||||||
|
+ int cmd1 = skip_white ();
|
||||||
|
switch (cmd1)
|
||||||
|
{
|
||||||
|
case '1': case '2': case 'b': case 'd': case 'l': case 'r':
|
||||||
|
if (skip_white () == '\n')
|
||||||
|
- gotcmd = true;
|
||||||
|
+ {
|
||||||
|
+ gotcmd = true;
|
||||||
|
+ cmd |= cmd1 << UCHAR_WIDTH;
|
||||||
|
+ }
|
||||||
|
else
|
||||||
|
{
|
||||||
|
give_help ();
|
||||||
|
@@ -908,7 +910,7 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen,
|
||||||
|
if (feof (stdin))
|
||||||
|
{
|
||||||
|
gotcmd = true;
|
||||||
|
- cmd0 = 'q';
|
||||||
|
+ cmd = 'q';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
FALLTHROUGH;
|
||||||
|
@@ -921,7 +923,7 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- switch (cmd0)
|
||||||
|
+ switch (cmd & UCHAR_MAX)
|
||||||
|
{
|
||||||
|
case '1': case 'l':
|
||||||
|
lf_copy (left, llen, outfile);
|
||||||
|
@@ -954,6 +956,7 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen,
|
||||||
|
if (! tmp)
|
||||||
|
perror_fatal (squote (0, tmpname));
|
||||||
|
|
||||||
|
+ int cmd1 = cmd >> UCHAR_WIDTH;
|
||||||
|
switch (cmd1)
|
||||||
|
{
|
||||||
|
case 'd':
|
||||||
|
--
|
||||||
|
2.48.1
|
||||||
|
|
||||||
27
0001-sdiff-port-back-to-C17.patch
Normal file
27
0001-sdiff-port-back-to-C17.patch
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
From 686357a40ca038edc902276cb3b33f4757d8cfb2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Paul Eggert <eggert@cs.ucla.edu>
|
||||||
|
Date: Sat, 26 Apr 2025 12:54:06 -0700
|
||||||
|
Subject: [PATCH] sdiff: port back to C17-
|
||||||
|
|
||||||
|
* src/sdiff.c (edit): Do not use a label just before a statement.
|
||||||
|
Problem reported by Bruno Haible (Bug#78032).
|
||||||
|
---
|
||||||
|
src/sdiff.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/sdiff.c b/src/sdiff.c
|
||||||
|
index 15b8dce..cc961c3 100644
|
||||||
|
--- a/src/sdiff.c
|
||||||
|
+++ b/src/sdiff.c
|
||||||
|
@@ -880,7 +880,7 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen,
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
- case 'e':
|
||||||
|
+ case 'e':;
|
||||||
|
int cmd1 = skip_white ();
|
||||||
|
switch (cmd1)
|
||||||
|
{
|
||||||
|
--
|
||||||
|
2.48.1
|
||||||
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
-----BEGIN PGP SIGNATURE-----
|
|
||||||
|
|
||||||
iQIzBAABCgAdFiEEFV0/xQDINEhtHupnf9n8ywAL7u4FAmRp3HUACgkQf9n8ywAL
|
|
||||||
7u5uJA/+MAaQc6ovuxdBJomue6M+KkLLjUhlA5GILfVmV1Jr99P+ke8QlKmr5kOX
|
|
||||||
q9xxGJS+Rkp4coEqtuS+lKnhRoXq2OhYuO439zrm3BKOz9il9gR7yd2hN21zEQ3I
|
|
||||||
kW+TEqjswawOh9wpubCk/C5WozxSLSVu3nUefF3rzVDGwNtG73Z4etDpTQ0OXCYw
|
|
||||||
9Owy3F7Bmnxg0Ae/ETkZ/l95zPOAGUXGNrHYJ5KaxT5AJVbeNAgqlP2SWQmyBX8m
|
|
||||||
Ui6ffjvjn8tr99uAZUoD64FDehQ6xPIS7uknuQ9yUMa6SR4877Axhaekfy0pwR6j
|
|
||||||
lKSZI2PAJqufaVCnlM8ZQzDleHHqbKUD8cvbjW2upPg0Ow6Ppu/VFnFAgtREQnIP
|
|
||||||
Wd6WdRil7WVcglrurPGiykENrRG204ZGIEauZkUgsSB9ONZKgEt13jsu7PAQn+Qf
|
|
||||||
vGQf7/sk3+eRMIhkglPgJVDqV36GlYkxt0MDe2yJ3tsu7ZUzREYSQ8m8EcUdJ3h1
|
|
||||||
xqFqaIpxxNzvyn7WtNeu3Ej1dD+lGTj8osLmGzSnCQ7eaFghtKJuUoTLnd0rcD9N
|
|
||||||
gW60pBb4DBEiPcAwqYmVmVwYKJ/afPf2qjfCDJDDm+nVHHPKeitzVNCnRVvnzJZc
|
|
||||||
55BV6ftNOHLV/H6Q7LDG9bF/WQR0HPu9UatdpYNUyggh45a3jlc=
|
|
||||||
=cXRh
|
|
||||||
-----END PGP SIGNATURE-----
|
|
||||||
30
diffutils-3.12-cross-compiler-build-fail.patch
Normal file
30
diffutils-3.12-cross-compiler-build-fail.patch
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
From d9083a4cc638cf9c7dfc3cc534a7c6b4debf50ab Mon Sep 17 00:00:00 2001
|
||||||
|
From: Bruno Haible <bruno@clisp.org>
|
||||||
|
Date: Thu, 10 Apr 2025 16:42:14 +0200
|
||||||
|
Subject: strcasecmp: Support cross-compilation.
|
||||||
|
|
||||||
|
Reported by Rudi Heitbaum <rudi@heitbaum.com> in
|
||||||
|
<https://lists.gnu.org/archive/html/bug-gnulib/2025-04/msg00055.html>.
|
||||||
|
|
||||||
|
diff --git a/m4/strcasecmp.m4 b/m4/strcasecmp.m4
|
||||||
|
index e40ee5d..eb4345d 100644
|
||||||
|
--- a/m4/strcasecmp.m4
|
||||||
|
+++ b/m4/strcasecmp.m4
|
||||||
|
@@ -1,5 +1,5 @@
|
||||||
|
# strcasecmp.m4
|
||||||
|
-# serial 2
|
||||||
|
+# serial 3
|
||||||
|
dnl Copyright (C) 2002-2025 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
@@ -57,7 +57,7 @@ int main ()
|
||||||
|
gl_cv_func_strcasecmp_works=no
|
||||||
|
fi
|
||||||
|
],
|
||||||
|
- [])
|
||||||
|
+ [:])
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
--
|
||||||
|
cgit v1.1
|
||||||
65
diffutils-3.12-sdiff-continue-break.patch
Normal file
65
diffutils-3.12-sdiff-continue-break.patch
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
commit 80053ab7b57c1f0825deb4a22018dacfa62d7272
|
||||||
|
Author: Paul Eggert <eggert@cs.ucla.edu>
|
||||||
|
Date: Wed Apr 23 11:17:53 2025 -0700
|
||||||
|
|
||||||
|
sdiff: continue → break
|
||||||
|
|
||||||
|
* src/sdiff.c (edit): Don’t use ‘continue’ when a simple
|
||||||
|
break from the switch will do.
|
||||||
|
|
||||||
|
diff --git a/src/sdiff.c b/src/sdiff.c
|
||||||
|
index 7734a82..5b1b162 100644
|
||||||
|
--- a/src/sdiff.c
|
||||||
|
+++ b/src/sdiff.c
|
||||||
|
@@ -872,13 +872,13 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen,
|
||||||
|
{
|
||||||
|
case '1': case '2': case 'l': case 'r':
|
||||||
|
case 's': case 'v': case 'q':
|
||||||
|
- if (skip_white () != '\n')
|
||||||
|
+ if (skip_white () == '\n')
|
||||||
|
+ gotcmd = true;
|
||||||
|
+ else
|
||||||
|
{
|
||||||
|
give_help ();
|
||||||
|
flush_line ();
|
||||||
|
- continue;
|
||||||
|
}
|
||||||
|
- gotcmd = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'e':
|
||||||
|
@@ -886,13 +886,13 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen,
|
||||||
|
switch (cmd1)
|
||||||
|
{
|
||||||
|
case '1': case '2': case 'b': case 'd': case 'l': case 'r':
|
||||||
|
- if (skip_white () != '\n')
|
||||||
|
+ if (skip_white () == '\n')
|
||||||
|
+ gotcmd = true;
|
||||||
|
+ else
|
||||||
|
{
|
||||||
|
give_help ();
|
||||||
|
flush_line ();
|
||||||
|
- continue;
|
||||||
|
}
|
||||||
|
- gotcmd = true;
|
||||||
|
break;
|
||||||
|
case '\n':
|
||||||
|
gotcmd = true;
|
||||||
|
@@ -900,7 +900,7 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen,
|
||||||
|
default:
|
||||||
|
give_help ();
|
||||||
|
flush_line ();
|
||||||
|
- continue;
|
||||||
|
+ break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
@@ -917,7 +917,7 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen,
|
||||||
|
FALLTHROUGH;
|
||||||
|
case '\n':
|
||||||
|
give_help ();
|
||||||
|
- continue;
|
||||||
|
+ break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
16
diffutils-3.12.tar.xz.sig
Normal file
16
diffutils-3.12.tar.xz.sig
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
-----BEGIN PGP SIGNATURE-----
|
||||||
|
|
||||||
|
iQIzBAABCgAdFiEEFV0/xQDINEhtHupnf9n8ywAL7u4FAmf14TEACgkQf9n8ywAL
|
||||||
|
7u5tEg//YI75CvWhml5WPNESJWoNVcb+ak8K5g29sHXE5RW9ZuzvEjHAy2IGpkmG
|
||||||
|
QbSC2GA3s1BhjIvrm567Xvnz5Rdn4lultZygznL/+oD4PMoantux4dF6P4KcO7jG
|
||||||
|
KNPWBF0+/gue9KeJIx4tIGXjQ7g/aAxN/U7UukD5NELrF/4KAsFSWC0PA++taGyd
|
||||||
|
R+kZNl3IX3rci0m4vMXCZX+h1td39NinLuYueOqniZhN84+kjfKfLe+EOPmpdSNr
|
||||||
|
md25Ez5vcZ7p1meHHFIRhW1xnyF4FEC5H1ePv56wMlKShtflS2/hjmQadlo+9CQn
|
||||||
|
fnotq12Yi2BEDwn/wlB9t0J4wgGVbvJM5Ie8ggK74ys77JsXbAtaTeJvCYKI/3bF
|
||||||
|
D2Xt2gI2+Xdfm7zr9xXg4ygf/AqJ0Dc1Cx0hNpgV4BRgMUjKnyp1VgE7bDZn6R4w
|
||||||
|
W2YRXMsKJQp8NpAk5+XI5El3EYoMcPuI6OQs+b+e98wcGgeeOafWjWrUliIUDln6
|
||||||
|
iTXtOBFebV0JtdSWdzNPrxT0+WbmdYSfP7qrqIgMrPHbp5cN7XjVPu6nky07N2RE
|
||||||
|
f4Q2Ny8KyCul8AskCNimYzGU0rsN1qQtDRSx2CR5ABYztwc/WY2KgXL9aGZ+eIfa
|
||||||
|
YRIpzush1GB5Bu50huAT2VCCqrk6VCg7v1vLfr3V/eszEUVhPZg=
|
||||||
|
=vkFD
|
||||||
|
-----END PGP SIGNATURE-----
|
||||||
|
|
@ -1,779 +0,0 @@
|
||||||
diff -up diffutils-3.10/src/diff.c.i18n diffutils-3.10/src/diff.c
|
|
||||||
--- diffutils-3.10/src/diff.c.i18n 2023-05-20 11:17:26.000000000 +0200
|
|
||||||
+++ diffutils-3.10/src/diff.c 2023-06-29 13:24:19.567608253 +0200
|
|
||||||
@@ -76,6 +76,8 @@ static _Noreturn void try_help (char con
|
|
||||||
static void check_stdout (void);
|
|
||||||
static void usage (void);
|
|
||||||
|
|
||||||
+bool (*lines_differ) (char const *, size_t, char const *, size_t);
|
|
||||||
+
|
|
||||||
/* If comparing directories, compare their common subdirectories
|
|
||||||
recursively. */
|
|
||||||
static bool recursive;
|
|
||||||
@@ -310,6 +312,14 @@ main (int argc, char **argv)
|
|
||||||
presume_output_tty = false;
|
|
||||||
xstdopen ();
|
|
||||||
|
|
||||||
+#ifdef HANDLE_MULTIBYTE
|
|
||||||
+ if (MB_CUR_MAX > 1)
|
|
||||||
+ lines_differ = lines_differ_multibyte;
|
|
||||||
+ else
|
|
||||||
+#endif
|
|
||||||
+ lines_differ = lines_differ_singlebyte;
|
|
||||||
+
|
|
||||||
+
|
|
||||||
/* Decode the options. */
|
|
||||||
|
|
||||||
while ((c = getopt_long (argc, argv, shortopts, longopts, nullptr)) != -1)
|
|
||||||
diff -up diffutils-3.10/src/diff.h.i18n diffutils-3.10/src/diff.h
|
|
||||||
--- diffutils-3.10/src/diff.h.i18n 2023-05-20 11:37:55.000000000 +0200
|
|
||||||
+++ diffutils-3.10/src/diff.h 2023-06-29 13:25:49.451271873 +0200
|
|
||||||
@@ -33,6 +33,17 @@ _GL_INLINE_HEADER_BEGIN
|
|
||||||
# define XTERN extern
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+/* For platforms which support the ISO C ammendment 1 functionality we
|
|
||||||
+ support user-defined character classes. */
|
|
||||||
+#if defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H
|
|
||||||
+/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */
|
|
||||||
+# include <wchar.h>
|
|
||||||
+# include <wctype.h>
|
|
||||||
+# if defined (HAVE_MBRTOWC)
|
|
||||||
+# define HANDLE_MULTIBYTE 1
|
|
||||||
+# endif
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
/* What kind of changes a hunk contains. */
|
|
||||||
enum changes
|
|
||||||
{
|
|
||||||
@@ -392,7 +403,11 @@ extern void print_sdiff_script (struct c
|
|
||||||
/* util.c */
|
|
||||||
extern char const change_letter[4];
|
|
||||||
extern char const pr_program[];
|
|
||||||
-extern bool lines_differ (char const *, char const *) ATTRIBUTE_PURE;
|
|
||||||
+extern bool (*lines_differ) (char const *, size_t, char const *, size_t) ATTRIBUTE_PURE;
|
|
||||||
+extern bool lines_differ_singlebyte (char const *, size_t, char const *, size_t) ATTRIBUTE_PURE;
|
|
||||||
+#ifdef HANDLE_MULTIBYTE
|
|
||||||
+extern bool lines_differ_multibyte (char const *, size_t, char const *, size_t) ATTRIBUTE_PURE;
|
|
||||||
+#endif
|
|
||||||
extern lin translate_line_number (struct file_data const *, lin);
|
|
||||||
extern struct change *find_change (struct change *);
|
|
||||||
extern struct change *find_reverse_change (struct change *);
|
|
||||||
diff -up diffutils-3.10/src/io.c.i18n diffutils-3.10/src/io.c
|
|
||||||
--- diffutils-3.10/src/io.c.i18n 2023-05-20 11:17:26.000000000 +0200
|
|
||||||
+++ diffutils-3.10/src/io.c 2023-06-29 13:20:52.457820950 +0200
|
|
||||||
@@ -23,6 +23,7 @@
|
|
||||||
#include <cmpbuf.h>
|
|
||||||
#include <file-type.h>
|
|
||||||
#include <xalloc.h>
|
|
||||||
+#include <assert.h>
|
|
||||||
|
|
||||||
/* Rotate an unsigned value to the left. */
|
|
||||||
#define ROL(v, n) ((v) << (n) | (v) >> (sizeof (v) * CHAR_BIT - (n)))
|
|
||||||
@@ -223,6 +224,28 @@ slurp (struct file_data *current)
|
|
||||||
|
|
||||||
/* Split the file into lines, simultaneously computing the equivalence
|
|
||||||
class for each line. */
|
|
||||||
+#ifdef HANDLE_MULTIBYTE
|
|
||||||
+# define MBC2WC(P, END, MBLENGTH, WC, STATE, CONVFAIL) \
|
|
||||||
+do \
|
|
||||||
+ { \
|
|
||||||
+ mbstate_t state_bak = STATE; \
|
|
||||||
+ \
|
|
||||||
+ CONVFAIL = 0; \
|
|
||||||
+ MBLENGTH = mbrtowc (&WC, P, END - (char const *)P, &STATE); \
|
|
||||||
+ \
|
|
||||||
+ switch (MBLENGTH) \
|
|
||||||
+ { \
|
|
||||||
+ case (size_t)-2: \
|
|
||||||
+ case (size_t)-1: \
|
|
||||||
+ STATE = state_bak; \
|
|
||||||
+ ++CONVFAIL; \
|
|
||||||
+ /* Fall through. */ \
|
|
||||||
+ case 0: \
|
|
||||||
+ MBLENGTH = 1; \
|
|
||||||
+ } \
|
|
||||||
+ } \
|
|
||||||
+ while (0)
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
static void
|
|
||||||
find_and_hash_each_line (struct file_data *current)
|
|
||||||
@@ -249,12 +272,300 @@ find_and_hash_each_line (struct file_dat
|
|
||||||
bool same_length_diff_contents_compare_anyway =
|
|
||||||
diff_length_compare_anyway | ig_case;
|
|
||||||
|
|
||||||
+#ifdef HANDLE_MULTIBYTE
|
|
||||||
+ wchar_t wc;
|
|
||||||
+ size_t mblength;
|
|
||||||
+ mbstate_t state;
|
|
||||||
+ int convfail;
|
|
||||||
+
|
|
||||||
+ memset (&state, '\0', sizeof (mbstate_t));
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
while (p < suffix_begin)
|
|
||||||
{
|
|
||||||
char const *ip = p;
|
|
||||||
hash_value h = 0;
|
|
||||||
unsigned char c;
|
|
||||||
|
|
||||||
+#ifdef HANDLE_MULTIBYTE
|
|
||||||
+ if (MB_CUR_MAX > 1)
|
|
||||||
+ {
|
|
||||||
+ wchar_t lo_wc;
|
|
||||||
+ char mbc[MB_LEN_MAX];
|
|
||||||
+ mbstate_t state_wc;
|
|
||||||
+
|
|
||||||
+ /* Hash this line until we find a newline. */
|
|
||||||
+ switch (ig_white_space)
|
|
||||||
+ {
|
|
||||||
+ case IGNORE_ALL_SPACE:
|
|
||||||
+ while (1)
|
|
||||||
+ {
|
|
||||||
+ if (*p == '\n')
|
|
||||||
+ {
|
|
||||||
+ ++p;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ MBC2WC (p, suffix_begin, mblength, wc, state, convfail);
|
|
||||||
+
|
|
||||||
+ if (convfail)
|
|
||||||
+ mbc[0] = *p++;
|
|
||||||
+ else if (!iswspace (wc))
|
|
||||||
+ {
|
|
||||||
+ bool flag = 0;
|
|
||||||
+
|
|
||||||
+ if (ig_case)
|
|
||||||
+ {
|
|
||||||
+ lo_wc = towlower (wc);
|
|
||||||
+ if (lo_wc != wc)
|
|
||||||
+ {
|
|
||||||
+ flag = 1;
|
|
||||||
+
|
|
||||||
+ p += mblength;
|
|
||||||
+ memset (&state_wc, '\0', sizeof(mbstate_t));
|
|
||||||
+ mblength = wcrtomb (mbc, lo_wc, &state_wc);
|
|
||||||
+
|
|
||||||
+ assert (mblength != (size_t)-1 &&
|
|
||||||
+ mblength != (size_t)-2);
|
|
||||||
+
|
|
||||||
+ mblength = (mblength < 1) ? 1 : mblength;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (!flag)
|
|
||||||
+ {
|
|
||||||
+ for (i = 0; i < mblength; i++)
|
|
||||||
+ mbc[i] = *p++;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ p += mblength;
|
|
||||||
+ continue;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < mblength; i++)
|
|
||||||
+ h = HASH (h, mbc[i]);
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ case IGNORE_SPACE_CHANGE:
|
|
||||||
+ while (1)
|
|
||||||
+ {
|
|
||||||
+ if (*p == '\n')
|
|
||||||
+ {
|
|
||||||
+ ++p;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ MBC2WC (p, suffix_begin, mblength, wc, state, convfail);
|
|
||||||
+
|
|
||||||
+ if (!convfail && iswspace (wc))
|
|
||||||
+ {
|
|
||||||
+ while (1)
|
|
||||||
+ {
|
|
||||||
+ if (*p == '\n')
|
|
||||||
+ {
|
|
||||||
+ ++p;
|
|
||||||
+ goto hashing_done;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ p += mblength;
|
|
||||||
+ MBC2WC (p, suffix_begin, mblength, wc, state, convfail);
|
|
||||||
+ if (convfail || !iswspace (wc))
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ h = HASH (h, ' ');
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* WC is now the first non-space. */
|
|
||||||
+ if (convfail)
|
|
||||||
+ mbc[0] = *p++;
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ bool flag = 0;
|
|
||||||
+
|
|
||||||
+ if (ignore_case)
|
|
||||||
+ {
|
|
||||||
+ lo_wc = towlower (wc);
|
|
||||||
+ if (lo_wc != wc)
|
|
||||||
+ {
|
|
||||||
+ flag = 1;
|
|
||||||
+
|
|
||||||
+ p += mblength;
|
|
||||||
+ memset (&state_wc, '\0', sizeof(mbstate_t));
|
|
||||||
+ mblength = wcrtomb (mbc, lo_wc, &state_wc);
|
|
||||||
+
|
|
||||||
+ assert (mblength != (size_t)-1 &&
|
|
||||||
+ mblength != (size_t)-2);
|
|
||||||
+
|
|
||||||
+ mblength = (mblength < 1) ? 1 : mblength;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (!flag)
|
|
||||||
+ {
|
|
||||||
+ for (i = 0; i < mblength; i++)
|
|
||||||
+ mbc[i] = *p++;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < mblength; i++)
|
|
||||||
+ h = HASH (h, mbc[i]);
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ case IGNORE_TAB_EXPANSION:
|
|
||||||
+ case IGNORE_TAB_EXPANSION_AND_TRAILING_SPACE:
|
|
||||||
+ case IGNORE_TRAILING_SPACE:
|
|
||||||
+ {
|
|
||||||
+ size_t column = 0;
|
|
||||||
+ while (1)
|
|
||||||
+ {
|
|
||||||
+ if (*p == '\n')
|
|
||||||
+ {
|
|
||||||
+ ++p;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ MBC2WC (p, suffix_begin, mblength, wc, state, convfail);
|
|
||||||
+
|
|
||||||
+ if (!convfail
|
|
||||||
+ && ig_white_space & IGNORE_TRAILING_SPACE
|
|
||||||
+ && iswspace (wc))
|
|
||||||
+ {
|
|
||||||
+ char const *p1 = p;
|
|
||||||
+ while (1)
|
|
||||||
+ {
|
|
||||||
+ if (*p1 == '\n')
|
|
||||||
+ {
|
|
||||||
+ p = p1 + 1;
|
|
||||||
+ goto hashing_done;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ p1 += mblength;
|
|
||||||
+ MBC2WC (p1, suffix_begin, mblength, wc, state, convfail);
|
|
||||||
+ if (convfail || !iswspace (wc))
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ size_t repetitions = 1;
|
|
||||||
+ bool no_convert = 0;
|
|
||||||
+
|
|
||||||
+ if (ig_white_space & IGNORE_TAB_EXPANSION)
|
|
||||||
+ {
|
|
||||||
+ if (convfail)
|
|
||||||
+ column++;
|
|
||||||
+ else
|
|
||||||
+ switch (wc)
|
|
||||||
+ {
|
|
||||||
+ case L'\b':
|
|
||||||
+ column -= 0 < column;
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ case L'\t':
|
|
||||||
+ mbc[0] = ' ';
|
|
||||||
+ mblength = 1;
|
|
||||||
+ no_convert = 1;
|
|
||||||
+ p++;
|
|
||||||
+ assert(mblength == 1);
|
|
||||||
+ repetitions = tabsize - column % tabsize;
|
|
||||||
+ column = (column + repetitions < column
|
|
||||||
+ ? 0
|
|
||||||
+ : column + repetitions);
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ case L'\r':
|
|
||||||
+ column = 0;
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ default:
|
|
||||||
+ column += wcwidth (wc);
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (ig_case)
|
|
||||||
+ {
|
|
||||||
+ lo_wc = towlower (wc);
|
|
||||||
+ if (lo_wc != wc)
|
|
||||||
+ {
|
|
||||||
+ no_convert = 1;
|
|
||||||
+ p += mblength;
|
|
||||||
+ memset (&state_wc, '\0', sizeof(mbstate_t));
|
|
||||||
+ mblength = wcrtomb (mbc, lo_wc, &state_wc);
|
|
||||||
+
|
|
||||||
+ assert (mblength != (size_t)-1 &&
|
|
||||||
+ mblength != (size_t)-2);
|
|
||||||
+
|
|
||||||
+ mblength = (mblength < 1) ? 1 : mblength;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (!no_convert)
|
|
||||||
+ for (i = 0; i < mblength; i++)
|
|
||||||
+ mbc[i] = *p++;
|
|
||||||
+
|
|
||||||
+ do
|
|
||||||
+ {
|
|
||||||
+ for (i = 0; i < mblength; i++)
|
|
||||||
+ h = HASH (h, mbc[i]);
|
|
||||||
+ }
|
|
||||||
+ while (--repetitions != 0);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ default:
|
|
||||||
+ while (1)
|
|
||||||
+ {
|
|
||||||
+ if (*p == '\n')
|
|
||||||
+ {
|
|
||||||
+ ++p;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ MBC2WC (p, suffix_begin, mblength, wc, state, convfail);
|
|
||||||
+
|
|
||||||
+ if (convfail)
|
|
||||||
+ mbc[0] = *p++;
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ int flag = 0;
|
|
||||||
+
|
|
||||||
+ if (ig_case)
|
|
||||||
+ {
|
|
||||||
+ lo_wc = towlower (wc);
|
|
||||||
+ if (lo_wc != wc)
|
|
||||||
+ {
|
|
||||||
+ flag = 1;
|
|
||||||
+ p += mblength;
|
|
||||||
+ memset (&state_wc, '\0', sizeof(mbstate_t));
|
|
||||||
+ mblength = wcrtomb (mbc, lo_wc, &state_wc);
|
|
||||||
+
|
|
||||||
+ assert (mblength != (size_t)-1 &&
|
|
||||||
+ mblength != (size_t)-2);
|
|
||||||
+
|
|
||||||
+ mblength = (mblength < 1) ? 1 : mblength;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (!flag)
|
|
||||||
+ {
|
|
||||||
+ for (i = 0; i < mblength; i++)
|
|
||||||
+ mbc[i] = *p++;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < mblength; i++)
|
|
||||||
+ h = HASH (h, mbc[i]);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
/* Hash this line until we find a newline. */
|
|
||||||
switch (ig_white_space)
|
|
||||||
{
|
|
||||||
@@ -405,7 +716,7 @@ find_and_hash_each_line (struct file_dat
|
|
||||||
else if (!diff_length_compare_anyway)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
- if (! lines_differ (eqline, ip))
|
|
||||||
+ if (! lines_differ (eqline, eqs[i].length + 1, ip, length + 1))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
diff -up diffutils-3.10/src/util.c.i18n diffutils-3.10/src/util.c
|
|
||||||
--- diffutils-3.10/src/util.c.i18n 2023-02-19 19:04:39.000000000 +0100
|
|
||||||
+++ diffutils-3.10/src/util.c 2023-06-29 13:20:52.457820950 +0200
|
|
||||||
@@ -1085,7 +1085,8 @@ finish_output (void)
|
|
||||||
Return nonzero if the lines differ. */
|
|
||||||
|
|
||||||
bool
|
|
||||||
-lines_differ (char const *s1, char const *s2)
|
|
||||||
+lines_differ_singlebyte (char const *s1, size_t s1len,
|
|
||||||
+ char const *s2, size_t s2len)
|
|
||||||
{
|
|
||||||
register char const *t1 = s1;
|
|
||||||
register char const *t2 = s2;
|
|
||||||
@@ -1241,6 +1242,354 @@ lines_differ (char const *s1, char const
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+#ifdef HANDLE_MULTIBYTE
|
|
||||||
+# define MBC2WC(T, END, MBLENGTH, WC, STATE, CONVFAIL) \
|
|
||||||
+do \
|
|
||||||
+ { \
|
|
||||||
+ mbstate_t bak = STATE; \
|
|
||||||
+ \
|
|
||||||
+ CONVFAIL = 0; \
|
|
||||||
+ MBLENGTH = mbrtowc (&WC, T, END - T, &STATE); \
|
|
||||||
+ \
|
|
||||||
+ switch (MBLENGTH) \
|
|
||||||
+ { \
|
|
||||||
+ case (size_t)-2: \
|
|
||||||
+ case (size_t)-1: \
|
|
||||||
+ STATE = bak; \
|
|
||||||
+ ++CONVFAIL; \
|
|
||||||
+ /* Fall through. */ \
|
|
||||||
+ case 0: \
|
|
||||||
+ MBLENGTH = 1; \
|
|
||||||
+ } \
|
|
||||||
+ } \
|
|
||||||
+ while (0)
|
|
||||||
+
|
|
||||||
+bool
|
|
||||||
+lines_differ_multibyte (char const *s1, size_t s1len,
|
|
||||||
+ char const *s2, size_t s2len)
|
|
||||||
+{
|
|
||||||
+ char const *end1, *end2;
|
|
||||||
+ char c1, c2;
|
|
||||||
+ wchar_t wc1, wc2, wc1_bak, wc2_bak;
|
|
||||||
+ size_t mblen1, mblen2;
|
|
||||||
+ mbstate_t state1, state2, state1_bak, state2_bak;
|
|
||||||
+ int convfail1, convfail2, convfail1_bak, convfail2_bak;
|
|
||||||
+
|
|
||||||
+ char const *t1 = s1;
|
|
||||||
+ char const *t2 = s2;
|
|
||||||
+ char const *t1_bak, *t2_bak;
|
|
||||||
+ size_t column = 0;
|
|
||||||
+
|
|
||||||
+ if (ignore_white_space == IGNORE_NO_WHITE_SPACE && !ignore_case)
|
|
||||||
+ {
|
|
||||||
+ while (*t1 != '\n')
|
|
||||||
+ if (*t1++ != *t2++)
|
|
||||||
+ return 1;
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ end1 = t1 + s1len;
|
|
||||||
+ end2 = t2 + s2len;
|
|
||||||
+
|
|
||||||
+ memset (&state1, '\0', sizeof (mbstate_t));
|
|
||||||
+ memset (&state2, '\0', sizeof (mbstate_t));
|
|
||||||
+
|
|
||||||
+ while (1)
|
|
||||||
+ {
|
|
||||||
+ c1 = *t1;
|
|
||||||
+ c2 = *t2;
|
|
||||||
+ MBC2WC (t1, end1, mblen1, wc1, state1, convfail1);
|
|
||||||
+ MBC2WC (t2, end2, mblen2, wc2, state2, convfail2);
|
|
||||||
+
|
|
||||||
+ /* Test for exact char equality first, since it's a common case. */
|
|
||||||
+ if (convfail1 ^ convfail2)
|
|
||||||
+ break;
|
|
||||||
+ else if (convfail1 && convfail2 && c1 != c2)
|
|
||||||
+ break;
|
|
||||||
+ else if (!convfail1 && !convfail2 && wc1 != wc2)
|
|
||||||
+ {
|
|
||||||
+ switch (ignore_white_space)
|
|
||||||
+ {
|
|
||||||
+ case IGNORE_ALL_SPACE:
|
|
||||||
+ /* For -w, just skip past any white space. */
|
|
||||||
+ while (1)
|
|
||||||
+ {
|
|
||||||
+ if (convfail1)
|
|
||||||
+ break;
|
|
||||||
+ else if (wc1 == L'\n' || !iswspace (wc1))
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ t1 += mblen1;
|
|
||||||
+ c1 = *t1;
|
|
||||||
+ MBC2WC (t1, end1, mblen1, wc1, state1, convfail1);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ while (1)
|
|
||||||
+ {
|
|
||||||
+ if (convfail2)
|
|
||||||
+ break;
|
|
||||||
+ else if (wc2 == L'\n' || !iswspace (wc2))
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ t2 += mblen2;
|
|
||||||
+ c2 = *t2;
|
|
||||||
+ MBC2WC (t2, end2, mblen2, wc2, state2, convfail2);
|
|
||||||
+ }
|
|
||||||
+ t1 += mblen1;
|
|
||||||
+ t2 += mblen2;
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ case IGNORE_SPACE_CHANGE:
|
|
||||||
+ /* For -b, advance past any sequence of white space in
|
|
||||||
+ line 1 and consider it just one space, or nothing at
|
|
||||||
+ all if it is at the end of the line. */
|
|
||||||
+ if (wc1 != L'\n' && iswspace (wc1))
|
|
||||||
+ {
|
|
||||||
+ size_t mblen_bak;
|
|
||||||
+ mbstate_t state_bak;
|
|
||||||
+
|
|
||||||
+ do
|
|
||||||
+ {
|
|
||||||
+ t1 += mblen1;
|
|
||||||
+ mblen_bak = mblen1;
|
|
||||||
+ state_bak = state1;
|
|
||||||
+ MBC2WC (t1, end1, mblen1, wc1, state1, convfail1);
|
|
||||||
+ }
|
|
||||||
+ while (!convfail1 && (wc1 != L'\n' && iswspace (wc1)));
|
|
||||||
+
|
|
||||||
+ state1 = state_bak;
|
|
||||||
+ mblen1 = mblen_bak;
|
|
||||||
+ t1 -= mblen1;
|
|
||||||
+ convfail1 = 0;
|
|
||||||
+ wc1 = L' ';
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Likewise for line 2. */
|
|
||||||
+ if (wc2 != L'\n' && iswspace (wc2))
|
|
||||||
+ {
|
|
||||||
+ size_t mblen_bak;
|
|
||||||
+ mbstate_t state_bak;
|
|
||||||
+
|
|
||||||
+ do
|
|
||||||
+ {
|
|
||||||
+ t2 += mblen2;
|
|
||||||
+ mblen_bak = mblen2;
|
|
||||||
+ state_bak = state2;
|
|
||||||
+ MBC2WC (t2, end2, mblen2, wc2, state2, convfail2);
|
|
||||||
+ }
|
|
||||||
+ while (!convfail2 && (wc2 != L'\n' && iswspace (wc2)));
|
|
||||||
+
|
|
||||||
+ state2 = state_bak;
|
|
||||||
+ mblen2 = mblen_bak;
|
|
||||||
+ t2 -= mblen2;
|
|
||||||
+ convfail2 = 0;
|
|
||||||
+ wc2 = L' ';
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (wc1 != wc2)
|
|
||||||
+ {
|
|
||||||
+ /* If we went too far when doing the simple test for
|
|
||||||
+ equality, go back to the first non-whitespace
|
|
||||||
+ character in both sides and try again. */
|
|
||||||
+ if (wc2 == L' ' && wc1 != L'\n' &&
|
|
||||||
+ t1 > s1 &&
|
|
||||||
+ !convfail1_bak && iswspace (wc1_bak))
|
|
||||||
+ {
|
|
||||||
+ t1 = t1_bak;
|
|
||||||
+ wc1 = wc1_bak;
|
|
||||||
+ state1 = state1_bak;
|
|
||||||
+ convfail1 = convfail1_bak;
|
|
||||||
+ continue;
|
|
||||||
+ }
|
|
||||||
+ if (wc1 == L' ' && wc2 != L'\n'
|
|
||||||
+ && t2 > s2
|
|
||||||
+ && !convfail2_bak && iswspace (wc2_bak))
|
|
||||||
+ {
|
|
||||||
+ t2 = t2_bak;
|
|
||||||
+ wc2 = wc2_bak;
|
|
||||||
+ state2 = state2_bak;
|
|
||||||
+ convfail2 = convfail2_bak;
|
|
||||||
+ continue;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ t1_bak = t1; t2_bak = t2;
|
|
||||||
+ wc1_bak = wc1; wc2_bak = wc2;
|
|
||||||
+ state1_bak = state1; state2_bak = state2;
|
|
||||||
+ convfail1_bak = convfail1; convfail2_bak = convfail2;
|
|
||||||
+
|
|
||||||
+ if (wc1 == L'\n')
|
|
||||||
+ wc1 = L' ';
|
|
||||||
+ else
|
|
||||||
+ t1 += mblen1;
|
|
||||||
+
|
|
||||||
+ if (wc2 == L'\n')
|
|
||||||
+ wc2 = L' ';
|
|
||||||
+ else
|
|
||||||
+ t2 += mblen2;
|
|
||||||
+
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ case IGNORE_TRAILING_SPACE:
|
|
||||||
+ case IGNORE_TAB_EXPANSION_AND_TRAILING_SPACE:
|
|
||||||
+ if (iswspace (wc1) && iswspace (wc2))
|
|
||||||
+ {
|
|
||||||
+ char const *p;
|
|
||||||
+ wchar_t wc;
|
|
||||||
+ size_t mblength;
|
|
||||||
+ int convfail;
|
|
||||||
+ mbstate_t state;
|
|
||||||
+ bool just_whitespace_left = 1;
|
|
||||||
+ if (wc1 != L'\n')
|
|
||||||
+ {
|
|
||||||
+ mblength = mblen1;
|
|
||||||
+ p = t1;
|
|
||||||
+ memset (&state, '\0', sizeof(mbstate_t));
|
|
||||||
+ while (p < end1)
|
|
||||||
+ {
|
|
||||||
+ if (*p == '\n')
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ p += mblength;
|
|
||||||
+ MBC2WC (p, end1, mblength, wc, state, convfail);
|
|
||||||
+ if (convfail || !iswspace (wc))
|
|
||||||
+ {
|
|
||||||
+ just_whitespace_left = 0;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ if (just_whitespace_left && wc2 != L'\n')
|
|
||||||
+ {
|
|
||||||
+ mblength = mblen2;
|
|
||||||
+ p = t2;
|
|
||||||
+ memset (&state, '\0', sizeof(mbstate_t));
|
|
||||||
+ while (p < end2)
|
|
||||||
+ {
|
|
||||||
+ if (*p == '\n')
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ p += mblength;
|
|
||||||
+ MBC2WC (p, end2, mblength, wc, state, convfail);
|
|
||||||
+ if (convfail || !iswspace (wc))
|
|
||||||
+ {
|
|
||||||
+ just_whitespace_left = 0;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (just_whitespace_left)
|
|
||||||
+ /* Both lines have nothing but whitespace left. */
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (ignore_white_space == IGNORE_TRAILING_SPACE)
|
|
||||||
+ break;
|
|
||||||
+ /* Fall through. */
|
|
||||||
+ case IGNORE_TAB_EXPANSION:
|
|
||||||
+ if ((wc1 == L' ' && wc2 == L'\t')
|
|
||||||
+ || (wc1 == L'\t' && wc2 == L' '))
|
|
||||||
+ {
|
|
||||||
+ size_t column2 = column;
|
|
||||||
+
|
|
||||||
+ while (1)
|
|
||||||
+ {
|
|
||||||
+ if (convfail1)
|
|
||||||
+ {
|
|
||||||
+ ++t1;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ else if (wc1 == L' ')
|
|
||||||
+ column++;
|
|
||||||
+ else if (wc1 == L'\t')
|
|
||||||
+ column += tabsize - column % tabsize;
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ t1 += mblen1;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ t1 += mblen1;
|
|
||||||
+ c1 = *t1;
|
|
||||||
+ MBC2WC (t1, end1, mblen1, wc1, state1, convfail1);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ while (1)
|
|
||||||
+ {
|
|
||||||
+ if (convfail2)
|
|
||||||
+ {
|
|
||||||
+ ++t2;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ else if (wc2 == L' ')
|
|
||||||
+ column2++;
|
|
||||||
+ else if (wc2 == L'\t')
|
|
||||||
+ column2 += tabsize - column2 % tabsize;
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ t2 += mblen2;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ t2 += mblen2;
|
|
||||||
+ c2 = *t2;
|
|
||||||
+ MBC2WC (t2, end2, mblen2, wc2, state2, convfail2);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (column != column2)
|
|
||||||
+ return 1;
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ t1 += mblen1;
|
|
||||||
+ t2 += mblen2;
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ case IGNORE_NO_WHITE_SPACE:
|
|
||||||
+ t1 += mblen1;
|
|
||||||
+ t2 += mblen2;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Lowercase all letters if -i is specified. */
|
|
||||||
+ if (ignore_case)
|
|
||||||
+ {
|
|
||||||
+ if (!convfail1)
|
|
||||||
+ wc1 = towlower (wc1);
|
|
||||||
+ if (!convfail2)
|
|
||||||
+ wc2 = towlower (wc2);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (convfail1 ^ convfail2)
|
|
||||||
+ break;
|
|
||||||
+ else if (convfail1 && convfail2 && c1 != c2)
|
|
||||||
+ break;
|
|
||||||
+ else if (!convfail1 && !convfail2 && wc1 != wc2)
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ t1_bak = t1; t2_bak = t2;
|
|
||||||
+ wc1_bak = wc1; wc2_bak = wc2;
|
|
||||||
+ state1_bak = state1; state2_bak = state2;
|
|
||||||
+ convfail1_bak = convfail1; convfail2_bak = convfail2;
|
|
||||||
+
|
|
||||||
+ t1 += mblen1; t2 += mblen2;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (!convfail1 && wc1 == L'\n')
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+ column += convfail1 ? 1 :
|
|
||||||
+ (wc1 == L'\t') ? tabsize - column % tabsize : wcwidth (wc1);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return 1;
|
|
||||||
+}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
/* Find the consecutive changes at the start of the script START.
|
|
||||||
Return the last link before the first gap. */
|
|
||||||
|
|
@ -1,10 +1,18 @@
|
||||||
Summary: GNU collection of diff utilities
|
Summary: GNU collection of diff utilities
|
||||||
Name: diffutils
|
Name: diffutils
|
||||||
Version: 3.10
|
Version: 3.12
|
||||||
Release: 1%{?dist}
|
Release: 3%{?dist}
|
||||||
URL: https://www.gnu.org/software/diffutils/diffutils.html
|
URL: https://www.gnu.org/software/diffutils/diffutils.html
|
||||||
Source: https://ftp.gnu.org/gnu/diffutils/diffutils-%{version}.tar.xz
|
Source: https://ftp.gnu.org/gnu/diffutils/diffutils-%{version}.tar.xz
|
||||||
Patch0: diffutils-i18n.patch
|
# upstream fixes
|
||||||
|
# cross compile build of 3.12 diffutils fails
|
||||||
|
Patch: diffutils-3.12-cross-compiler-build-fail.patch
|
||||||
|
# sdiff: continue → break
|
||||||
|
Patch: diffutils-3.12-sdiff-continue-break.patch
|
||||||
|
# sdiff: pacify gcc -flto -Wmaybe-uninitialized
|
||||||
|
Patch: 0001-sdiff-pacify-gcc-flto-Wmaybe-uninitialized.patch
|
||||||
|
# sdiff: port back to C17
|
||||||
|
Patch: 0001-sdiff-port-back-to-C17.patch
|
||||||
License: GPL-3.0-or-later
|
License: GPL-3.0-or-later
|
||||||
Provides: bundled(gnulib)
|
Provides: bundled(gnulib)
|
||||||
BuildRequires: gcc
|
BuildRequires: gcc
|
||||||
|
|
@ -26,9 +34,7 @@ to merge two files interactively.
|
||||||
Install diffutils if you need to compare text files.
|
Install diffutils if you need to compare text files.
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q
|
%autosetup -p1
|
||||||
# Multibyte
|
|
||||||
%patch -P0 -p1 -b .i18n
|
|
||||||
|
|
||||||
# Run autoreconf for aarch64 support (bug #925256).
|
# Run autoreconf for aarch64 support (bug #925256).
|
||||||
autoreconf
|
autoreconf
|
||||||
|
|
@ -56,6 +62,52 @@ make check
|
||||||
%{_infodir}/diffutils.info*
|
%{_infodir}/diffutils.info*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Jul 23 2025 Fedora Release Engineering <releng@fedoraproject.org> - 3.12-3
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
|
||||||
|
|
||||||
|
* Mon May 05 2025 Than Ngo <than@redhat.com> - 3.12-2
|
||||||
|
- Upstream patches
|
||||||
|
* cross compile build of 3.12 diffutils fails
|
||||||
|
* sdiff: continue → break
|
||||||
|
* sdiff: pacify gcc -flto -Wmaybe-uninitialized
|
||||||
|
* sdiff: port back to C17
|
||||||
|
|
||||||
|
* Fri Apr 11 2025 Than Ngo <than@redhat.com> - 3.12-1
|
||||||
|
- Fixed rhbz#2358545, Update to 3.12
|
||||||
|
|
||||||
|
* Thu Mar 27 2025 Than Ngo <than@redhat.com> - 3.11-3
|
||||||
|
- diff does not show a unified diff when one of the file is empty
|
||||||
|
|
||||||
|
* Thu Mar 27 2025 Than Ngo <than@redhat.com> - 3.11-2
|
||||||
|
- Backported upstream patch, Fixed allocation typo leading to crash
|
||||||
|
|
||||||
|
* Thu Mar 27 2025 Than Ngo <than@redhat.com> - 3.11-1
|
||||||
|
- Fixed rhbz#2343469, Update to 3.11
|
||||||
|
|
||||||
|
* Thu Jan 16 2025 Fedora Release Engineering <releng@fedoraproject.org> - 3.10-9
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
|
||||||
|
|
||||||
|
* Tue Jul 30 2024 Than Ngo <than@redhat.com> - 3.10-8
|
||||||
|
- refresh patch for 'cmp -s'
|
||||||
|
|
||||||
|
* Tue Jul 23 2024 Than Ngo <than@redhat.com> - 3.10-7
|
||||||
|
- fix a regression, 'cmp -s' returns 1 even if files are identical
|
||||||
|
|
||||||
|
* Wed Jul 17 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.10-6
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
|
||||||
|
|
||||||
|
* Wed Jan 24 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.10-5
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||||
|
|
||||||
|
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.10-4
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||||
|
|
||||||
|
* Wed Jul 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 3.10-3
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
|
||||||
|
|
||||||
|
* Wed Jul 05 2023 Than Ngo <than@redhat.com> - 3.10-2
|
||||||
|
- Fix output of "diff -l -y" for non-ASCII input files
|
||||||
|
|
||||||
* Thu Jun 29 2023 Than Ngo <than@redhat.com> - 3.10-1
|
* Thu Jun 29 2023 Than Ngo <than@redhat.com> - 3.10-1
|
||||||
- Fix bz#2208831, update to 3.10
|
- Fix bz#2208831, update to 3.10
|
||||||
- Fix bz#2196671, diff -D no longer fails to output #ifndef lines introduced in 3.9
|
- Fix bz#2196671, diff -D no longer fails to output #ifndef lines introduced in 3.9
|
||||||
|
|
|
||||||
5
plans/ci.fmf
Normal file
5
plans/ci.fmf
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
summary: Basic smoke test
|
||||||
|
discover:
|
||||||
|
how: fmf
|
||||||
|
execute:
|
||||||
|
how: tmt
|
||||||
2
sources
2
sources
|
|
@ -1 +1 @@
|
||||||
SHA512 (diffutils-3.10.tar.xz) = 219d2c815a120690c6589846271e43aee5c96c61a7ee4abbef97dfcdb3d6416652ed494b417de0ab6688c4322540d48be63b5e617beb6d20530b5d55d723ccbb
|
SHA512 (diffutils-3.12.tar.xz) = 10b17cf1dcdfa9ca0e5db91d62c4a079ebe9fd7eafa3aaebd4eb7e6206e4d753f348496622aa281e1bd7f7fcde65ce4a886dcc4acbb59332ef980f224197b4e4
|
||||||
|
|
|
||||||
17
tests/cmp-s-returns-1-even-if-files-are-identical/main.fmf
Normal file
17
tests/cmp-s-returns-1-even-if-files-are-identical/main.fmf
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
summary: Test for cmp -s returns 1 even if files are identical
|
||||||
|
description: "Bug summary: cmp -s returns 1 even if files are identical\n\nDescription:\n\
|
||||||
|
'cmp -s' can return 1 even if files are identical, for example, if comparing\n\
|
||||||
|
a file from /proc with a copy of that file in /tmp, since all files in\n/proc
|
||||||
|
have a size of 0 bytes.\n"
|
||||||
|
contact: Jeffrey Bastian <jbastian@redhat.com>
|
||||||
|
component:
|
||||||
|
- diffutils
|
||||||
|
test: ./runtest.sh
|
||||||
|
framework: beakerlib
|
||||||
|
recommend:
|
||||||
|
- diffutils
|
||||||
|
duration: 5m
|
||||||
|
extra-summary:
|
||||||
|
/CoreOS/diffutils/Regression/cmp-s-returns-1-even-if-files-are-identical
|
||||||
|
extra-task:
|
||||||
|
/CoreOS/diffutils/Regression/cmp-s-returns-1-even-if-files-are-identical
|
||||||
3
tests/cmp-s-returns-1-even-if-files-are-identical/runtest.sh
Normal file → Executable file
3
tests/cmp-s-returns-1-even-if-files-are-identical/runtest.sh
Normal file → Executable file
|
|
@ -26,8 +26,7 @@
|
||||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
# Include rhts environment
|
# Include rhts environment
|
||||||
. /usr/bin/rhts-environment.sh
|
. /usr/share/beakerlib/beakerlib.sh || exit 1
|
||||||
. /usr/share/rhts-library/rhtslib.sh
|
|
||||||
|
|
||||||
PACKAGE="diffutils"
|
PACKAGE="diffutils"
|
||||||
#set -x
|
#set -x
|
||||||
|
|
|
||||||
13
tests/diff-Z-hangs/main.fmf
Normal file
13
tests/diff-Z-hangs/main.fmf
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
summary: Test for diffutils to check if comparing two files using diff -Z with
|
||||||
|
mixed line endings doesn't hang
|
||||||
|
description: "Bug summary: diff -Z hangs\n"
|
||||||
|
contact: Filip Holec <fholec@redhat.com>
|
||||||
|
component:
|
||||||
|
- diffutils
|
||||||
|
test: ./runtest.sh
|
||||||
|
framework: beakerlib
|
||||||
|
recommend:
|
||||||
|
- diffutils
|
||||||
|
duration: 5m
|
||||||
|
extra-summary: /CoreOS/diffutils/Regression/diff-Z-hangs
|
||||||
|
extra-task: /CoreOS/diffutils/Regression/diff-Z-hangs
|
||||||
1
tests/diff-Z-hangs/runtest.sh
Normal file → Executable file
1
tests/diff-Z-hangs/runtest.sh
Normal file → Executable file
|
|
@ -27,7 +27,6 @@
|
||||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
# Include Beaker environment
|
# Include Beaker environment
|
||||||
. /usr/bin/rhts-environment.sh
|
|
||||||
. /usr/share/beakerlib/beakerlib.sh
|
. /usr/share/beakerlib/beakerlib.sh
|
||||||
|
|
||||||
PACKAGE="diffutils"
|
PACKAGE="diffutils"
|
||||||
|
|
|
||||||
20
tests/diff-hang-long-files/main.fmf
Normal file
20
tests/diff-hang-long-files/main.fmf
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
summary: Diff appears to hang in long file
|
||||||
|
description: "Test Name: diff-hang-long-files\nAuthor: Michal Fabry <mfabry@redhat.com>\n\
|
||||||
|
Location: /CoreOS/diffutils/Regression/diff-hang-long-files\n\nShort Description:
|
||||||
|
Diff appears to hang in long file\n\n\nLong Description:\n\nRunning the \"diff
|
||||||
|
-bBw\" command on a very large input file (eg 250 MB), in a multi-byte locale
|
||||||
|
(ie UTF-8), took a very long time to complete, if at all. In a reported case,
|
||||||
|
a diff ran for multiple days and did not complete. In certain situations, this
|
||||||
|
could cause 100% CPU usage.\n"
|
||||||
|
contact: Michal Fabry <mfabry@redhat.com>
|
||||||
|
component:
|
||||||
|
- diffutils
|
||||||
|
test: ./runtest.sh
|
||||||
|
framework: beakerlib
|
||||||
|
recommend:
|
||||||
|
- diffutils
|
||||||
|
- words
|
||||||
|
- time
|
||||||
|
duration: 5m
|
||||||
|
extra-summary: /CoreOS/diffutils/Regression/diff-hang-long-files
|
||||||
|
extra-task: /CoreOS/diffutils/Regression/diff-hang-long-files
|
||||||
2
tests/diff-hang-long-files/runtest.sh
Normal file → Executable file
2
tests/diff-hang-long-files/runtest.sh
Normal file → Executable file
|
|
@ -15,7 +15,6 @@
|
||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
# Include Beaker environment
|
# Include Beaker environment
|
||||||
. /usr/bin/rhts-environment.sh || exit 1
|
|
||||||
. /usr/share/beakerlib/beakerlib.sh || exit 1
|
. /usr/share/beakerlib/beakerlib.sh || exit 1
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -76,3 +75,4 @@ rlPhaseEnd
|
||||||
|
|
||||||
#rlCreateLogFromJournal | tee $OUTPUTFILE
|
#rlCreateLogFromJournal | tee $OUTPUTFILE
|
||||||
rlJournalPrintText
|
rlJournalPrintText
|
||||||
|
rlJournalEnd
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
summary: Test for diffutils to ensure U3000 ideographic space is treated as
|
||||||
|
space when used -b or -w options
|
||||||
|
description: "Bug summary: diff -w/-b doesn't treat U3000 (IDEOGRAPHIC SPACE) as space\n\
|
||||||
|
\nTest for diffutils to ensure U3000 ideographic space is treated as space when
|
||||||
|
used -b or -w options\n"
|
||||||
|
contact: Filip Holec <fholec@redhat.com>
|
||||||
|
component:
|
||||||
|
- diffutils
|
||||||
|
test: ./runtest.sh
|
||||||
|
framework: beakerlib
|
||||||
|
recommend:
|
||||||
|
- diffutils
|
||||||
|
duration: 5m
|
||||||
|
extra-summary:
|
||||||
|
/CoreOS/diffutils/Regression/diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space
|
||||||
|
extra-task:
|
||||||
|
/CoreOS/diffutils/Regression/diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space
|
||||||
1
tests/diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space/runtest.sh
Normal file → Executable file
1
tests/diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space/runtest.sh
Normal file → Executable file
|
|
@ -27,7 +27,6 @@
|
||||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
# Include Beaker environment
|
# Include Beaker environment
|
||||||
. /usr/bin/rhts-environment.sh
|
|
||||||
. /usr/share/beakerlib/beakerlib.sh
|
. /usr/share/beakerlib/beakerlib.sh
|
||||||
|
|
||||||
PACKAGE="diffutils"
|
PACKAGE="diffutils"
|
||||||
|
|
|
||||||
14
tests/sdiff-does-not-recognize-E-option/main.fmf
Normal file
14
tests/sdiff-does-not-recognize-E-option/main.fmf
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
summary: Test for sdiff does not recognize -E option
|
||||||
|
description: "Bug summary: sdiff does not recognize -E option\n\nThe test runs sdiff
|
||||||
|
-E on two files differing just in use of tab/8 spaces. sdiff shall not fail and
|
||||||
|
shall return that the files are identical.\n"
|
||||||
|
contact: Martin Kyral <mkyral@redhat.com>
|
||||||
|
component:
|
||||||
|
- diffutils
|
||||||
|
test: ./runtest.sh
|
||||||
|
framework: beakerlib
|
||||||
|
recommend:
|
||||||
|
- diffutils
|
||||||
|
duration: 10m
|
||||||
|
extra-summary: /CoreOS/diffutils/Regression/sdiff-does-not-recognize-E-option
|
||||||
|
extra-task: /CoreOS/diffutils/Regression/sdiff-does-not-recognize-E-option
|
||||||
3
tests/sdiff-does-not-recognize-E-option/runtest.sh
Normal file → Executable file
3
tests/sdiff-does-not-recognize-E-option/runtest.sh
Normal file → Executable file
|
|
@ -27,8 +27,7 @@
|
||||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
# Include Beaker environment
|
# Include Beaker environment
|
||||||
. /usr/bin/rhts-environment.sh
|
. /usr/share/beakerlib/beakerlib.sh || exit 1
|
||||||
. /usr/lib/beakerlib/beakerlib.sh
|
|
||||||
|
|
||||||
PACKAGE="diffutils"
|
PACKAGE="diffutils"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
---
|
|
||||||
# Tests that run in classic context
|
|
||||||
- hosts: localhost
|
|
||||||
roles:
|
|
||||||
- role: standard-test-beakerlib
|
|
||||||
tags:
|
|
||||||
- classic
|
|
||||||
- container
|
|
||||||
- atomic
|
|
||||||
tests:
|
|
||||||
- cmp-s-returns-1-even-if-files-are-identical
|
|
||||||
- diff-hang-long-files
|
|
||||||
- diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space
|
|
||||||
- diff-Z-hangs
|
|
||||||
- sdiff-does-not-recognize-E-option
|
|
||||||
- whitespace
|
|
||||||
required_packages:
|
|
||||||
- findutils # beakerlib needs find command
|
|
||||||
15
tests/whitespace/main.fmf
Normal file
15
tests/whitespace/main.fmf
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
summary: diff -b should ignore whitespace
|
||||||
|
description: "Create 2 files, f1, f2 with contents \"abc\" and \"abc \" (without quotes),\n\
|
||||||
|
i.e. the same line with a space on the end.\n\nDiff ignoring whitespace:\n\ndiff
|
||||||
|
-b f1 f2\n\nshould produce no diff output, but does on F8. Works fine on FC6.\n\
|
||||||
|
\nversion: diffutils-2.8.1-17.fc8\n"
|
||||||
|
contact: Bill Peck <bpeck@redhat.com>
|
||||||
|
component:
|
||||||
|
- diffutils
|
||||||
|
test: ./runtest.sh
|
||||||
|
framework: beakerlib
|
||||||
|
recommend:
|
||||||
|
- diffutils
|
||||||
|
duration: 5m
|
||||||
|
extra-summary: /CoreOS/diffutils/whitespace
|
||||||
|
extra-task: /CoreOS/diffutils/whitespace
|
||||||
3
tests/whitespace/runtest.sh
Normal file → Executable file
3
tests/whitespace/runtest.sh
Normal file → Executable file
|
|
@ -15,8 +15,7 @@
|
||||||
#
|
#
|
||||||
# Author: Bill Peck
|
# Author: Bill Peck
|
||||||
|
|
||||||
. /usr/bin/rhts-environment.sh
|
. /usr/share/beakerlib/beakerlib.sh || exit 1
|
||||||
. /usr/share/rhts-library/rhtslib.sh
|
|
||||||
|
|
||||||
PACKAGE="diffutils"
|
PACKAGE="diffutils"
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue