--- a/session.cpp +++ b/session.cpp @@ -131,7 +131,7 @@ throw CursorException("Cursor is not opened"); } fillBuffer(sizeof(oid_t)); - oid_t currOid = *(oid_t*)&sockBuf[bufPos]; + oid_t currOid = *(oid_t*)(sockBuf + bufPos); bufPos += sizeof(oid_t); if (currObj != NULL) { delete[] currObj; @@ -139,7 +139,7 @@ } if (currOid != 0) { fillBuffer(sizeof(int)); - size_t size = *(int*)&sockBuf[bufPos]; + size_t size = *(int*)(sockBuf + bufPos); if (size <= SOCKET_BUFFER_SIZE) { fillBuffer(size); if (record != NULL) { --- a/database.cpp +++ b/database.cpp @@ -739,40 +739,55 @@ return; case dbvmInvokeMethodBool: - execute(expr->ref.base, iattr, sattr); - expr->ref.field->method->invoke(sattr.base, &sattr.bvalue); - sattr.bvalue = *(bool*)&sattr.bvalue; - iattr.free(sattr); - return; + { + bool val; + execute(expr->ref.base, iattr, sattr); + expr->ref.field->method->invoke(sattr.base, &val); + sattr.bvalue = val; + iattr.free(sattr); + return; + } case dbvmInvokeMethodInt1: - execute(expr->ref.base, iattr, sattr); - expr->ref.field->method->invoke(sattr.base, &sattr.ivalue); - sattr.ivalue = *(int1*)&sattr.ivalue; - iattr.free(sattr); - return; + { + int1 val; + execute(expr->ref.base, iattr, sattr); + expr->ref.field->method->invoke(sattr.base, &val); + sattr.ivalue = val; + iattr.free(sattr); + return; + } case dbvmInvokeMethodInt2: - execute(expr->ref.base, iattr, sattr); - expr->ref.field->method->invoke(sattr.base, &sattr.ivalue); - sattr.ivalue = *(int2*)&sattr.ivalue; - iattr.free(sattr); - return; + { + int2 val; + execute(expr->ref.base, iattr, sattr); + expr->ref.field->method->invoke(sattr.base, &val); + sattr.ivalue = val; + iattr.free(sattr); + return; + } case dbvmInvokeMethodInt4: - execute(expr->ref.base, iattr, sattr); - expr->ref.field->method->invoke(sattr.base, &sattr.ivalue); - sattr.ivalue = *(int4*)&sattr.ivalue; - iattr.free(sattr); - return; + { + int4 val; + execute(expr->ref.base, iattr, sattr); + expr->ref.field->method->invoke(sattr.base, &val); + sattr.ivalue = val; + iattr.free(sattr); + return; + } case dbvmInvokeMethodInt8: execute(expr->ref.base, iattr, sattr); expr->ref.field->method->invoke(sattr.base, &sattr.ivalue); iattr.free(sattr); return; case dbvmInvokeMethodReal4: - execute(expr->ref.base, iattr, sattr); - expr->ref.field->method->invoke(sattr.base, &sattr.fvalue); - sattr.fvalue = *(real4*)&sattr.fvalue; - iattr.free(sattr); - return; + { + real4 val; + execute(expr->ref.base, iattr, sattr); + expr->ref.field->method->invoke(sattr.base, &val); + sattr.fvalue = val; + iattr.free(sattr); + return; + } case dbvmInvokeMethodReal8: execute(expr->ref.base, iattr, sattr); expr->ref.field->method->invoke(sattr.base, &sattr.fvalue); @@ -792,28 +807,43 @@ return; case dbvmInvokeSelfMethodBool: - expr->ref.field->method->invoke(iattr.record, &sattr.bvalue); - sattr.bvalue = *(bool*)&sattr.bvalue; - return; + { + bool val; + expr->ref.field->method->invoke(iattr.record, &val); + sattr.bvalue = val; + return; + } case dbvmInvokeSelfMethodInt1: - expr->ref.field->method->invoke(iattr.record, &sattr.ivalue); - sattr.ivalue = *(int1*)&sattr.ivalue; - return; + { + int1 val; + expr->ref.field->method->invoke(iattr.record, &val); + sattr.ivalue = val; + return; + } case dbvmInvokeSelfMethodInt2: - expr->ref.field->method->invoke(iattr.record, &sattr.ivalue); - sattr.ivalue = *(int2*)&sattr.ivalue; - return; + { + int2 val; + expr->ref.field->method->invoke(iattr.record, &val); + sattr.ivalue = val; + return; + } case dbvmInvokeSelfMethodInt4: - expr->ref.field->method->invoke(iattr.record, &sattr.ivalue); - sattr.ivalue = *(int4*)&sattr.ivalue; - return; + { + int4 val; + expr->ref.field->method->invoke(iattr.record, &val); + sattr.ivalue = val; + return; + } case dbvmInvokeSelfMethodInt8: expr->ref.field->method->invoke(iattr.record, &sattr.ivalue); return; case dbvmInvokeSelfMethodReal4: - expr->ref.field->method->invoke(iattr.record, &sattr.fvalue); - sattr.fvalue = *(real4*)&sattr.fvalue; - return; + { + real4 val; + expr->ref.field->method->invoke(iattr.record, &val); + sattr.fvalue = *(real4*)&sattr.fvalue; + return; + } case dbvmInvokeSelfMethodReal8: expr->ref.field->method->invoke(iattr.record, &sattr.fvalue); return; --- a/server.cpp +++ b/server.cpp @@ -2097,7 +2097,7 @@ bufUsed = 0; } oid_t oid = cursor.getOid(); - *(oid_t*)&buf[bufUsed] = oid; + *(oid_t*)(buf + bufUsed) = oid; bufUsed += sizeof(oid_t); dbRecord* record = db->getRow(tie, oid); size_t size = record->size; @@ -2129,7 +2129,7 @@ bufUsed = 0; } } - *(oid_t*)&buf[bufUsed] = 0; + *(oid_t*)(buf + bufUsed) = 0; return session->sock->write(buf, bufUsed + sizeof(oid_t)); }