This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch, master, updated. glibc-2.14-570-gee190f6


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  ee190f67cc00b958a667af75dc68f3fc21611c9f (commit)
      from  707f25dfc0a63d264e9da00368cbab5bd0f6a8c9 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=ee190f67cc00b958a667af75dc68f3fc21611c9f

commit ee190f67cc00b958a667af75dc68f3fc21611c9f
Author: Ulrich Drepper <drepper@gmail.com>
Date:   Wed Dec 21 18:45:50 2011 -0500

    Store invocation-specific data of conversion modules in __gconv_step_data

diff --git a/ChangeLog b/ChangeLog
index 024ee23..51f148d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2011-12-21  Ulrich Drepper  <drepper@gmail.com>
+
+	[BZ #13439]
+	* iconv/gconv.h: Define __GCONV_SWAP.
+	* iconvdata/unicode.c: The swap bit must be stored in __flags.
+	* iconvdata/utf-16.c: Likewise.
+	* iconvdata/utf-32.c: Likewise.
+
 2011-12-21  Andreas Schwab  <schwab@linux-m68k.org>
 
 	[BZ #13524]
diff --git a/NEWS b/NEWS
index 50c5852..e40ce3f 100644
--- a/NEWS
+++ b/NEWS
@@ -12,8 +12,8 @@ Version 2.15
   6779, 6783, 9696, 10103, 10709, 11589, 12403, 12847, 12868, 12852, 12874,
   12885, 12892, 12907, 12922, 12935, 13007, 13021, 13067, 13068, 13090,
   13092, 13114, 13118, 13123, 13134, 13138, 13147, 13150, 13179, 13192,
-  13268, 13276, 13291, 13335, 13337, 13344, 13358, 13367, 13446, 13472,
-  13484, 13506, 13524
+  13268, 13276, 13291, 13335, 13337, 13344, 13358, 13367, 13439, 13446,
+  13472, 13484, 13506, 13524
 
 * New program pldd to list loaded object of a process
   Implemented by Ulrich Drepper.
diff --git a/iconv/gconv.h b/iconv/gconv.h
index 2946335..bc6d381 100644
--- a/iconv/gconv.h
+++ b/iconv/gconv.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997-1999, 2000-2002, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 1997-1999, 2000-2002, 2007, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -56,7 +56,8 @@ enum
 enum
 {
   __GCONV_IS_LAST = 0x0001,
-  __GCONV_IGNORE_ERRORS = 0x0002
+  __GCONV_IGNORE_ERRORS = 0x0002,
+  __GCONV_SWAP = 0x0004
 };
 
 
diff --git a/iconvdata/unicode.c b/iconvdata/unicode.c
index df452d2..dba4c34 100644
--- a/iconvdata/unicode.c
+++ b/iconvdata/unicode.c
@@ -1,5 +1,5 @@
 /* Conversion module for Unicode
-   Copyright (C) 1999, 2000-2002 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000-2002, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
 
@@ -57,7 +57,7 @@
 	    *inptrp = inptr += 2;					      \
 	  else if (get16u (inptr) == BOM_OE)				      \
 	    {								      \
-	      ((struct unicode_data *) step->__data)->swap = 1;		      \
+	      data->__flags |= __GCONV_SWAP;				      \
 	      *inptrp = inptr += 2;					      \
 	    }								      \
 	}								      \
@@ -71,7 +71,7 @@
       put16u (outbuf, BOM);						      \
       outbuf += 2;							      \
     }									      \
-  swap = ((struct unicode_data *) step->__data)->swap;
+  swap = data->__flags & __GCONV_SWAP;
 #define EXTRA_LOOP_ARGS		, swap
 
 
@@ -86,7 +86,6 @@ enum direction
 struct unicode_data
 {
   enum direction dir;
-  int swap;
 };
 
 
@@ -110,7 +109,6 @@ gconv_init (struct __gconv_step *step)
   if (new_data != NULL)
     {
       new_data->dir = dir;
-      new_data->swap = 0;
       step->__data = new_data;
 
       if (dir == from_unicode)
diff --git a/iconvdata/utf-16.c b/iconvdata/utf-16.c
index 7f6c760..e34d23f 100644
--- a/iconvdata/utf-16.c
+++ b/iconvdata/utf-16.c
@@ -1,5 +1,5 @@
 /* Conversion module for UTF-16.
-   Copyright (C) 1999, 2000-2002, 2003, 2005 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000-2002, 2003, 2005, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
 
@@ -44,35 +44,42 @@
 #define PREPARE_LOOP \
   enum direction dir = ((struct utf16_data *) step->__data)->dir;	      \
   enum variant var = ((struct utf16_data *) step->__data)->var;		      \
-  if (__builtin_expect (data->__invocation_counter == 0, 0) && var == UTF_16) \
+  if (__builtin_expect (data->__invocation_counter == 0, 0))		      \
     {									      \
-      if (FROM_DIRECTION)						      \
+      if (var == UTF_16)						      \
 	{								      \
-	  /* We have to find out which byte order the file is encoded in.  */ \
-	  if (inptr + 2 > inend)					      \
-	    return (inptr == inend					      \
-		    ? __GCONV_EMPTY_INPUT : __GCONV_INCOMPLETE_INPUT);	      \
-									      \
-	  if (get16u (inptr) == BOM)					      \
-	    /* Simply ignore the BOM character.  */			      \
-	    *inptrp = inptr += 2;					      \
-	  else if (get16u (inptr) == BOM_OE)				      \
+	  if (FROM_DIRECTION)						      \
 	    {								      \
-	      ((struct utf16_data *) step->__data)->swap = 1;		      \
-	      *inptrp = inptr += 2;					      \
+	      /* We have to find out which byte order the file is	      \
+		 encoded in.  */					      \
+	      if (inptr + 2 > inend)					      \
+		return (inptr == inend					      \
+			? __GCONV_EMPTY_INPUT : __GCONV_INCOMPLETE_INPUT);    \
+									      \
+	      if (get16u (inptr) == BOM)				      \
+		/* Simply ignore the BOM character.  */			      \
+		*inptrp = inptr += 2;					      \
+	      else if (get16u (inptr) == BOM_OE)			      \
+		{							      \
+		  data->__flags |= __GCONV_SWAP;			      \
+		  *inptrp = inptr += 2;					      \
+		}							      \
 	    }								      \
-	}								      \
-      else if (!FROM_DIRECTION && !data->__internal_use)		      \
-	{								      \
-	  /* Emit the Byte Order Mark.  */				      \
-	  if (__builtin_expect (outbuf + 2 > outend, 0))		      \
-	    return __GCONV_FULL_OUTPUT;					      \
+	  else if (!FROM_DIRECTION && !data->__internal_use)		      \
+	    {								      \
+	      /* Emit the Byte Order Mark.  */				      \
+	      if (__builtin_expect (outbuf + 2 > outend, 0))		      \
+		return __GCONV_FULL_OUTPUT;				      \
 									      \
-	  put16u (outbuf, BOM);						      \
-	  outbuf += 2;							      \
+	      put16u (outbuf, BOM);					      \
+	      outbuf += 2;						      \
+	    }								      \
 	}								      \
+      else if ((var == UTF_16LE && BYTE_ORDER == BIG_ENDIAN)		      \
+	       || (var == UTF_16BE && BYTE_ORDER == LITTLE_ENDIAN))	      \
+	data->__flags |= __GCONV_SWAP;					      \
     }									      \
