sbase

suckless unix tools
git clone git://git.suckless.org/sbase
Log | Files | Refs | README | LICENSE

commit 914991f5f657ddceadf474c18b897e13ed74baaf
parent a2536328aa0c48b8052923117e4e4a026a1a7a19
Author: FRIGN <dev@frign.de>
Date:   Mon, 26 Oct 2015 12:13:34 +0100

Fix remaining endian-issue in od(1)

After setting up qemu and testing od(1) in a Big Endian environment,
I found out that the conditional in the printing function was not
right.
Instead, it's supposed to be way simpler. While at it, we don't need
HOST_BIG_ENDIAN any more. Just set big_endian properly in main()
and be done with it.

Diffstat:
Mod.c | 14++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/od.c b/od.c @@ -7,8 +7,6 @@ #include "queue.h" #include "util.h" -#define HOST_BIG_ENDIAN (*(uint16_t *)"\0\xff" == 0xff) - struct type { unsigned char format; unsigned int len; @@ -72,14 +70,14 @@ printchunk(unsigned char *s, unsigned char format, size_t len) { } break; default: - if (big_endian == HOST_BIG_ENDIAN) { - for (res = 0, basefac = 1, i = 0; i < len; i++) { - res += s[i] * basefac; + if (big_endian) { + for (res = 0, basefac = 1, i = len; i; i--) { + res += s[i - 1] * basefac; basefac <<= 8; } } else { - for (res = 0, basefac = 1, i = len; i; i--) { - res += s[i - 1] * basefac; + for (res = 0, basefac = 1, i = 0; i < len; i++) { + res += s[i] * basefac; basefac <<= 8; } } @@ -180,7 +178,7 @@ main(int argc, char *argv[]) int ret = 0; char *s; - big_endian = HOST_BIG_ENDIAN; + big_endian = (*(uint16_t *)"\0\xff" == 0xff); ARGBEGIN { case 'A':