commit 914991f5f657ddceadf474c18b897e13ed74baaf
Author:     FRIGN <[email protected]>
AuthorDate: Mon Oct 26 12:13:34 2015 +0100
Commit:     sin <[email protected]>
CommitDate: Mon Oct 26 11:55:41 2015 +0000

    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.

diff --git a/od.c b/od.c
index d04b3da..0bd8f6c 100644
--- 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':

Reply via email to