mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-24 10:43:03 +01:00
Fixed alignment issue in remote on sparc
This commit is contained in:
parent
4f633a6e6c
commit
316c8fb2e5
@ -1113,7 +1113,7 @@ static bool_t xdr_datum( XDR* xdrs, DSC* desc, BLOB_PTR* buffer)
|
|||||||
|
|
||||||
case dtype_int64:
|
case dtype_int64:
|
||||||
fb_assert(desc->dsc_length >= sizeof(SINT64));
|
fb_assert(desc->dsc_length >= sizeof(SINT64));
|
||||||
if (!xdr_hyper(xdrs, (SINT64 *) p))
|
if (!xdr_hyper(xdrs, p))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -119,7 +119,7 @@ static const XDR::xdr_ops mem_ops =
|
|||||||
static SCHAR zeros[4] = { 0, 0, 0, 0 };
|
static SCHAR zeros[4] = { 0, 0, 0, 0 };
|
||||||
|
|
||||||
|
|
||||||
bool_t xdr_hyper( XDR * xdrs, SINT64 * pi64)
|
bool_t xdr_hyper( XDR * xdrs, void * pi64)
|
||||||
{
|
{
|
||||||
/**************************************
|
/**************************************
|
||||||
*
|
*
|
||||||
@ -141,23 +141,20 @@ bool_t xdr_hyper( XDR * xdrs, SINT64 * pi64)
|
|||||||
* Handles "swapping" of the 2 long's to be "Endian" sensitive.
|
* Handles "swapping" of the 2 long's to be "Endian" sensitive.
|
||||||
*
|
*
|
||||||
**************************************/
|
**************************************/
|
||||||
union {
|
|
||||||
SINT64 temp_int64;
|
|
||||||
SLONG temp_long[2];
|
SLONG temp_long[2];
|
||||||
} temp;
|
|
||||||
|
|
||||||
switch (xdrs->x_op) {
|
switch (xdrs->x_op) {
|
||||||
case XDR_ENCODE:
|
case XDR_ENCODE:
|
||||||
temp.temp_int64 = *pi64;
|
memcpy(temp_long, pi64, sizeof temp_long);
|
||||||
#ifndef WORDS_BIGENDIAN
|
#ifndef WORDS_BIGENDIAN
|
||||||
if ((*xdrs->x_ops->x_putlong) (xdrs, &temp.temp_long[1]) &&
|
if ((*xdrs->x_ops->x_putlong) (xdrs, &temp_long[1]) &&
|
||||||
(*xdrs->x_ops->x_putlong) (xdrs, &temp.temp_long[0]))
|
(*xdrs->x_ops->x_putlong) (xdrs, &temp_long[0]))
|
||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if ((*xdrs->x_ops->x_putlong) (xdrs, &temp.temp_long[0]) &&
|
if ((*xdrs->x_ops->x_putlong) (xdrs, &temp_long[0]) &&
|
||||||
(*xdrs->x_ops->x_putlong) (xdrs, &temp.temp_long[1]))
|
(*xdrs->x_ops->x_putlong) (xdrs, &temp_long[1]))
|
||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -166,19 +163,19 @@ bool_t xdr_hyper( XDR * xdrs, SINT64 * pi64)
|
|||||||
|
|
||||||
case XDR_DECODE:
|
case XDR_DECODE:
|
||||||
#ifndef WORDS_BIGENDIAN
|
#ifndef WORDS_BIGENDIAN
|
||||||
if (!(*xdrs->x_ops->x_getlong) (xdrs, &temp.temp_long[1]) ||
|
if (!(*xdrs->x_ops->x_getlong) (xdrs, &temp_long[1]) ||
|
||||||
!(*xdrs->x_ops->x_getlong) (xdrs, &temp.temp_long[0]))
|
!(*xdrs->x_ops->x_getlong) (xdrs, &temp_long[0]))
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (!(*xdrs->x_ops->x_getlong) (xdrs, &temp.temp_long[0]) ||
|
if (!(*xdrs->x_ops->x_getlong) (xdrs, &temp_long[0]) ||
|
||||||
!(*xdrs->x_ops->x_getlong) (xdrs, &temp.temp_long[1]))
|
!(*xdrs->x_ops->x_getlong) (xdrs, &temp_long[1]))
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
*pi64 = temp.temp_int64;
|
memcpy(pi64, temp_long, sizeof temp_long);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
case XDR_FREE:
|
case XDR_FREE:
|
||||||
|
@ -47,7 +47,7 @@ bool_t xdr_u_long (XDR *, ULONG *);
|
|||||||
bool_t xdr_u_short (XDR *, u_short *);
|
bool_t xdr_u_short (XDR *, u_short *);
|
||||||
int xdr_union (XDR *, enum xdr_op *, SCHAR *, struct xdr_discrim *, xdrproc_t);
|
int xdr_union (XDR *, enum xdr_op *, SCHAR *, struct xdr_discrim *, xdrproc_t);
|
||||||
bool_t xdr_wrapstring (XDR *, SCHAR **);
|
bool_t xdr_wrapstring (XDR *, SCHAR **);
|
||||||
bool_t xdr_hyper(XDR *, SINT64 *);
|
bool_t xdr_hyper(XDR *, void *);
|
||||||
|
|
||||||
#endif /* REMOTE_XDR_PROTO_H */
|
#endif /* REMOTE_XDR_PROTO_H */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user