Loading ndb/src/ndbapi/NdbRecAttr.cpp +19 −19 Original line number Diff line number Diff line Loading @@ -346,24 +346,24 @@ 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++) // 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]); } } j = length; } break; Loading ndb/tools/restore/Restore.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
ndb/src/ndbapi/NdbRecAttr.cpp +19 −19 Original line number Diff line number Diff line Loading @@ -346,24 +346,24 @@ 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++) // 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]); } } j = length; } break; Loading
ndb/tools/restore/Restore.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -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