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:
parent
a2536328aa
commit
914991f5f6
14
od.c
14
od.c
|
@ -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':
|
||||||
|
|
Loading…
Reference in New Issue
Block a user