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.
This commit is contained in:
Will Newton 2014-07-10 09:18:03 +01:00
parent 37fccd4192
commit 32bead5b6d
2 changed files with 34 additions and 30 deletions

View File

@ -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

View File

@ -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. */