aboutsummaryrefslogtreecommitdiff
path: root/iconv
diff options
context:
space:
mode:
Diffstat (limited to 'iconv')
-rw-r--r--iconv/loop.c4
-rw-r--r--iconv/skeleton.c18
2 files changed, 10 insertions, 12 deletions
diff --git a/iconv/loop.c b/iconv/loop.c
index 7ddeb3d..bf0ab48 100644
--- a/iconv/loop.c
+++ b/iconv/loop.c
@@ -268,7 +268,9 @@ FCTNAME (LOOPFCT) (const unsigned char **inptrp, const unsigned char *inend,
/* Include the file a second time to define the function to define the
function to handle unaligned access. */
-#if !defined _STRING_ARCH_unaligned && !defined DEFINE_UNALIGNED
+#if !defined DEFINE_UNALIGNED && !defined _STRING_ARCH_unaligned \
+ && MIN_NEEDED_FROM != 1 && MAX_NEEDED_FROM % MIN_NEEDED_FROM == 0 \
+ && MIN_NEEDED_TO != 1 && MAX_NEEDED_TO % MIN_NEEDED_TO == 0
# define DEFINE_UNALIGNED
# include "loop.c"
# undef DEFINE_UNALIGNED
diff --git a/iconv/skeleton.c b/iconv/skeleton.c
index dfd067e..52c67a2 100644
--- a/iconv/skeleton.c
+++ b/iconv/skeleton.c
@@ -297,7 +297,9 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data,
unsigned char *outbuf = data->__outbuf;
unsigned char *outend = data->__outbufend;
unsigned char *outstart;
-#ifdef _STRING_ARCH_unaligned
+#if defined _STRING_ARCH_unaligned \
+ || MIN_NEEDED_FROM == 1 || MAX_NEEDED_FROM % MIN_NEEDED_FROM != 0 \
+ || MIN_NEEDED_TO == 1 || MAX_NEEDED_TO % MIN_NEEDED_TO != 0
# define unaligned 0
#else
/* The following assumes that encodings, which have a variable length
@@ -308,19 +310,13 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data,
int unaligned;
unaligned = ((FROM_DIRECTION
- && ((MIN_NEEDED_FROM > 1
- && MAX_NEEDED_FROM % MIN_NEEDED_FROM == 0
- && (uintptr_t) inptr % MIN_NEEDED_FROM != 0)
- || (MIN_NEEDED_TO > 1
- && MAX_NEEDED_TO % MIN_NEEDED_TO == 0
+ && ((uintptr_t) inptr % MIN_NEEDED_FROM != 0
+ || (data->__is_last
&& (uintptr_t) outbuf % MIN_NEEDED_TO != 0)))
|| (!FROM_DIRECTION
- && ((MIN_NEEDED_FROM > 1
- && MAX_NEEDED_FROM % MIN_NEEDED_FROM == 0
+ && ((data->__is_last
&& (uintptr_t) outbuf % MIN_NEEDED_FROM != 0)
- || (MIN_NEEDED_TO > 1
- && MAX_NEEDED_TO % MIN_NEEDED_TO == 0
- && (uintptr_t) inptr % MIN_NEEDED_TO != 0))));
+ || (uintptr_t) inptr % MIN_NEEDED_TO != 0)));
# define GEN_unaligned(name) GEN_unaligned2 (name)
# define GEN_unaligned2(name) name##_unaligned
#endif