Author: rfm
Date: Fri Mar 25 09:37:36 2016
New Revision: 39604
URL: http://svn.gna.org/viewcvs/gnustep?rev=39604&view=rev
Log:
attempt to fix archiving endianness issue
Modified:
libs/base/trunk/ChangeLog
libs/base/trunk/Source/NSNumber.m
Modified: libs/base/trunk/ChangeLog
URL:
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/ChangeLog?rev=39604&r1=39603&r2=39604&view=diff
==============================================================================
--- libs/base/trunk/ChangeLog (original)
+++ libs/base/trunk/ChangeLog Fri Mar 25 09:37:36 2016
@@ -1,3 +1,7 @@
+2016-03-25 Richard Frith-Macdonald <[email protected]>
+
+ * Source/NSNumber.m: Attempt to fix endianness archiving issue.
+
2016-03-23 Richard Frith-Macdonald <[email protected]>
* Source/NSPropertyList.m: Remove unused function. Change binary
Modified: libs/base/trunk/Source/NSNumber.m
URL:
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Source/NSNumber.m?rev=39604&r1=39603&r2=39604&view=diff
==============================================================================
--- libs/base/trunk/Source/NSNumber.m (original)
+++ libs/base/trunk/Source/NSNumber.m Fri Mar 25 09:37:36 2016
@@ -1024,14 +1024,40 @@
- (void) encodeWithCoder: (NSCoder *) coder
{
const char *type = [self objCType];
- char buffer[16] __attribute__ ((aligned (16)));
+ unsigned char charbuf;
+ unsigned short shortbuf;
+ unsigned int intbuf;
+ unsigned long longbuf;
+ unsigned long long llongbuf;
+ float floatbuf;
+ double doublebuf;
+ void *buffer;
[coder encodeValueOfObjCType: @encode (char) at: type];
- /* The most we currently store in an NSNumber is 8 bytes (double or long
- * long), but we may add support for vectors or long doubles in future, so
- * make this 16 bytes now so stuff doesn't break in fun and exciting ways
- * later.
- */
+
+ switch (type[0])
+ {
+ case 'c':
+ case 'C':
+ buffer = &charbuf; break;
+ case 's':
+ case 'S':
+ buffer = &shortbuf; break;
+ case 'i':
+ case 'I':
+ buffer = &intbuf; break;
+ case 'l':
+ case 'L':
+ buffer = &longbuf; break;
+ case 'q':
+ case 'Q':
+ buffer = &llongbuf; break;
+ case 'f':
+ buffer = &floatbuf; break;
+ case 'd':
+ buffer = &doublebuf; break;
+ }
+
[self getValue: buffer];
[coder encodeValueOfObjCType: type at: buffer];
}
@@ -1045,9 +1071,38 @@
- (id) initWithCoder: (NSCoder *) coder
{
char type[2] = { 0 };
- char buffer[16] __attribute__ ((aligned (16)));
+ unsigned char charbuf;
+ unsigned short shortbuf;
+ unsigned int intbuf;
+ unsigned long longbuf;
+ unsigned long long llongbuf;
+ float floatbuf;
+ double doublebuf;
+ void *buffer;
[coder decodeValueOfObjCType: @encode (char) at: type];
+ switch (type[0])
+ {
+ case 'c':
+ case 'C':
+ buffer = &charbuf; break;
+ case 's':
+ case 'S':
+ buffer = &shortbuf; break;
+ case 'i':
+ case 'I':
+ buffer = &intbuf; break;
+ case 'l':
+ case 'L':
+ buffer = &longbuf; break;
+ case 'q':
+ case 'Q':
+ buffer = &llongbuf; break;
+ case 'f':
+ buffer = &floatbuf; break;
+ case 'd':
+ buffer = &doublebuf; break;
+ }
[coder decodeValueOfObjCType: type at: buffer];
return [self initWithBytes: buffer objCType: type];
}
_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs