commit a0db571aa71705f4c68b42d07e1cbd606f5ac59f Author: MSVSphere Packaging Team Date: Tue Nov 26 15:50:06 2024 +0300 import diffutils-3.10-7.el10 diff --git a/.diffutils.metadata b/.diffutils.metadata new file mode 100644 index 0000000..5d8875d --- /dev/null +++ b/.diffutils.metadata @@ -0,0 +1 @@ +c16a9cf107ad1f0f791b6d00852dc5e961c1c451 SOURCES/diffutils-3.10.tar.xz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..935890f --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/diffutils-3.10.tar.xz diff --git a/SOURCES/diffutils-3.10-cmp-s-empty.patch b/SOURCES/diffutils-3.10-cmp-s-empty.patch new file mode 100644 index 0000000..f970c69 --- /dev/null +++ b/SOURCES/diffutils-3.10-cmp-s-empty.patch @@ -0,0 +1,31 @@ +diff --git a/src/cmp.c b/src/cmp.c +index 4bf0a4c..936125c 100644 +--- a/src/cmp.c ++++ b/src/cmp.c +@@ -338,13 +338,14 @@ main (int argc, char **argv) + } + + /* If only a return code is needed, +- and if both input descriptors are associated with plain files, ++ and both input descriptors are associated with plain files, ++ and the file sizes are nonzero so they are not Linux /proc files, + conclude that the files differ if they have different sizes + and if more bytes will be compared than are in the smaller file. */ + + if (comparison_type == type_status +- && 0 <= stat_buf[0].st_size && S_ISREG (stat_buf[0].st_mode) +- && 0 <= stat_buf[1].st_size && S_ISREG (stat_buf[1].st_mode)) ++ && 0 < stat_buf[0].st_size && S_ISREG (stat_buf[0].st_mode) ++ && 0 < stat_buf[1].st_size && S_ISREG (stat_buf[1].st_mode)) + { + off_t s0 = stat_buf[0].st_size - file_position (0); + off_t s1 = stat_buf[1].st_size - file_position (1); +@@ -401,7 +402,7 @@ cmp (void) + ? bytes : TYPE_MAXIMUM (off_t)); + + for (f = 0; f < 2; f++) +- if (0 <= stat_buf[f].st_size && S_ISREG (stat_buf[f].st_mode)) ++ if (0 < stat_buf[f].st_size && S_ISREG (stat_buf[f].st_mode)) + { + off_t file_bytes = stat_buf[f].st_size - file_position (f); + if (file_bytes < byte_number_max) diff --git a/SOURCES/diffutils-3.10-coverity.patch b/SOURCES/diffutils-3.10-coverity.patch new file mode 100644 index 0000000..76fa07a --- /dev/null +++ b/SOURCES/diffutils-3.10-coverity.patch @@ -0,0 +1,184 @@ +diff -up diffutils-3.10/lib/nstrftime.c.orig diffutils-3.10/lib/nstrftime.c +--- diffutils-3.10/lib/nstrftime.c.orig 2023-05-20 11:05:07.000000000 +0200 ++++ diffutils-3.10/lib/nstrftime.c 2024-07-30 16:36:42.914438967 +0200 +@@ -882,6 +882,7 @@ __strftime_internal (STREAM_OR_CHAR_T *s + *u = '\0'; + len = strftime (ubuf, sizeof ubuf, ufmt, tp); + if (len != 0) ++ /* coverity[verrun-buffer-arg: FALSE] */ + cpy (len - 1, ubuf + 1); + } + break; +@@ -1044,10 +1045,13 @@ __strftime_internal (STREAM_OR_CHAR_T *s + i += padding; + width -= padding; + } ++ /* coverity[bad_memset : FALSE] */ ++ /* coverity[overrun-buffer-arg : FALSE] */ + width_add1 (0, sign_char); + width--; + } + ++ /* coverity[bad_memset : FALSE] */ + cpy (numlen, bufp); + } + break; +@@ -1126,7 +1130,9 @@ __strftime_internal (STREAM_OR_CHAR_T *s + buf[j - 1] = n % 10 + L_('0'), n /= 10; + if (!pad) + pad = L_('0'); ++ /* coverity[bad_memset : FALSE] */ + width_cpy (0, ndigs, buf); ++ /* coverity[bad_memset : FALSE] */ + width_add (width - ndigs, 0, (void) 0); + } + break; +@@ -1495,6 +1501,7 @@ __strftime_internal (STREAM_OR_CHAR_T *s + since this is most likely the right thing to do if a + multibyte string has been misparsed. */ + bad_format: ++ /* coverity[bad_memset : FALSE] */ + cpy (f - percent + 1, percent); + break; + } +diff -up diffutils-3.10/lib/regcomp.c.orig diffutils-3.10/lib/regcomp.c +--- diffutils-3.10/lib/regcomp.c.orig 2024-07-30 16:42:46.745614022 +0200 ++++ diffutils-3.10/lib/regcomp.c 2024-07-30 16:45:16.815548192 +0200 +@@ -1175,6 +1175,8 @@ analyze (regex_t *preg) + dfa->inveclosures = re_malloc (re_node_set, dfa->nodes_len); + if (__glibc_unlikely (dfa->inveclosures == NULL)) + return REG_ESPACE; ++ /* The 'postorder' function initializes that memory */ ++ /* coverity[alloc_fn: FALSE] */ + ret = calc_inveclosure (dfa); + } + +diff -up diffutils-3.10/lib/sigsegv.c.orig diffutils-3.10/lib/sigsegv.c +--- diffutils-3.10/lib/sigsegv.c.orig 2023-05-20 11:05:07.000000000 +0200 ++++ diffutils-3.10/lib/sigsegv.c 2024-07-30 16:36:42.914438967 +0200 +@@ -1459,6 +1459,7 @@ stackoverflow_deinstall_handler (void) + { + stack_t ss; + ss.ss_flags = SS_DISABLE; ++ /* coverity[uninit_use_in_call : FALSE] */ + if (sigaltstack (&ss, (stack_t *) 0) < 0) + perror ("gnulib sigsegv (stackoverflow_deinstall_handler)"); + } +diff -up diffutils-3.10/lib/stackvma.c.orig diffutils-3.10/lib/stackvma.c +--- diffutils-3.10/lib/stackvma.c.orig 2023-01-30 01:17:41.000000000 +0100 ++++ diffutils-3.10/lib/stackvma.c 2024-07-30 16:38:45.404872853 +0200 +@@ -176,7 +176,7 @@ rof_open (struct rofile *rof, const char + /* Attempt to read the contents in a single system call. */ + if (size > MIN_LEFTOVER) + { +- int n = read (fd, rof->buffer, size); ++ size_t n = read (fd, rof->buffer, size); + if (n < 0 && errno == EINTR) + goto retry; + # if defined __DragonFly__ +@@ -186,7 +186,7 @@ rof_open (struct rofile *rof, const char + if (n <= 0) + /* Empty file. */ + goto fail1; +- if (n + MIN_LEFTOVER <= size) ++ if (MIN_LEFTOVER <= size -n) + { + /* The buffer was sufficiently large. */ + rof->filled = n; +@@ -195,21 +195,23 @@ rof_open (struct rofile *rof, const char + large enough. We need the equivalent of full_read(). */ + for (;;) + { ++ /* rof->filled cannot exceed size (due to the buffer size check), the subtraction is unlikely to overflow. */ ++ /* coverity[overflow_sink : FALSE] */ + n = read (fd, rof->buffer + rof->filled, size - rof->filled); + if (n < 0 && errno == EINTR) + goto retry; + if (n < 0) + /* Some error. */ + goto fail1; +- if (n + MIN_LEFTOVER > size - rof->filled) +- /* Allocate a larger buffer. */ +- break; + if (n == 0) + { + /* Reached the end of file. */ + close (fd); + return 0; + } ++ if (size - rof->filled - n < MIN_LEFTOVER) ++ /* Allocate a larger buffer. */ ++ break; + rof->filled += n; + } + # else +diff -up diffutils-3.10/lib/time_rz.c.orig diffutils-3.10/lib/time_rz.c +--- diffutils-3.10/lib/time_rz.c.orig 2023-01-02 02:20:08.000000000 +0100 ++++ diffutils-3.10/lib/time_rz.c 2024-07-30 16:36:42.914438967 +0200 +@@ -303,10 +303,12 @@ mktime_z (timezone_t tz, struct tm *tm) + time_t t = mktime (&tm_1); + bool ok = 0 <= tm_1.tm_yday; + #if HAVE_STRUCT_TM_TM_ZONE || HAVE_TZNAME ++ /* coverity[uninit_use_in_call : FALSE] */ + ok = ok && save_abbr (tz, &tm_1); + #endif + if (revert_tz (old_tz) && ok) + { ++ /* coverity[uninit_use : FALSE] */ + *tm = tm_1; + return t; + } +diff -up diffutils-3.10/src/analyze.c.orig diffutils-3.10/src/analyze.c +--- diffutils-3.10/src/analyze.c.orig 2023-05-20 11:17:26.000000000 +0200 ++++ diffutils-3.10/src/analyze.c 2024-07-30 16:36:42.915438987 +0200 +@@ -689,6 +689,7 @@ diff_2_files (struct comparison *cmp) + for (f = 0; f < 2; f++) + { + free (cmp->file[f].equivs); ++ /* coverity[offset_free : FALSE] */ + free (cmp->file[f].linbuf + cmp->file[f].linbuf_base); + } + +diff -up diffutils-3.10/src/diff3.c.orig diffutils-3.10/src/diff3.c +--- diffutils-3.10/src/diff3.c.orig 2023-05-20 11:17:26.000000000 +0200 ++++ diffutils-3.10/src/diff3.c 2024-07-30 16:36:42.915438987 +0200 +@@ -798,6 +798,8 @@ using_to_diff3_block (struct diff_block + D_LINEARRAY (result, FILEC) + result_offset, + D_LENARRAY (result, FILEC) + result_offset, + D_NUMLINES (ptr, FC))) ++ /* There is a potential resource leak here, but it is not important */ ++ /* coverity[leaked_storage : FALSE] */ + return 0; + } + +@@ -827,6 +829,8 @@ using_to_diff3_block (struct diff_block + D_LINEARRAY (result, FILE0 + d) + result_offset, + D_LENARRAY (result, FILE0 + d) + result_offset, + D_NUMLINES (ptr, FO))) ++ /* There is a potential resource leak here, but it is not important */ ++ /* coverity[leaked_storage : FALSE] */ + return 0; + + /* Catch the lines between here and the next diff */ +diff -up diffutils-3.10/src/diff.c.orig diffutils-3.10/src/diff.c +--- diffutils-3.10/src/diff.c.orig 2024-07-30 16:35:17.766783183 +0200 ++++ diffutils-3.10/src/diff.c 2024-07-30 16:36:42.915438987 +0200 +@@ -429,6 +429,7 @@ main (int argc, char **argv) + sizeof C_ifdef_group_formats - 7 /* 7*"@" */, + &alloc)) + xalloc_die (); ++ /* coverity[alloc_strlen : FALSE] */ + char *b = xmalloc (alloc); + char *base = b; + int changes = 0; +diff -up diffutils-3.10/src/ifdef.c.orig diffutils-3.10/src/ifdef.c +--- diffutils-3.10/src/ifdef.c.orig 2023-02-19 19:04:39.000000000 +0100 ++++ diffutils-3.10/src/ifdef.c 2024-07-30 16:36:42.915438987 +0200 +@@ -361,6 +361,7 @@ do_printf_spec (FILE *out, char const *s + format spec "%3lx". Here the spec prefix is "%3". */ + size_t spec_prefix_len = f - spec - 2; + size_t pI_len = sizeof pI - 1; ++ /* coverity[bad_alloc_arithmetic : FALSE] */ + char *format = xmalloca (spec_prefix_len + pI_len + 2); + char *p = mempcpy (format, spec, spec_prefix_len); + p = stpcpy (p, pI); diff --git a/SOURCES/diffutils-i18n.patch b/SOURCES/diffutils-i18n.patch new file mode 100644 index 0000000..fd41414 --- /dev/null +++ b/SOURCES/diffutils-i18n.patch @@ -0,0 +1,779 @@ +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: must be included before . */ ++# include ++# include ++# 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); ++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 + #include + #include ++#include + + /* 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. */ diff --git a/SPECS/diffutils.spec b/SPECS/diffutils.spec new file mode 100644 index 0000000..31dd236 --- /dev/null +++ b/SPECS/diffutils.spec @@ -0,0 +1,428 @@ +Summary: GNU collection of diff utilities +Name: diffutils +Version: 3.10 +Release: 7%{?dist} +URL: https://www.gnu.org/software/diffutils/diffutils.html +Source: https://ftp.gnu.org/gnu/diffutils/diffutils-%{version}.tar.xz +# Multibyte +Patch0: diffutils-i18n.patch +Patch1: diffutils-3.10-cmp-s-empty.patch +Patch2: diffutils-3.10-coverity.patch +License: GPL-3.0-or-later +Provides: bundled(gnulib) +BuildRequires: gcc +BuildRequires: help2man +BuildRequires: autoconf, automake, texinfo +BuildRequires: make + +%description +Diffutils includes four utilities: diff, cmp, diff3 and sdiff. Diff +compares two files and shows the differences, line by line. The cmp +command shows the offset and line numbers where two files differ, or +cmp can show the characters that differ between the two files. The +diff3 command shows the differences between three files. Diff3 can be +used when two people have made independent changes to a common +original; diff3 can produce a merged file that contains both sets of +changes and warnings about conflicts. The sdiff command can be used +to merge two files interactively. + +Install diffutils if you need to compare text files. + +%prep +%autosetup -p1 + +# Run autoreconf for aarch64 support (bug #925256). +autoreconf + +%build +export CFLAGS="$RPM_OPT_FLAGS -DGCC_LINT" +%configure +make PR_PROGRAM=%{_bindir}/pr V=1 + +%install +%make_install + +rm -f $RPM_BUILD_ROOT%{_infodir}/dir +%find_lang %{name} + +%check +# Disable update-copyright gnulib test (bug #1239428). +>gnulib-tests/test-update-copyright.sh +make check + +%files -f %{name}.lang +%doc NEWS README +%license COPYING +%{_bindir}/* +%{_mandir}/*/* +%{_infodir}/diffutils.info* + +%changelog +* Tue Jul 30 2024 Than Ngo - 3.10-7 +- Resolves: RHEL-50780, regression, compare file sizes only if both non-zero + +* Mon Jun 24 2024 Troy Dawson - 3.10-6 +- Bump release for June 2024 mass rebuild + +* Wed Jan 24 2024 Fedora Release Engineering - 3.10-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jan 19 2024 Fedora Release Engineering - 3.10-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Wed Jul 19 2023 Fedora Release Engineering - 3.10-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Wed Jul 05 2023 Than Ngo - 3.10-2 +- Fix output of "diff -l -y" for non-ASCII input files + +* Thu Jun 29 2023 Than Ngo - 3.10-1 +- Fix bz#2208831, update to 3.10 +- Fix bz#2196671, diff -D no longer fails to output #ifndef lines introduced in 3.9 + +* Tue Mar 28 2023 Than Ngo - 3.9-4 +- Fix deprecated patch rpm marco + +* Tue Feb 21 2023 Than Ngo - 3.9-3 +- migrated to SPDX license + +* Thu Jan 19 2023 Fedora Release Engineering - 3.9-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Mon Jan 16 2023 Tim Waugh - 3.9-1 +- 3.9 (bug #2161117). + +* Thu Jul 21 2022 Fedora Release Engineering - 3.8-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Thu Jan 20 2022 Fedora Release Engineering - 3.8-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Mon Aug 2 2021 Tim Waugh - 3.8-1 +- 3.8. + +* Wed Jul 21 2021 Fedora Release Engineering - 3.7-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Mon Apr 12 2021 Tim Waugh - 3.7-9 +- Handle SIGSTKSZ no longer being a constant (bug #1943016). + +* Tue Jan 26 2021 Fedora Release Engineering - 3.7-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Thu Oct 8 2020 Tim Waugh - 3.7-7 +- Fix from gnulib upstream, commit 175e0bc (bug #1863423). + +* Sat Aug 01 2020 Fedora Release Engineering - 3.7-6 +- Second attempt - Rebuilt for + https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon Jul 27 2020 Fedora Release Engineering - 3.7-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Tue Jan 28 2020 Fedora Release Engineering - 3.7-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Wed Jul 24 2019 Fedora Release Engineering - 3.7-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Thu Jan 31 2019 Fedora Release Engineering - 3.7-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Mon Jan 07 2019 Than Ngo - 3.7-1 +- 3.7 + +* Thu Jul 12 2018 Fedora Release Engineering - 3.6-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Wed Feb 07 2018 Fedora Release Engineering - 3.6-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Wed Aug 02 2017 Fedora Release Engineering - 3.6-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 3.6-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Mon May 22 2017 Tim Waugh - 3.6-1 +- 3.6 (bug #1453019). + +* Tue Feb 21 2017 Than Ngo - 3.5-3 +- backport to fix FTBFs with GCC 7 + +* Fri Feb 10 2017 Fedora Release Engineering - 3.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Wed Sep 21 2016 Tim Waugh - 3.5-1 +- 3.5 (bug #1365325). + +* Wed Feb 03 2016 Fedora Release Engineering - 3.3-13 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Mon Jul 6 2015 Tim Waugh - 3.3-12 +- Disable update-copyright gnulib test (bug #1239428). + +* Wed Jun 17 2015 Fedora Release Engineering - 3.3-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Sat Feb 21 2015 Till Maas - 3.3-10 +- Rebuilt for Fedora 23 Change + https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code + +* Sat Aug 16 2014 Fedora Release Engineering - 3.3-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Fri Jul 11 2014 Tom Callaway - 3.3-8 +- fix license handling + +* Sat Jun 07 2014 Fedora Release Engineering - 3.3-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Thu Mar 27 2014 Tim Waugh 3.3-6 +- Fix --help output and man page (bug #1079076). + +* Wed Dec 4 2013 Tim Waugh 3.3-5 +- Applied upstream gnulib patch to avoid -Wformat-security warning + (bug #1037038). + +* Wed Oct 23 2013 Tim Waugh 3.3-4 +- Fixed multibyte handling logic for diff -Z (bug #1012075). + +* Sat Aug 03 2013 Fedora Release Engineering - 3.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Mon Apr 29 2013 Tim Waugh 3.3-2 +- Run autoreconf for aarch64 support (bug #925256). + +* Tue Mar 26 2013 Tim Waugh 3.3-1 +- 3.3 (bug #927560). + +* Fri Feb 22 2013 Tim Waugh 3.2-13 +- Fixed i18n handling of 'diff -E' (bug #914666). + +* Wed Feb 13 2013 Fedora Release Engineering - 3.2-12 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Fri Oct 26 2012 Tim Waugh 3.2-11 +- Ported i18n patch and reinstated it (bug #870460). + +* Wed Sep 19 2012 Tim Waugh 3.2-10 +- Fixed license as current source says GPLv3+. + +* Mon Jul 23 2012 Tim Waugh 3.2-9 +- Fixed build failure. + +* Wed Jul 18 2012 Fedora Release Engineering - 3.2-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Mon May 21 2012 Tim Waugh 3.2-7 +- Provides bundled(gnulib) (bug #821751). + +* Fri Jan 13 2012 Fedora Release Engineering - 3.2-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Thu Dec 8 2011 Tim Waugh 3.2-5 +- Fix bug #747969 again. + +* Tue Nov 29 2011 Tim Waugh 3.2-4 +- Real fix for bug #747969: the diffutils info file changed name in + 3.1. Updated the scriptlets to install/remove the correct filename + from the info directory. + +* Fri Nov 25 2011 Tim Waugh 3.2-3 +- Fixed up reference to info page in man pages (bug #747969). + +* Fri Nov 25 2011 Tim Waugh 3.2-2 +- Applied upstream gnulib fix for float test on ppc, as well as + correction for LDBL_MANT_DIG definition (bug #733536). + +* Fri Sep 2 2011 Tim Waugh 3.2-1 +- 3.2. + +* Thu Aug 11 2011 Tim Waugh 3.1-1 +- 3.1. + +* Wed Apr 13 2011 Tim Waugh 3.0-1 +- 3.0 (bug #566482). +- The i18n patch is dropped for the time being. + +* Tue Feb 08 2011 Fedora Release Engineering - 2.8.1-30 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Fri Jun 25 2010 Tim Waugh 2.8.1-29 +- For 'cmp -s', compare file sizes only if both non-zero (bug #563618). + +* Wed Apr 21 2010 Tim Waugh - 2.8.1-28 +- Build requires help2man (bug #577325). Fixes empty diff man page. + +* Wed Mar 3 2010 Tim Waugh - 2.8.1-27 +- Added comments for all patches. + +* Wed Mar 3 2010 Tim Waugh - 2.8.1-26 +- Use upstream man pages. +- Ship COPYING file. + +* Tue Aug 11 2009 Tim Waugh 2.8.1-25 +- Only try to install the info file if it exists so that package + installation does not fail with --excludedocs (bug #515919). + +* Fri Jul 24 2009 Fedora Release Engineering - 2.8.1-24 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Tue Feb 24 2009 Fedora Release Engineering - 2.8.1-23 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Fri Feb 13 2009 Tim Waugh 2.8.1-22 +- Fixed 'sdiff -E' (bug #484892). + +* Wed Feb 13 2008 Tim Waugh 2.8.1-21 +- Rebuild for GCC 4.3. + +* Wed Jan 2 2008 Tim Waugh 2.8.1-20 +- Converted spec file to UTF-8 (bug #225696). +- Fixed summary (bug #225696). +- Fixed PreReq (bug #225696). +- Removed Prefix (bug #225696). +- Fixed build root (bug #225696). +- Avoid %%makeinstall (bug #225696). +- Fixed license tag (bug #225696). + +* Tue Nov 6 2007 Tim Waugh 2.8.1-19 +- Rebuilt. + +* Tue Nov 6 2007 Tim Waugh 2.8.1-18 +- Fixed multibyte speed improvement patch (bug #363831). + +* Tue Aug 14 2007 Tim Waugh 2.8.1-17 +- Multibyte speed improvement (bug #252117). + +* Mon Jan 22 2007 Tim Waugh 2.8.1-16 +- Make scriptlet unconditionally succeed (bug #223683). + +* Wed Jul 12 2006 Jesse Keating - 2.8.1-15.2.2 +- rebuild + +* Fri Feb 10 2006 Jesse Keating - 2.8.1-15.2.1 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 2.8.1-15.2 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Wed Apr 6 2005 Tim Waugh 2.8.1-15 +- Fixed sdiff exit code handling (bug #152967). + +* Wed Mar 2 2005 Tim Waugh 2.8.1-14 +- Rebuild for new GCC. + +* Wed Feb 9 2005 Tim Waugh 2.8.1-13 +- Rebuilt. + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Thu Jan 8 2004 Tim Waugh 2.8.1-10 +- Fix mistaken use of '|' instead of '||'. + +* Sat Oct 25 2003 Tim Waugh 2.8.1-9 +- Rebuilt. + +* Tue Jun 17 2003 Tim Waugh 2.8.1-8 +- Rebuilt. + +* Wed Jun 04 2003 Elliot Lee +- rebuilt + +* Wed Jan 22 2003 Tim Powers +- rebuilt + +* Tue Nov 19 2002 Tim Waugh 2.8.1-5 +- i18n patch. + +* Tue Oct 22 2002 Tim Waugh 2.8.1-4 +- Ship translations. + +* Fri Jun 21 2002 Tim Powers +- automated rebuild + +* Thu May 23 2002 Tim Powers +- automated rebuild + +* Mon Apr 22 2002 Tim Waugh 2.8.1-1 +- 2.8.1. +- No longer need immunix-owl-tmp patch. + +* Wed Feb 27 2002 Tim Waugh 2.7.2-5 +- Rebuild in new environment. + +* Wed Jan 09 2002 Tim Powers +- automated rebuild + +* Fri Nov 02 2001 Tim Waugh 2.7.2-3 +- Make sure %%post scriplet doesn't fail if --excludedocs is used. + +* Fri Jun 01 2001 Tim Waugh 2.7.2-2 +- Install diff.1, since it's no longer in man-pages. + +* Fri Mar 30 2001 Tim Waugh 2.7.2-1 +- 2.7.2. + +* Wed Jul 12 2000 Prospector +- automatic rebuild + +* Thu Jul 06 2000 Trond Eivind Glomsrød +- fix %%changelog entries (escape them) +- update source location +- remove manual stripping +- add URL + +* Tue Jun 06 2000 Than Ngo +- add %%defattr +- use rpm macros + +* Wed May 31 2000 Ngo Than +- put man pages and info files in correct place +- cleanup specfile + +* Thu Feb 03 2000 Preston Brown +- rebuild to gzip man pages. + +* Mon Apr 19 1999 Jeff Johnson +- man pages not in %%files. +- but avoid conflict for diff.1 + +* Sun Mar 21 1999 Cristian Gafton +- auto rebuild in the new build environment (release 14) + +* Sun Mar 14 1999 Jeff Johnson +- add man pages (#831). +- add %%configure and Prefix. + +* Thu Dec 17 1998 Cristian Gafton +- build for glibc 2.1 + +* Tue Jul 14 1998 Bill Kawakami +- included the four man pages stolen from Slackware + +* Tue May 05 1998 Prospector System +- translations modified for de, fr, tr + +* Sun May 03 1998 Cristian Gafton +- fixed spec file to reference/use the $RPM_BUILD_ROOT always + +* Wed Dec 31 1997 Otto Hammersmith +- fixed where it looks for 'pr' (/usr/bin, rather than /bin) + +* Fri Oct 17 1997 Donnie Barnes +- added BuildRoot + +* Sun Sep 14 1997 Erik Troan +- uses install-info + +* Mon Jun 02 1997 Erik Troan +- built against glibc