(WRITE_SIGNED_TYPE): Avoid alignment errors by using memcpy() instead

of trying to assign to (_TYPE*)(BUFFER+1).
(WRITE_UNSIGNED_TYPE): Likewise.


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@1595 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Andrew McCallum 1996-05-31 14:22:25 +00:00
parent 606e7dbd04
commit feccda75ec

View file

@ -106,20 +106,23 @@ static int debug_binary_coder = 0;
[stream writeByte: *type]; [stream writeByte: *type];
#define WRITE_SIGNED_TYPE(_PTR, _TYPE, _CONV_FUNC) \ #define WRITE_SIGNED_TYPE(_PTR, _TYPE, _CONV_FUNC) \
{ \ { \
char buffer[1+sizeof(_TYPE)]; \ _TYPE tmp; \
buffer[0] = sizeof (_TYPE); \ char buffer[1+sizeof(_TYPE)]; \
if (*(_TYPE*)_PTR < 0) \ buffer[0] = sizeof (_TYPE); \
{ \ if (*(_TYPE*)_PTR < 0) \
buffer[0] |= 0x80; \ { \
*(_TYPE*)(buffer+1) = _CONV_FUNC (- *(_TYPE*)_PTR); \ buffer[0] |= 0x80; \
} \ tmp = _CONV_FUNC (- *(_TYPE*)_PTR); \
else \ memcpy (buffer+1, &tmp, sizeof(_TYPE)); \
{ \ } \
*(_TYPE*)(buffer+1) = _CONV_FUNC (*(_TYPE*)_PTR); \ else \
} \ { \
[stream writeBytes: buffer length: 1+sizeof(_TYPE)]; \ tmp = _CONV_FUNC (*(_TYPE*)_PTR); \
memcpy (buffer+1, &tmp, sizeof(_TYPE)); \
} \
[stream writeBytes: buffer length: 1+sizeof(_TYPE)]; \
} }
#define READ_SIGNED_TYPE(_PTR, _TYPE, _CONV_FUNC) \ #define READ_SIGNED_TYPE(_PTR, _TYPE, _CONV_FUNC) \
@ -145,9 +148,11 @@ static int debug_binary_coder = 0;
#define WRITE_UNSIGNED_TYPE(_PTR, _TYPE, _CONV_FUNC) \ #define WRITE_UNSIGNED_TYPE(_PTR, _TYPE, _CONV_FUNC) \
{ \ { \
_TYPE tmp; \
char buffer[1+sizeof(_TYPE)]; \ char buffer[1+sizeof(_TYPE)]; \
buffer[0] = sizeof (_TYPE); \ buffer[0] = sizeof (_TYPE); \
*(_TYPE*)(buffer+1) = _CONV_FUNC (*(_TYPE*)_PTR); \ tmp = _CONV_FUNC (*(_TYPE*)_PTR); \
memcpy (buffer+1, &tmp, sizeof(_TYPE)); \
[stream writeBytes: buffer length: (1+sizeof(_TYPE))]; \ [stream writeBytes: buffer length: (1+sizeof(_TYPE))]; \
} }