You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/dev-db/gigabase/files/gigabase-3.83-fix-dereferen...

183 lines
5.8 KiB

--- 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));
}