diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2014-11-14 04:24:04 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2014-11-14 04:24:04 +0000 |
commit | cdd204cad8e7fdc25b5c90158b4423d7598bf02c (patch) | |
tree | 365efefd825c56b07f85b387d9046ff9b3c25cb9 /preconv.c | |
parent | c0cfd0d601c1d58cab2a03234d79d564f7bfc104 (diff) | |
download | mandoc-cdd204cad8e7fdc25b5c90158b4423d7598bf02c.tar.gz |
Remove needless and harmful byte swapping on big endian architectures.
Problem found and patch provided by Martin Natano at bitrig, thanks!
Tested on macppc by natano@ and on i386, amd64, and sparc64 myself.
While here, sync with OpenBSD by removing some trailing whitespace.
Diffstat (limited to 'preconv.c')
-rw-r--r-- | preconv.c | 28 |
1 files changed, 4 insertions, 24 deletions
@@ -29,8 +29,7 @@ preconv_encode(struct buf *ib, size_t *ii, struct buf *ob, size_t *oi, int *filenc) { size_t i; - const long one = 1L; - int state, be; + int state; unsigned int accum; unsigned char cu; @@ -39,12 +38,6 @@ preconv_encode(struct buf *ib, size_t *ii, struct buf *ob, size_t *oi, state = 0; accum = 0U; - be = 0; - - /* Quick test for big-endian value. */ - - if ( ! (*((const char *)(&one)))) - be = 1; for (i = *ii; i < ib->sz; i++) { cu = ib->buf[i]; @@ -66,19 +59,6 @@ preconv_encode(struct buf *ib, size_t *ii, struct buf *ob, size_t *oi, if (state) continue; - /* - * Accum is held in little-endian order as - * stipulated by the UTF-8 sequence coding. We - * need to convert to a native big-endian if our - * architecture requires it. - */ - - if (be) - accum = (accum >> 24) | - ((accum << 8) & 0x00FF0000) | - ((accum >> 8) & 0x0000FF00) | - (accum << 24); - if (accum < 0x80) ob->buf[(*oi)++] = accum; else @@ -93,7 +73,7 @@ preconv_encode(struct buf *ib, size_t *ii, struct buf *ob, size_t *oi, * UTF-8 bitmask, calculate the expected UTF-8 * state from it. */ - for (state = 0; state < 7; state++) + for (state = 0; state < 7; state++) if ( ! (cu & (1 << (7 - state)))) break; @@ -158,7 +138,7 @@ preconv_cue(const struct buf *b, size_t offset) /* Check if we have the correct header/trailer. */ - if ((sz = (size_t)(eoln - ln)) < 10 || + if ((sz = (size_t)(eoln - ln)) < 10 || memcmp(ln, ".\\\" -*-", 7) || memcmp(eoln - 3, "-*-", 3)) return(MPARSE_UTF8 | MPARSE_LATIN1); @@ -189,7 +169,7 @@ preconv_cue(const struct buf *b, size_t offset) sz -= phsz; ln += phsz; continue; - } + } sz -= 7; ln += 7; |