From: Steve K. <ste...@us...> - 2005-05-05 19:43:13
|
Update of /cvsroot/firebird/vulcan/src/jrd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26196/src/jrd Modified Files: btn.cpp Log Message: Use memcpy() to avoid alignment errors on risc machines Index: btn.cpp =================================================================== RCS file: /cvsroot/firebird/vulcan/src/jrd/btn.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -b -U3 -r1.3 -r1.4 --- btn.cpp 4 May 2005 01:06:33 -0000 1.3 +++ btn.cpp 5 May 2005 19:43:04 -0000 1.4 @@ -529,10 +529,14 @@ * the read. * **************************************/ - jumpInfo->firstNodeOffset = *reinterpret_cast<const USHORT*>(pagePointer); + //jumpInfo->firstNodeOffset = *reinterpret_cast<const USHORT*>(pagePointer); + memcpy(&jumpInfo->firstNodeOffset, pagePointer, sizeof(USHORT)); pagePointer += sizeof(USHORT); - jumpInfo->jumpAreaSize = *reinterpret_cast<const USHORT*>(pagePointer); + + //jumpInfo->jumpAreaSize = *reinterpret_cast<const USHORT*>(pagePointer); + memcpy(&jumpInfo->jumpAreaSize, pagePointer, sizeof(USHORT)); pagePointer += sizeof(USHORT); + jumpInfo->jumpers = (USHORT)(*pagePointer); ++pagePointer; return pagePointer; @@ -581,7 +585,8 @@ jumpNode->length = (USHORT)(*pagePointer); pagePointer++; } - jumpNode->offset = *reinterpret_cast<const USHORT*>(pagePointer); + //jumpNode->offset = *reinterpret_cast<const USHORT*>(pagePointer); + memcpy(&jumpNode->offset, pagePointer, sizeof(USHORT)); pagePointer += sizeof(USHORT); jumpNode->data = pagePointer; pagePointer += jumpNode->length; @@ -815,10 +820,14 @@ * **************************************/ UCHAR* pointer = reinterpret_cast<UCHAR*>(page->btr_nodes); - *reinterpret_cast<USHORT*>(pointer) = jumpInfo->firstNodeOffset; + //*reinterpret_cast<USHORT*>(pointer) = jumpInfo->firstNodeOffset; + memcpy(pointer, &jumpInfo->firstNodeOffset, sizeof(USHORT)); pointer += sizeof(USHORT); - *reinterpret_cast<USHORT*>(pointer) = jumpInfo->jumpAreaSize; + + //*reinterpret_cast<USHORT*>(pointer) = jumpInfo->jumpAreaSize; + memcpy(pointer, &jumpInfo->jumpAreaSize, sizeof(USHORT)); pointer += sizeof(USHORT); + *pointer = (UCHAR) jumpInfo->jumpers; pointer++; return pointer; @@ -877,7 +886,8 @@ *pagePointer = (UCHAR) jumpNode->length; pagePointer++; } - *reinterpret_cast<USHORT*>(pagePointer) = jumpNode->offset; + //*reinterpret_cast<USHORT*>(pagePointer) = jumpNode->offset; + memcpy(pagePointer, &jumpNode->offset, sizeof(USHORT)); pagePointer += sizeof(USHORT); memmove(pagePointer, jumpNode->data, jumpNode->length); pagePointer += jumpNode->length; |