Skip to content

Commit

Permalink
Fix swapping key numeric values on Big Endian machines.
Browse files Browse the repository at this point in the history
  modified:   storage/connect/connect.cc
  • Loading branch information
Buggynours committed Jun 3, 2015
1 parent af26c36 commit 70d8030
Showing 1 changed file with 31 additions and 1 deletion.
32 changes: 31 additions & 1 deletion storage/connect/connect.cc
Original file line number Diff line number Diff line change
Expand Up @@ -709,6 +709,28 @@ int CntIndexInit(PGLOBAL g, PTDB ptdb, int id, bool sorted)
return (tdbp->To_Kindex->IsMul()) ? 2 : 1;
} // end of CntIndexInit

#if defined(BIG_ENDIAN_ORDER)
/***********************************************************************/
/* Swap bytes of the key that are written in little endian order. */
/***********************************************************************/
static void SetSwapValue(PVAL valp, char *kp)
{
if (valp->IsTypeNum() && valp->GetType() != TYPE_DECIM) {
uchar buf[8];
int i, k= valp->GetClen();

for (i = 0; k > 0;)
buf[i++]= kp[--k];



valp->SetBinValue((void*)buf);
} else
valp->SetBinValue((void*)kp);

} // end of SetSwapValue
#endif //LITTLE ENDIAN

/***********************************************************************/
/* IndexRead: fetch a record having the index value. */
/***********************************************************************/
Expand Down Expand Up @@ -797,7 +819,11 @@ RCODE CntIndexRead(PGLOBAL g, PTDB ptdb, OPVAL op,
} // endif b

} else
#if defined(BIG_ENDIAN_ORDER)
SetSwapValue(valp, kp);
#else // LITTLE ENDIAN
valp->SetBinValue((void*)kp);
#endif //LITTLE ENDIAN

kp+= valp->GetClen();

Expand Down Expand Up @@ -912,7 +938,11 @@ int CntIndexRange(PGLOBAL g, PTDB ptdb, const uchar* *key, uint *len,
} // endif b

} else
valp->SetBinValue((void*)p);
#if defined(BIG_ENDIAN_ORDER)
SetSwapValue(valp, (char*)kp);
#else // LITTLE ENDIAN
valp->SetBinValue((void*)kp);
#endif //LITTLE ENDIAN

if (trace) {
char bf[32];
Expand Down

0 comments on commit 70d8030

Please sign in to comment.