tizen 2.4 release
[framework/base/tizen-locale.git] / iconvdata / unicode.c
index df452d2..b70d044 100644 (file)
@@ -1,5 +1,5 @@
 /* Conversion module for Unicode
-   Copyright (C) 1999, 2000-2002 Free Software Foundation, Inc.
+   Copyright (C) 1999-2015 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
 
@@ -14,9 +14,8 @@
    Lesser General Public License for more details.
 
    You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
 
 #include <byteswap.h>
 #include <dlfcn.h>
@@ -39,6 +38,7 @@
 #define DEFINE_FINI            0
 #define MIN_NEEDED_FROM                2
 #define MIN_NEEDED_TO          4
+#define ONE_DIRECTION          0
 #define FROM_DIRECTION         (dir == from_unicode)
 #define PREPARE_LOOP \
   enum direction dir = ((struct unicode_data *) step->__data)->dir;          \
@@ -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;                                           \
            }                                                                 \
        }                                                                     \
   else if (!data->__internal_use && data->__invocation_counter == 0)         \
     {                                                                        \
       /* Emit the Byte Order Mark.  */                                       \
-      if (__builtin_expect (outbuf + 2 > outend, 0))                         \
+      if (__glibc_unlikely (outbuf + 2 > outend))                            \
        return __GCONV_FULL_OUTPUT;                                           \
                                                                              \
       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)
@@ -153,12 +151,12 @@ gconv_end (struct __gconv_step *data)
   {                                                                          \
     uint32_t c = get32 (inptr);                                                      \
                                                                              \
-    if (__builtin_expect (c >= 0x10000, 0))                                  \
+    if (__glibc_unlikely (c >= 0x10000))                                     \
       {                                                                              \
        UNICODE_TAG_HANDLER (c, 4);                                           \
        STANDARD_TO_LOOP_ERR_HANDLER (4);                                     \
       }                                                                              \
-    else if (__builtin_expect (c >= 0xd800 && c < 0xe000, 0))                \
+    else if (__glibc_unlikely (c >= 0xd800 && c < 0xe000))                   \
       {                                                                              \
        /* Surrogate characters in UCS-4 input are not valid.                 \
           We must catch this, because the UCS-2 output might be              \
@@ -198,7 +196,7 @@ gconv_end (struct __gconv_step *data)
     if (swap)                                                                \
       u1 = bswap_16 (u1);                                                    \
                                                                              \
-    if (__builtin_expect (u1 >= 0xd800 && u1 < 0xe000, 0))                   \
+    if (__glibc_unlikely (u1 >= 0xd800 && u1 < 0xe000))                              \
       {                                                                              \
        /* Surrogate characters in UCS-2 input are not valid.  Reject         \
           them.  (Catching this here is not security relevant.)  */          \