about summary refs log tree commit diff
diff options
context:
space:
mode:
authorWill Newton <will.newton@linaro.org>2014-07-10 09:18:03 +0100
committerWill Newton <will.newton@linaro.org>2014-07-17 10:16:09 +0100
commit32bead5b6d6edc4421a8ca628ce7dc14d435202a (patch)
tree23cc0513a890752687c5ba65486440c10ed80d43
parent37fccd41923a26bb1c3e083b8bc5e398e77a24d1 (diff)
downloadglibc-32bead5b6d6edc4421a8ca628ce7dc14d435202a.tar.gz
glibc-32bead5b6d6edc4421a8ca628ce7dc14d435202a.tar.xz
glibc-32bead5b6d6edc4421a8ca628ce7dc14d435202a.zip
iconv/loop.c: Fix -Wundef warning with !_STRING_ARCH_unaligned
If code is required to handle the unaligned case then loop.c includes
itself and relies on the #undefs at the end of the file to avoid
outputting two copies of LOOPFCT and gconv_btowc. However
MAX_NEEDED_INPUT is tested with #if so this causes a warning.
Reorder the code so that the function definitions are in an #else
block to make the behaviour clearer and fix the warning.

Verified that code is unchanged on x86_64 and arm.

ChangeLog:

2014-07-17  Will Newton  <will.newton@linaro.org>

	* iconv/loop.c: Move definition of LOOPFCT and gconv_btowc
	into an #else block.
-rw-r--r--ChangeLog5
-rw-r--r--iconv/loop.c59
2 files changed, 34 insertions, 30 deletions
diff --git a/ChangeLog b/ChangeLog
index afe5f84c99..9c9b2c3a3b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2014-07-17  Will Newton  <will.newton@linaro.org>
+
+	* iconv/loop.c: Move definition of LOOPFCT and gconv_btowc
+	into an #else block.
+
 2014-07-16  Roland McGrath  <roland@hack.frob.com>
 
 	* sysdeps/arm/preconfigure.ac: Apply EABI sanity check to arm*, not
diff --git a/iconv/loop.c b/iconv/loop.c
index f86f62747a..a480c0cd40 100644
--- a/iconv/loop.c
+++ b/iconv/loop.c
@@ -354,12 +354,10 @@ FCTNAME (LOOPFCT) (struct __gconv_step *step,
 # define DEFINE_UNALIGNED
 # include "loop.c"
 # undef DEFINE_UNALIGNED
-#endif
-
-
-#if MAX_NEEDED_INPUT > 1
-# define SINGLE(fct) SINGLE2 (fct)
-# define SINGLE2(fct) fct##_single
+#else
+# if MAX_NEEDED_INPUT > 1
+#  define SINGLE(fct) SINGLE2 (fct)
+#  define SINGLE2(fct) fct##_single
 static inline int
 __attribute ((always_inline))
 SINGLE(LOOPFCT) (struct __gconv_step *step,
@@ -369,37 +367,37 @@ SINGLE(LOOPFCT) (struct __gconv_step *step,
 		 size_t *irreversible EXTRA_LOOP_DECLS)
 {
   mbstate_t *state = step_data->__statep;
-#ifdef LOOP_NEED_FLAGS
+#  ifdef LOOP_NEED_FLAGS
   int flags = step_data->__flags;
-#endif
-#ifdef LOOP_NEED_DATA
+#  endif
+#  ifdef LOOP_NEED_DATA
   void *data = step->__data;
-#endif
+#  endif
   int result = __GCONV_OK;
   unsigned char bytebuf[MAX_NEEDED_INPUT];
   const unsigned char *inptr = *inptrp;
   unsigned char *outptr = *outptrp;
   size_t inlen;
 
-#ifdef INIT_PARAMS
+#  ifdef INIT_PARAMS
   INIT_PARAMS;
-#endif
+#  endif
 
-#ifdef UNPACK_BYTES
+#  ifdef UNPACK_BYTES
   UNPACK_BYTES
-#else
+#  else
   /* Add the bytes from the state to the input buffer.  */
   assert ((state->__count & 7) <= sizeof (state->__value));
   for (inlen = 0; inlen < (size_t) (state->__count & 7); ++inlen)
     bytebuf[inlen] = state->__value.__wchb[inlen];
-#endif
+#  endif
 
   /* Are there enough bytes in the input buffer?  */
   if (MIN_NEEDED_INPUT > 1
       && __builtin_expect (inptr + (MIN_NEEDED_INPUT - inlen) > inend, 0))
     {
       *inptrp = inend;
-#ifdef STORE_REST
+#  ifdef STORE_REST
       while (inptr < inend)
 	bytebuf[inlen++] = *inptr++;
 
@@ -408,12 +406,12 @@ SINGLE(LOOPFCT) (struct __gconv_step *step,
       inend = &bytebuf[inlen];
 
       STORE_REST
-#else
+#  else
       /* We don't have enough input for another complete input
 	 character.  */
       while (inptr < inend)
 	state->__value.__wchb[inlen++] = *inptr++;
-#endif
+#  endif
 
       return __GCONV_INCOMPLETE_INPUT;
     }
@@ -453,11 +451,11 @@ SINGLE(LOOPFCT) (struct __gconv_step *step,
       result = __GCONV_OK;
 
       /* Clear the state buffer.  */
-#ifdef CLEAR_STATE
+#  ifdef CLEAR_STATE
       CLEAR_STATE;
-#else
+#  else
       state->__count &= ~7;
-#endif
+#  endif
     }
   else if (result == __GCONV_INCOMPLETE_INPUT)
     {
@@ -466,11 +464,11 @@ SINGLE(LOOPFCT) (struct __gconv_step *step,
       assert (inend != &bytebuf[MAX_NEEDED_INPUT]);
 
       *inptrp += inend - bytebuf - (state->__count & 7);
-#ifdef STORE_REST
+#  ifdef STORE_REST
       inptrp = &inptr;
 
       STORE_REST
-#else
+#  else
       /* We don't have enough input for another complete input
 	 character.  */
       assert (inend - inptr > (state->__count & ~7));
@@ -479,24 +477,25 @@ SINGLE(LOOPFCT) (struct __gconv_step *step,
       inlen = 0;
       while (inptr < inend)
 	state->__value.__wchb[inlen++] = *inptr++;
-#endif
+#  endif
     }
 
   return result;
 }
-# undef SINGLE
-# undef SINGLE2
-#endif
+#  undef SINGLE
+#  undef SINGLE2
+# endif
 
 
-#ifdef ONEBYTE_BODY
+# ifdef ONEBYTE_BODY
 /* Define the shortcut function for btowc.  */
 static wint_t
 gconv_btowc (struct __gconv_step *step, unsigned char c)
   ONEBYTE_BODY
-# define FROM_ONEBYTE gconv_btowc
-#endif
+#  define FROM_ONEBYTE gconv_btowc
+# endif
 
+#endif
 
 /* We remove the macro definitions so that we can include this file again
    for the definition of another function.  */