From 756500fee5c95fb23bcf9973a05f36deb33612f0 Mon Sep 17 00:00:00 2001
From: Per Hedbor <ph@opera.com>
Date: Fri, 11 Aug 1995 21:24:01 +0200
Subject: [PATCH] Core in EXTRACT_UCHAR.

Rev: src/port.c:1.2
Rev: src/port.h:1.2
---
 src/port.c | 17 ++++++++++++++---
 src/port.h | 17 ++++++++++++++---
 2 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/src/port.c b/src/port.c
index f7b7414159..4ec365daa6 100644
--- a/src/port.c
+++ b/src/port.c
@@ -577,16 +577,27 @@ int VFPRINTF(FILE *f,char *s,va_list args)
 #if defined(DEBUG) && !defined(HANDLES_UNALIGNED_MEMORY_ACCESS)
 unsigned INT16 EXTRACT_UWORD(unsigned char *p)
 {
-  return (EXTRACT_UCHAR(p)<<8) + EXTRACT_UCHAR(p+1);
+  unsigned INT16 a;
+  ((unsigned char *)&a)[0]=p[0];
+  ((unsigned char *)&a)[1]=p[1];
+  return a;
 }
 
 INT16 EXTRACT_WORD(unsigned char *p)
 {
-  return (EXTRACT_CHAR(p)<<8) | EXTRACT_UCHAR(p+1);
+  INT16 a;
+  ((unsigned char *)&a)[0]=p[0];
+  ((unsigned char *)&a)[1]=p[1];
+  return a;
 }
 
 INT32 EXTRACT_INT(unsigned char *p)
 {
-  return (EXTRACT_WORD(p)<<16) | EXTRACT_UWORD(p+2);
+  INT16 a;
+  ((unsigned char *)&a)[0]=p[0];
+  ((unsigned char *)&a)[1]=p[1];
+  ((unsigned char *)&a)[2]=p[2];
+  ((unsigned char *)&a)[3]=p[3];
+  return a;
 }
 #endif
diff --git a/src/port.h b/src/port.h
index d956ae9a1d..f00de8a179 100644
--- a/src/port.h
+++ b/src/port.h
@@ -142,17 +142,28 @@ INT32 EXTRACT_INT(unsigned char *p);
 #else
 static INLINE unsigned INT16 EXTRACT_UWORD(unsigned char *p)
 {
-  return (EXTRACT_UCHAR(p)<<8) + EXTRACT_UCHAR(p+1);
+  unsigned INT16 a;
+  ((unsigned char *)&a)[0]=p[0];
+  ((unsigned char *)&a)[1]=p[1];
+  return a;
 }
 
 static INLINE INT16 EXTRACT_WORD(unsigned char *p)
 {
-  return (EXTRACT_CHAR(p)<<8) | EXTRACT_UCHAR(p+1);
+  INT16 a;
+  ((unsigned char *)&a)[0]=p[0];
+  ((unsigned char *)&a)[1]=p[1];
+  return a;
 }
 
 static INLINE INT32 EXTRACT_INT(unsigned char *p)
 {
-  return (EXTRACT_WORD(p)<<16) | EXTRACT_UWORD(p+2);
+  INT16 a;
+  ((unsigned char *)&a)[0]=p[0];
+  ((unsigned char *)&a)[1]=p[1];
+  ((unsigned char *)&a)[2]=p[2];
+  ((unsigned char *)&a)[3]=p[3];
+  return a;
 }
 #endif
 #endif
-- 
GitLab