public inbox for development@lists.ipfire.org
 help / color / mirror / Atom feed
* [PATCH] diffutils: update to 3.3 v2
@ 2016-05-28 19:07 Marcel Lorenz
  0 siblings, 0 replies; only message in thread
From: Marcel Lorenz @ 2016-05-28 19:07 UTC (permalink / raw)
  To: development

[-- Attachment #1: Type: text/plain, Size: 22108 bytes --]

Signed-off-by: Marcel Lorenz <marcel.lorenz(a)ipfire.org>
---
 config/rootfiles/common/diffutils        |  11 +-
 lfs/diffutils                            |  12 +-
 src/patches/diffutils-2.8.1-i18n-1.patch | 802 -------------------------------
 3 files changed, 8 insertions(+), 817 deletions(-)
 delete mode 100644 src/patches/diffutils-2.8.1-i18n-1.patch

diff --git a/config/rootfiles/common/diffutils b/config/rootfiles/common/diffutils
index b00abdb..bb02f1b 100644
--- a/config/rootfiles/common/diffutils
+++ b/config/rootfiles/common/diffutils
@@ -2,10 +2,7 @@ usr/bin/cmp
 usr/bin/diff
 #usr/bin/diff3
 #usr/bin/sdiff
-#usr/info
-#usr/info/diff.info
-#usr/info/dir
-#usr/man/man1/cmp.1
-#usr/man/man1/diff.1
-#usr/man/man1/diff3.1
-#usr/man/man1/sdiff.1
+#usr/share/info/diffutils.info
+#usr/share/man/man1/cmp.1
+#usr/share/man/man1/diff3.1
+#usr/share/man/man1/sdiff.1
diff --git a/lfs/diffutils b/lfs/diffutils
index 3e96c67..a89ac71 100644
--- a/lfs/diffutils
+++ b/lfs/diffutils
@@ -24,10 +24,10 @@
 
 include Config
 
-VER        = 2.8.1
+VER        = 3.3
 
 THISAPP    = diffutils-$(VER)
-DL_FILE    = $(THISAPP).tar.gz
+DL_FILE    = $(THISAPP).tar.xz
 DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 
@@ -53,7 +53,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 71f9c5ae19b60608f6c7f162da86a428
+$(DL_FILE)_MD5 = 99180208ec2a82ce71f55b0d7389f1b3
 
 install : $(TARGET)
 
@@ -82,11 +82,7 @@ $(subst %,%_MD5,$(objects)) :
 
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@$(PREBUILD)
-	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
-ifeq "$(ROOT)" ""
-	cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/$(THISAPP)-i18n-1.patch
-	cd $(DIR_APP) && touch man/diff.1
-endif
+	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
 	cd $(DIR_APP) && ./configure $(EXTRA_CONFIG)
 	cd $(DIR_APP) && make $(MAKETUNING) $(EXTRA_MAKE)
 	cd $(DIR_APP) && make $(EXTRA_INSTALL) install
diff --git a/src/patches/diffutils-2.8.1-i18n-1.patch b/src/patches/diffutils-2.8.1-i18n-1.patch
deleted file mode 100644
index 488885b..0000000
--- a/src/patches/diffutils-2.8.1-i18n-1.patch
+++ /dev/null
@@ -1,802 +0,0 @@
-Submitted by: Alexander E. Patrakov
-Date: 2005-08-13
-Initial Package Version: 2.8.1
-Upstream Status: Unknown, but required for LSB >= 2.0 certification
-Origin: RedHat
-Description: Fixes treatment of whitespace in multibyte locales.
-
---- diffutils-2.8.4/src/diff.c.i18n	2002-06-17 01:55:42.000000000 -0400
-+++ diffutils-2.8.4/src/diff.c	2002-11-16 18:41:37.000000000 -0500
-@@ -275,6 +275,13 @@
-   re_set_syntax (RE_SYNTAX_GREP | RE_NO_POSIX_BACKTRACKING);
-   excluded = new_exclude ();
- 
-+#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, 0)) != -1)
---- diffutils-2.8.4/src/diff.h.i18n	2002-11-16 18:31:32.000000000 -0500
-+++ diffutils-2.8.4/src/diff.h	2002-11-16 18:48:58.000000000 -0500
-@@ -23,6 +23,19 @@
- #include "system.h"
- #include <stdio.h>
- 
-+/* For platform which support the ISO C amendement 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
-+
-+#define TAB_WIDTH 8
-+
- /* What kind of changes a hunk contains.  */
- enum changes
- {
-@@ -350,7 +363,13 @@
- extern char const pr_program[];
- char *concat (char const *, char const *, char const *);
- char *dir_file_pathname (char const *, char const *);
--bool lines_differ (char const *, char const *);
-+
-+bool (*lines_differ) (char const *, char const *);
-+bool lines_differ_singlebyte (char const *, char const *);
-+#ifdef HANDLE_MULTIBYTE
-+bool lines_differ_multibyte (char const *, char const *);
-+#endif
-+
- lin translate_line_number (struct file_data const *, lin);
- struct change *find_change (struct change *);
- struct change *find_reverse_change (struct change *);
---- diffutils-2.8.4/src/io.c.i18n	2002-06-11 02:06:32.000000000 -0400
-+++ diffutils-2.8.4/src/io.c	2002-11-16 18:57:30.000000000 -0500
-@@ -26,6 +26,7 @@
- #include <regex.h>
- #include <setmode.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)))
-@@ -213,6 +214,28 @@
- \f
- /* 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)
-@@ -239,12 +262,280 @@
-   bool same_length_diff_contents_compare_anyway =
-     diff_length_compare_anyway | ignore_case;
- 
-+#ifdef HANDLE_MULTIBYTE
-+  wchar_t   wc;
-+  size_t    mblength;
-+  mbstate_t state;
-+  int       convfail;
-+  
-+  memset (&state, '\0', sizeof (mbstate_t));
-+#endif
-+
-   while ((char const *) p < suffix_begin)
-     {
-       char const *ip = (char const *) p;
- 
-       h = 0;
-+#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 (ignore_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 (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++;
-+			}
-+		    }
-+		  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 || (!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:
-+		{
-+		  size_t column = 0;
-+
-+		  while (1)
-+		    {
-+		      if (*p == '\n')
-+			{
-+			  ++p;
-+			  break;
-+			}
-+
-+		      MBC2WC (p, suffix_begin, mblength, wc, state, convfail);
-+
-+		      if (convfail)
-+			{
-+			  h = HASH (h, *p++);
-+			  ++column;
-+			}
-+		      else
-+			{
-+			  bool flag;
-+
-+			  switch (wc)
-+			    {
-+			    case L'\b':
-+			      column -= 0 < column;
-+			      h = HASH (h, '\b');
-+			      ++p;
-+			      break;
-+
-+			    case L'\t':
-+				{
-+				  int repetitions;
-+
-+				  repetitions = TAB_WIDTH - column % TAB_WIDTH;
-+				  column += repetitions;
-+				  do
-+				    h = HASH (h, ' ');
-+				  while (--repetitions != 0);
-+				  ++p;
-+				}
-+			      break;
-+
-+			    case L'\r':
-+			      column = 0;
-+			      h = HASH (h, '\r');
-+			      ++p;
-+			      break;
-+
-+			    default:
-+			      flag = 0;
-+			      column += wcwidth (wc);
-+			      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;
-+
-+	    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 (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]);
-+		}
-+	    }
-+	}
-+      else
-+#endif
-       /* Hash this line until we find a newline.  */
-       if (ignore_case)
- 	switch (ignore_white_space)
---- diffutils-2.8.4/src/side.c.i18n	2002-06-11 02:06:32.000000000 -0400
-+++ diffutils-2.8.4/src/side.c	2002-11-16 18:41:37.000000000 -0500
-@@ -73,11 +73,72 @@
-   register size_t out_position = 0;
-   register char const *text_pointer = line[0];
-   register char const *text_limit = line[1];
-+#if defined HAVE_WCHAR_H && defined HAVE_WCTYPE_H
-+  unsigned char mbc[MB_LEN_MAX];
-+  wchar_t wc;
-+  mbstate_t state, state_bak;
-+  size_t mbc_pos, mblength;
-+  int mbc_loading_flag = 0;
-+  int wc_width;
-+
-+  memset (&state, '\0', sizeof (mbstate_t));
-+#endif
- 
-   while (text_pointer < text_limit)
-     {
-       register unsigned char c = *text_pointer++;
- 
-+#if defined HAVE_WCHAR_H && defined HAVE_WCTYPE_H
-+      if (MB_CUR_MAX > 1 && mbc_loading_flag)
-+	{
-+	  mbc_loading_flag = 0;
-+	  state_bak = state;
-+	  mbc[mbc_pos++] = c;
-+
-+process_mbc:
-+	  mblength = mbrtowc (&wc, mbc, mbc_pos, &state);
-+
-+	  switch (mblength)
-+	    {
-+	    case (size_t)-2:	/* Incomplete multibyte character. */
-+	      mbc_loading_flag = 1;
-+	      state = state_bak;
-+	      break;
-+
-+	    case (size_t)-1:	/* Invalid as a multibyte character. */
-+	      if (in_position++ < out_bound)
-+		{
-+		  out_position = in_position;
-+		  putc (mbc[0], out);
-+		}
-+	      memmove (mbc, mbc + 1, --mbc_pos);
-+	      if (mbc_pos > 0)
-+		{
-+		  mbc[mbc_pos] = '\0';
-+		  goto process_mbc;
-+		}
-+	      break;
-+
-+	    default:
-+	      wc_width = wcwidth (wc);
-+	      if (wc_width < 1)	/* Unprintable multibyte character. */
-+		{
-+		  if (in_position <= out_bound)
-+		    fprintf (out, "%lc", (wint_t)wc);
-+		}
-+	      else		/* Printable multibyte character. */
-+		{
-+		  in_position += wc_width;
-+		  if (in_position <= out_bound)
-+		    {
-+		      out_position = in_position;
-+		      fprintf (out, "%lc", (wint_t)wc);
-+		    }
-+		}
-+	    }
-+	  continue;
-+	}
-+#endif
-       switch (c)
- 	{
- 	case '\t':
-@@ -135,8 +196,39 @@
- 	  break;
- 
- 	default:
--	  if (! ISPRINT (c))
--	    goto control_char;
-+#if defined HAVE_WCHAR_H && defined HAVE_WCTYPE_H
-+	  if (MB_CUR_MAX > 1)
-+	    {
-+	      memset (mbc, '\0', MB_LEN_MAX);
-+	      mbc_pos = 0;
-+	      mbc[mbc_pos++] = c;
-+	      state_bak = state;
-+
-+	      mblength = mbrtowc (&wc, mbc, mbc_pos, &state);
-+
-+	      /* The value of mblength is always less than 2 here. */
-+	      switch (mblength)
-+		{
-+		case (size_t)-2:	/* Incomplete multibyte character. */
-+		  state = state_bak;
-+		  mbc_loading_flag = 1;
-+		  continue;
-+
-+		case (size_t)-1:	/* Invalid as a multibyte character. */
-+		  state = state_bak;
-+		  break;
-+
-+		default:
-+		  if (! iswprint (wc))
-+		    goto control_char;
-+		}
-+	    }
-+	  else
-+#endif
-+	    {
-+	      if (! ISPRINT (c))
-+		goto control_char;
-+	    }
- 	  /* falls through */
- 	case ' ':
- 	  if (in_position++ < out_bound)
---- diffutils-2.8.4/src/util.c.i18n	2002-06-11 02:06:32.000000000 -0400
-+++ diffutils-2.8.4/src/util.c	2002-11-16 18:41:37.000000000 -0500
-@@ -321,7 +321,7 @@
-    Return nonzero if the lines differ.  */
- 
- bool
--lines_differ (char const *s1, char const *s2)
-+lines_differ_singlebyte (char const *s1, char const *s2)
- {
-   register unsigned char const *t1 = (unsigned char const *) s1;
-   register unsigned char const *t2 = (unsigned char const *) s2;
-@@ -450,6 +450,293 @@
- 
-   return 1;
- }
-+
-+#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, char const *s2)
-+{
-+  unsigned char const *end1, *end2;
-+  unsigned 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;
-+  
-+  unsigned char const *t1 = (unsigned char const *) s1;
-+  unsigned char const *t2 = (unsigned char const *) s2;
-+  unsigned 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;
-+    }
-+
-+  memset (&state1, '\0', sizeof (mbstate_t));
-+  memset (&state2, '\0', sizeof (mbstate_t));
-+
-+  end1 = s1 + strlen (s1);
-+  end2 = s2 + strlen (s2);
-+
-+  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 (wc2 == L' ' && wc1 != L'\n' &&
-+		      t1 > (unsigned char const *)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 > (unsigned char const *)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_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 += TAB_WIDTH - column % TAB_WIDTH;
-+		      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 += TAB_WIDTH - column2 % TAB_WIDTH;
-+		      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') ? TAB_WIDTH - column % TAB_WIDTH : wcwidth (wc1);
-+    }
-+
-+  return 1;
-+}
-+#endif
- \f
- /* Find the consecutive changes at the start of the script START.
-    Return the last link before the first gap.  */
-- 
1.9.1


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2016-05-28 19:07 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-05-28 19:07 [PATCH] diffutils: update to 3.3 v2 Marcel Lorenz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox