1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
Patch from upstream darcs repository, see this bugzilla entry for details:
http://bugs.ghostscript.com/show_bug.cgi?id=690932
Wed Jun 16 10:29:54 UTC 2010 tor@ghostscript.com
* Do runtime endianness test instead of relying on unreliable preprocessor macros.
diff -rN -u old-mupdf/apps/x11_image.c new-mupdf-1/apps/x11_image.c
--- old-mupdf/apps/x11_image.c 2010-06-16 12:33:35.000000000 +0000
+++ new-mupdf-1/apps/x11_image.c 2010-06-16 12:33:35.000000000 +0000
@@ -10,7 +10,7 @@
# define _XOPEN_SOURCE 1
#endif
-#include <fitz.h>
+#include "fitz.h"
#include <X11/Xlib.h>
#include <X11/Xutil.h>
@@ -205,11 +205,10 @@
unsigned long rs, gs, bs;
byteorder = ImageByteOrder(info.display);
-#if BYTE_ORDER == BIG_ENDIAN
- byterev = byteorder != MSBFirst;
-#else
- byterev = byteorder != LSBFirst;
-#endif
+ if (fz_isbigendian())
+ byterev = byteorder != MSBFirst;
+ else
+ byterev = byteorder != LSBFirst;
rm = info.visual.red_mask;
gm = info.visual.green_mask;
diff -rN -u old-mupdf/draw/imageunpack.c new-mupdf-1/draw/imageunpack.c
--- old-mupdf/draw/imageunpack.c 2010-06-16 12:33:35.000000000 +0000
+++ new-mupdf-1/draw/imageunpack.c 2010-06-16 12:33:36.000000000 +0000
@@ -31,6 +31,12 @@
justinvert &= min[i] == 255 && max[i] == 0 && sub[i] == -255;
}
+ unsigned mask;
+ if (fz_isbigendian())
+ mask = 0x00ff00ff;
+ else
+ mask = 0xff00ff00;
+
if (!needed)
return;
@@ -51,11 +57,7 @@
wh = wh - 2 * hwh;
while(hwh--) {
unsigned in = *wp;
-#if BYTE_ORDER == LITTLE_ENDIAN
- unsigned out = in ^ 0xff00ff00;
-#else
- unsigned out = in ^ 0x00ff00ff;
-#endif
+ unsigned out = in ^ mask;
*wp++ = out;
}
p = (byte *)wp;
diff -rN -u old-mupdf/fitz/base_cpudep.c new-mupdf-1/fitz/base_cpudep.c
--- old-mupdf/fitz/base_cpudep.c 2010-06-16 12:33:35.000000000 +0000
+++ new-mupdf-1/fitz/base_cpudep.c 2010-06-16 12:33:36.000000000 +0000
@@ -10,6 +10,12 @@
/* global run-time constant */
unsigned fz_cpuflags = 0;
+int fz_isbigendian(void)
+{
+ static const int one = 1;
+ return *(char*)&one == 0;
+}
+
#ifndef HAVE_CPUDEP
void fz_cpudetect(void)
diff -rN -u old-mupdf/fitz/fitz_base.h new-mupdf-1/fitz/fitz_base.h
--- old-mupdf/fitz/fitz_base.h 2010-06-16 12:33:35.000000000 +0000
+++ new-mupdf-1/fitz/fitz_base.h 2010-06-16 12:33:36.000000000 +0000
@@ -86,6 +86,8 @@
/* treat as constant! */
extern unsigned fz_cpuflags;
+int fz_isbigendian(void);
+
/*
* Base Fitz runtime.
*/
|