Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/external/bsd/nvi/dist/common handle unaligned accesses
details: https://anonhg.NetBSD.org/src/rev/31d967f8b10d
branches: trunk
changeset: 325823:31d967f8b10d
user: christos <christos%NetBSD.org@localhost>
date: Tue Jan 07 21:46:47 2014 +0000
description:
handle unaligned accesses
diffstat:
external/bsd/nvi/dist/common/conv.c | 35 +++++++++++++++++++++++------------
1 files changed, 23 insertions(+), 12 deletions(-)
diffs (79 lines):
diff -r e5510f15829d -r 31d967f8b10d external/bsd/nvi/dist/common/conv.c
--- a/external/bsd/nvi/dist/common/conv.c Tue Jan 07 20:25:24 2014 +0000
+++ b/external/bsd/nvi/dist/common/conv.c Tue Jan 07 21:46:47 2014 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: conv.c,v 1.2 2013/11/22 15:52:05 christos Exp $ */
+/* $NetBSD: conv.c,v 1.3 2014/01/07 21:46:47 christos Exp $ */
/*-
* Copyright (c) 1993, 1994
* The Regents of the University of California. All rights reserved.
@@ -53,8 +53,10 @@
BINC_RETW(NULL, *tostr, *blen, len);
*tolen = len;
- for (i = 0; i < len; ++i)
- (*tostr)[i] = (u_char) str[i];
+ for (i = 0; i < len; ++i) {
+ CHAR_T w = (u_char)str[i];
+ memcpy((*tostr) + i, &w, sizeof(**tostr));
+ }
*dst = cw->bp1;
@@ -131,11 +133,15 @@
#endif
for (i = 0, j = 0; j < len; ) {
- n = mbrtowc((*tostr)+i, src+j, len-j, &mbs);
+ CHAR_T w;
+ n = mbrtowc(&w, src + j, len - j, &mbs);
+ memcpy((*tostr) + i, &w, sizeof(**tostr));
/* NULL character converted */
- if (n == (size_t)-2) error = -(len-j);
- if (n == (size_t)-1 || n == (size_t)-2)
- HANDLE_MBR_ERROR(n, mbs, (*tostr)[i], src[j]);
+ if (n == (size_t)-2) error = -(len - j);
+ if (n == (size_t)-1 || n == (size_t)-2) {
+ HANDLE_MBR_ERROR(n, mbs, w, src[j]);
+ memcpy((*tostr) + i, &w, sizeof(**tostr));
+ }
if (n == 0) n = 1;
j += n;
if (++i >= *blen) {
@@ -216,8 +222,11 @@
BINC_RETC(NULL, *tostr, *blen, len);
*tolen = len;
- for (i = 0; i < len; ++i)
- (*tostr)[i] = str[i];
+ for (i = 0; i < len; ++i) {
+ CHAR_T w;
+ memcpy(&w, str + i, sizeof(w));
+ (*tostr)[i] = w;
+ }
*dst = cw->bp1;
@@ -282,9 +291,11 @@
#endif
for (i = 0, j = 0; i < (size_t)len; ++i) {
- n = wcrtomb(dst+j, str[i], &mbs);
+ CHAR_T w;
+ memcpy(&w, str + i, sizeof(w));
+ n = wcrtomb(dst + j, w, &mbs);
if (n == (size_t)-1)
- HANDLE_MBR_ERROR(n, mbs, dst[j], str[i]);
+ HANDLE_MBR_ERROR(n, mbs, dst[j], w);
j += n;
if (buflen < j + MB_CUR_MAX) {
if (id != (iconv_t)-1) {
@@ -297,7 +308,7 @@
}
}
- n = wcrtomb(dst+j, L'\0', &mbs);
+ n = wcrtomb(dst + j, L'\0', &mbs);
j += n - 1; /* don't count NUL at the end */
*tolen = j;
Home |
Main Index |
Thread Index |
Old Index