This is the mail archive of the
libc-alpha@sourceware.cygnus.com
mailing list for the glibc project.
Re: utf-16 iconv requires aligned buffer
- To: libc-alpha at sourceware dot cygnus dot com
- Subject: Re: utf-16 iconv requires aligned buffer
- From: Bruno Haible <haible at ilog dot fr>
- Date: Wed, 29 Mar 2000 18:13:52 +0200 (MET DST)
- References: <200003141632.RAA18040@jaures.ilog.fr>
Thanks for fixing that, Ulrich. But your put16 and put32 macros look like
they contain typos. Here is a fix for this.
Also, I think you wouldn't need get32/put32 on the "INTERNAL" side of each
converter, if the internal buffers were allocated aligned (at gconv_open.c:78).
Bruno
2000-03-29 Bruno Haible <haible@clisp.cons.org>
* iconv/loop.c (put16): Remove __const. Fix access index.
(put32): Remove __const. Use uint32_t instead of uint16_t.
* iconv/skeleton.c: Likewise.
*** iconv/loop.c.bak Wed Mar 29 17:14:36 2000
--- iconv/loop.c Wed Mar 29 17:46:54 2000
***************
*** 84,101 ****
# define put16(addr, val) \
({ uint16_t __val = (val); \
! ((__const unsigned char *) (addr))[0] = __val; \
! ((__const unsigned char *) (addr))[1] = __val >> 8; \
(void) 0; })
# define put32(addr, val) \
! ({ uint16_t __val = (val); \
! ((__const unsigned char *) (addr))[0] = __val; \
__val >>= 8; \
! ((__const unsigned char *) (addr))[1] = __val; \
__val >>= 8; \
! ((__const unsigned char *) (addr))[2] = __val; \
__val >>= 8; \
! ((__const unsigned char *) (addr))[3] = __val; \
(void) 0; })
# else
# define get16(addr) \
--- 84,101 ----
# define put16(addr, val) \
({ uint16_t __val = (val); \
! ((unsigned char *) (addr))[0] = __val; \
! ((unsigned char *) (addr))[1] = __val >> 8; \
(void) 0; })
# define put32(addr, val) \
! ({ uint32_t __val = (val); \
! ((unsigned char *) (addr))[0] = __val; \
__val >>= 8; \
! ((unsigned char *) (addr))[1] = __val; \
__val >>= 8; \
! ((unsigned char *) (addr))[2] = __val; \
__val >>= 8; \
! ((unsigned char *) (addr))[3] = __val; \
(void) 0; })
# else
# define get16(addr) \
***************
*** 109,126 ****
# define put16(addr, val) \
({ uint16_t __val = (val); \
! ((__const unsigned char *) (addr))[1] = __val; \
! ((__const unsigned char *) (addr))[2] = __val >> 8; \
(void) 0; })
# define put32(addr, val) \
! ({ uint16_t __val = (val); \
! ((__const unsigned char *) (addr))[3] = __val; \
__val >>= 8; \
! ((__const unsigned char *) (addr))[2] = __val; \
__val >>= 8; \
! ((__const unsigned char *) (addr))[1] = __val; \
__val >>= 8; \
! ((__const unsigned char *) (addr))[0] = __val; \
(void) 0; })
# endif
--- 109,126 ----
# define put16(addr, val) \
({ uint16_t __val = (val); \
! ((unsigned char *) (addr))[1] = __val; \
! ((unsigned char *) (addr))[0] = __val >> 8; \
(void) 0; })
# define put32(addr, val) \
! ({ uint32_t __val = (val); \
! ((unsigned char *) (addr))[3] = __val; \
__val >>= 8; \
! ((unsigned char *) (addr))[2] = __val; \
__val >>= 8; \
! ((unsigned char *) (addr))[1] = __val; \
__val >>= 8; \
! ((unsigned char *) (addr))[0] = __val; \
(void) 0; })
# endif
*** iconv/skeleton.c.bak Wed Mar 29 17:14:36 2000
--- iconv/skeleton.c Wed Mar 29 17:47:50 2000
***************
*** 142,159 ****
# define put16(addr, val) \
({ uint16_t __val = (val); \
! ((__const unsigned char *) (addr))[0] = __val; \
! ((__const unsigned char *) (addr))[1] = __val >> 8; \
(void) 0; })
# define put32(addr, val) \
! ({ uint16_t __val = (val); \
! ((__const unsigned char *) (addr))[0] = __val; \
__val >>= 8; \
! ((__const unsigned char *) (addr))[1] = __val; \
__val >>= 8; \
! ((__const unsigned char *) (addr))[2] = __val; \
__val >>= 8; \
! ((__const unsigned char *) (addr))[3] = __val; \
(void) 0; })
# else
# define get16(addr) \
--- 142,159 ----
# define put16(addr, val) \
({ uint16_t __val = (val); \
! ((unsigned char *) (addr))[0] = __val; \
! ((unsigned char *) (addr))[1] = __val >> 8; \
(void) 0; })
# define put32(addr, val) \
! ({ uint32_t __val = (val); \
! ((unsigned char *) (addr))[0] = __val; \
__val >>= 8; \
! ((unsigned char *) (addr))[1] = __val; \
__val >>= 8; \
! ((unsigned char *) (addr))[2] = __val; \
__val >>= 8; \
! ((unsigned char *) (addr))[3] = __val; \
(void) 0; })
# else
# define get16(addr) \
***************
*** 167,184 ****
# define put16(addr, val) \
({ uint16_t __val = (val); \
! ((__const unsigned char *) (addr))[1] = __val; \
! ((__const unsigned char *) (addr))[2] = __val >> 8; \
(void) 0; })
# define put32(addr, val) \
! ({ uint16_t __val = (val); \
! ((__const unsigned char *) (addr))[3] = __val; \
__val >>= 8; \
! ((__const unsigned char *) (addr))[2] = __val; \
__val >>= 8; \
! ((__const unsigned char *) (addr))[1] = __val; \
__val >>= 8; \
! ((__const unsigned char *) (addr))[0] = __val; \
(void) 0; })
# endif
#endif
--- 167,184 ----
# define put16(addr, val) \
({ uint16_t __val = (val); \
! ((unsigned char *) (addr))[1] = __val; \
! ((unsigned char *) (addr))[0] = __val >> 8; \
(void) 0; })
# define put32(addr, val) \
! ({ uint32_t __val = (val); \
! ((unsigned char *) (addr))[3] = __val; \
__val >>= 8; \
! ((unsigned char *) (addr))[2] = __val; \
__val >>= 8; \
! ((unsigned char *) (addr))[1] = __val; \
__val >>= 8; \
! ((unsigned char *) (addr))[0] = __val; \
(void) 0; })
# endif
#endif