+2001-11-30 Radek Doulik <rodo@ximian.com>
+
+ * mono-endian.h: reverted last change
+ added function prototypes
+
+ * Makefile.am (libmetadata_a_SOURCES): reverted my last change and
+ add mono-endian.c back
+
+ * mono-endian.c: returned back, as Paolo pointed out, it's needed
+ for unaligned access, I've mistaked it with endianess. I am
+ sorry.
+ (mono_read16): fix reverted endianess
+ (mono_read64): ditto
+ (mono_read32): ditto
+
2001-11-30 Dick Porter <dick@ximian.com>
* exception.c: Implement mono_exception_from_name()
assembly.c \
image.c \
metadata.c \
+ mono-endian.c \
private.h \
rawbuffer.c \
reflection.c \
--- /dev/null
+#include "mono-endian.h"
+
+#if NO_UNALIGNED_ACCESS
+
+typedef union {
+ char c [2];
+ guint16 i;
+} mono_rint16;
+
+typedef union {
+ char c [4];
+ guint32 i;
+} mono_rint32;
+
+typedef union {
+ char c [8];
+ guint64 i;
+} mono_rint64;
+
+guint16
+mono_read16 (const unsigned char *x)
+{
+ mono_rint16 r;
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+ r.c [0] = x [0];
+ r.c [1] = x [1];
+#else
+ r.c [1] = x [0];
+ r.c [0] = x [1];
+#endif
+ return r.i;
+}
+
+guint32
+mono_read32 (const unsigned char *x)
+{
+ mono_rint32 r;
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+ r.c [0] = x [0];
+ r.c [1] = x [1];
+ r.c [2] = x [2];
+ r.c [3] = x [3];
+#else
+ r.c [3] = x [0];
+ r.c [2] = x [1];
+ r.c [1] = x [2];
+ r.c [0] = x [3];
+#endif
+ return r.i;
+}
+
+guint64
+mono_read64 (const unsigned char *x)
+{
+ mono_rint64 r;
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+ r.c [0] = x [0];
+ r.c [1] = x [1];
+ r.c [2] = x [2];
+ r.c [3] = x [3];
+ r.c [4] = x [4];
+ r.c [5] = x [5];
+ r.c [6] = x [6];
+ r.c [7] = x [7];
+#else
+ r.c [7] = x [0];
+ r.c [6] = x [1];
+ r.c [5] = x [2];
+ r.c [4] = x [3];
+ r.c [3] = x [4];
+ r.c [2] = x [5];
+ r.c [1] = x [6];
+ r.c [0] = x [7];
+#endif
+ return r.i;
+}
+
+#endif
double fval;
} mono_rdouble;
+#if NO_UNALIGNED_ACCESS
+
+guint16 mono_read16 (const unsigned char *x);
+guint32 mono_read32 (const unsigned char *x);
+guint64 mono_read64 (const unsigned char *x);
+
+#define read16(x) (mono_read16 ((x)))
+#define read32(x) (mono_read32 ((x)))
+#define read64(x) (mono_read64 ((x)))
+
+#else
+
#define read16(x) GUINT16_FROM_LE (*((guint16 *) (x)))
#define read32(x) GUINT32_FROM_LE (*((guint32 *) (x)))
#define read64(x) GUINT64_FROM_LE (*((guint64 *) (x)))
+#endif
+
#define readr4(x,dest) \
do { \
mono_rfloat mf; \