mirror of
https://github.com/MariaDB/server.git
synced 2026-05-16 20:07:13 +02:00
ndb - rel5.1.16 NdbRecAttr print of blob length assumed uint64 aligned buffer
ndb - 5.1.16 uint64 align for ndb_restore (backport) ndb/src/ndbapi/NdbRecAttr.cpp: ndb - rel5.1.16 NdbRecAttr print of blob length assumed uint64 aligned buffer (backport) ndb/tools/restore/Restore.cpp: ndb - 5.1.16 uint64 align for ndb_restore (backport)
This commit is contained in:
parent
5a25c67a59
commit
f9bfa7806e
2 changed files with 25 additions and 20 deletions
|
|
@ -346,27 +346,27 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
|
|||
}
|
||||
break;
|
||||
case NdbDictionary::Column::Blob:
|
||||
{
|
||||
const NdbBlob::Head* h = (const NdbBlob::Head*)r.aRef();
|
||||
out << h->length << ":";
|
||||
const unsigned char* p = (const unsigned char*)(h + 1);
|
||||
unsigned n = r.arraySize() - sizeof(*h);
|
||||
for (unsigned k = 0; k < n && k < h->length; k++)
|
||||
out.print("%02X", (int)p[k]);
|
||||
j = length;
|
||||
}
|
||||
break;
|
||||
case NdbDictionary::Column::Text:
|
||||
{
|
||||
const NdbBlob::Head* h = (const NdbBlob::Head*)r.aRef();
|
||||
out << h->length << ":";
|
||||
const unsigned char* p = (const unsigned char*)(h + 1);
|
||||
unsigned n = r.arraySize() - sizeof(*h);
|
||||
for (unsigned k = 0; k < n && k < h->length; k++)
|
||||
out.print("%c", (int)p[k]);
|
||||
j = length;
|
||||
{
|
||||
// user defined aRef() may not be aligned to Uint64
|
||||
NdbBlob::Head head;
|
||||
memcpy(&head, r.aRef(), sizeof(head));
|
||||
out << head.length << ":";
|
||||
const unsigned char* p = (const unsigned char*)r.aRef() + sizeof(head);
|
||||
if (r.arraySize() < sizeof(head))
|
||||
out << "***error***"; // really cannot happen
|
||||
else {
|
||||
unsigned n = r.arraySize() - sizeof(head);
|
||||
for (unsigned k = 0; k < n && k < head.length; k++) {
|
||||
if (r.getType() == NdbDictionary::Column::Blob)
|
||||
out.print("%02X", (int)p[k]);
|
||||
else
|
||||
out.print("%c", (int)p[k]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
j = length;
|
||||
}
|
||||
break;
|
||||
case NdbDictionary::Column::Longvarchar:
|
||||
{
|
||||
unsigned len = uint2korr(r.aRef());
|
||||
|
|
|
|||
|
|
@ -54,7 +54,12 @@ BackupFile::Twiddle(const AttributeDesc* attr_desc, AttributeData* attr_data, Ui
|
|||
return true;
|
||||
case 64:
|
||||
for(i = 0; i<arraySize; i++){
|
||||
attr_data->u_int64_value[i] = Twiddle64(attr_data->u_int64_value[i]);
|
||||
// allow unaligned
|
||||
char* p = (char*)&attr_data->u_int64_value[i];
|
||||
Uint64 x;
|
||||
memcpy(&x, p, sizeof(Uint64));
|
||||
x = Twiddle64(x);
|
||||
memcpy(p, &x, sizeof(Uint64));
|
||||
}
|
||||
return true;
|
||||
default:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue