*** charcnv.c.~1.55.2.28.~ Fri Jul 4 12:53:07 2003 --- charcnv.c Tue Jul 8 09:57:18 2003 *************** *** 627,632 **** --- 627,633 ---- size_t pull_ucs2(const void *base_ptr, char *dest, const void *src, size_t dest_len, size_t src_len, int flags) { size_t ret; + BOOL src_not_aligned = False; if (dest_len == (size_t)-1) dest_len = sizeof(pstring); *************** *** 635,640 **** --- 636,643 ---- src = (const void *)((const char *)src + 1); if (src_len > 0) src_len--; + } else if (flags & STR_NOALIGN) { + src_not_aligned = True; } if (flags & STR_TERMINATE) { *************** *** 652,658 **** if (src_len != (size_t)-1) src_len &= ~1; ! ret = convert_string(CH_UCS2, CH_UNIX, src, src_len, dest, dest_len); if (dest_len) dest[MIN(ret, dest_len-1)] = 0; else --- 655,668 ---- if (src_len != (size_t)-1) src_len &= ~1; ! if (src_not_aligned) { ! char *aligned_src = memdup(src, src_len); ! ! ret = convert_string(CH_UCS2, CH_UNIX, src, src_len, dest, dest_len); ! free(aligned_src); ! } else ! ret = convert_string(CH_UCS2, CH_UNIX, src, src_len, dest, dest_len); ! if (dest_len) dest[MIN(ret, dest_len-1)] = 0; else