[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pecl-cvs
Subject:    [PECL-CVS] =?utf-8?q?svn:_/pecl/dbase/trunk/_dbf=5Fmisc.c?=
From:       Christoph_Michael_Becker <cmb () php ! net>
Date:       2016-10-30 14:47:05
Message-ID: svn-cmb-1477838825-340801-155763213 () svn ! php ! net
[Download RAW message or body]

cmb                                      Sun, 30 Oct 2016 14:47:05 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=340801

Log:
Fix (get|put)_double wrt. endianess

These functions are currently unused, but might be in the future to
support O (dBASE) and B (FoxPro) doubles, so we already fix them for
little-endian systems.

Changed paths:
    U   pecl/dbase/trunk/dbf_misc.c

Modified: pecl/dbase/trunk/dbf_misc.c
===================================================================
--- pecl/dbase/trunk/dbf_misc.c	2016-10-30 13:11:17 UTC (rev 340800)
+++ pecl/dbase/trunk/dbf_misc.c	2016-10-30 14:47:05 UTC (rev 340801)
@@ -12,6 +12,16 @@

 #include "php_reentrancy.h"

+#if (defined(__APPLE__) || defined(__APPLE_CC__)) && (defined(__BIG_ENDIAN__) || \
defined(__LITTLE_ENDIAN__)) +# if defined(__LITTLE_ENDIAN__)
+#  undef WORDS_BIGENDIAN
+# else
+#  if defined(__BIG_ENDIAN__)
+#   define WORDS_BIGENDIAN
+#  endif
+# endif
+#endif
+
 /*
  * routine to change little endian long to host long
  */
@@ -60,15 +70,15 @@
 {
 	double ret;
 	unsigned char *dp = (unsigned char *)&ret;
+	int i;

-	dp[7] = *cp++;
-	dp[6] = *cp++;
-	dp[5] = *cp++;
-	dp[4] = *cp++;
-	dp[3] = *cp++;
-	dp[2] = *cp++;
-	dp[1] = *cp++;
-	dp[0] = *cp++;
+#ifdef WORDS_BIGENDIAN
+	for (i = 7; i >= 0; i--) {
+#else
+	for (i = 0; i <= 7; i++) {
+#endif
+		dp[i] = *cp++;
+	}

 	return ret;
 }
@@ -76,15 +86,15 @@
 void put_double(char *cp, double fval)
 {
 	unsigned char *dp = (unsigned char *)&fval;
+	int i;

-	cp[7] = *dp++;
-	cp[6] = *dp++;
-	cp[5] = *dp++;
-	cp[4] = *dp++;
-	cp[3] = *dp++;
-	cp[2] = *dp++;
-	cp[1] = *dp++;
-	cp[0] = *dp++;
+#ifdef WORDS_BIGENDIAN
+	for (i = 7; i >= 0; i--) {
+#else
+	for (i = 0; i <= 7; i++) {
+#endif
+		cp[i] = *dp++;
+	}
 }

 void copy_fill(char *dp, char *sp, int len)



-- 
PECL CVS Mailing List 
To unsubscribe, visit: http://www.php.net/unsub.php

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic