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.
This commit is contained in:
FRIGN 2015-10-26 12:13:34 +01:00 committed by sin
parent a2536328aa
commit 914991f5f6

14
od.c
View File

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