-  int swap = ((struct utf16_data *) step->__data)->swap;
+  const int swap = data->__flags & __GCONV_SWAP;
 #define EXTRA_LOOP_ARGS		, swap
 
 
@@ -96,7 +103,6 @@ struct utf16_data
 {
   enum direction dir;
   enum variant var;
-  int swap;
 };
 
 
@@ -151,9 +157,6 @@ gconv_init (struct __gconv_step *step)
 	{
 	  new_data->dir = dir;
 	  new_data->var = var;
-	  new_data->swap = ((var == UTF_16LE && BYTE_ORDER == BIG_ENDIAN)
-			    || (var == UTF_16BE
-				&& BYTE_ORDER == LITTLE_ENDIAN));
 	  step->__data = new_data;
 
 	  if (dir == from_utf16)
diff --git a/iconvdata/utf-32.c b/iconvdata/utf-32.c
index cc02651..27ea3db 100644
--- a/iconvdata/utf-32.c
+++ b/iconvdata/utf-32.c
@@ -1,5 +1,5 @@
 /* Conversion module for UTF-32.
-   Copyright (C) 1999, 2000-2002 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000-2002, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -45,7 +45,7 @@
   int swap;								      \
   if (FROM_DIRECTION && var == UTF_32)					      \
     {									      \
-      if (data->__invocation_counter == 0)				      \
+      if (__builtin_expect (data->__invocation_counter == 0, 0))	      \
 	{								      \
 	  /* We have to find out which byte order the file is encoded in.  */ \
 	  if (inptr + 4 > inend)					      \
@@ -57,7 +57,7 @@
 	    *inptrp = inptr += 4;					      \
 	  else if (get32u (inptr) == BOM_OE)				      \
 	    {								      \
-	      ((struct utf32_data *) step->__data)->swap = 1;		      \
+	      data->__flags |= __GCONV_SWAP;				      \
 	      *inptrp = inptr += 4;					      \
 	    }								      \
 	}								      \
@@ -72,7 +72,11 @@
       put32u (outbuf, BOM);						      \
       outbuf += 4;							      \
     }									      \
-  swap = ((struct utf32_data *) step->__data)->swap;
+  else if (__builtin_expect (data->__invocation_counter == 0, 0)	      \
+	   && ((var == UTF_32LE && BYTE_ORDER == BIG_ENDIAN)		      \
+	       || (var == UTF_32BE && BYTE_ORDER == LITTLE_ENDIAN)))	      \
+    data->__flags |= __GCONV_SWAP;					      \
+  swap = data->__flags & __GCONV_SWAP;
 #define EXTRA_LOOP_ARGS		, var, swap
 
 
@@ -96,7 +100,6 @@ struct utf32_data
 {
   enum direction dir;
   enum variant var;
-  int swap;
 };
 
 
@@ -151,9 +154,6 @@ gconv_init (struct __gconv_step *step)
 	{
 	  new_data->dir = dir;
 	  new_data->var = var;
-	  new_data->swap = ((var == UTF_32LE && BYTE_ORDER == BIG_ENDIAN)
-			    || (var == UTF_32BE
-				&& BYTE_ORDER == LITTLE_ENDIAN));
 	  step->__data = new_data;
 
 	  if (dir == from_utf32)
@@ -216,9 +216,8 @@ gconv_end (struct __gconv_step *data)
       }									      \
 									      \
     if (swap)								      \
-      put32 (outptr, bswap_32 (c));					      \
-    else								      \
-      put32 (outptr, c);						      \
+      c = bswap_32 (c);							      \
+    put32 (outptr, c);							      \
 									      \
     outptr += 4;							      \
     inptr += 4;								      \

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog           |    8 +++++++
 NEWS                |    4 +-
 iconv/gconv.h       |    5 ++-
 iconvdata/unicode.c |    8 ++----
 iconvdata/utf-16.c  |   57 ++++++++++++++++++++++++++------------------------
 iconvdata/utf-32.c  |   21 +++++++++---------
 6 files changed, 56 insertions(+), 47 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]