mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 21:42:35 +01:00
ndb -
gcc-4.1.1 work-around for bug in strict-aliasing storage/ndb/src/kernel/blocks/restore.cpp: gcc-4.1.1 work-around for bug in strict-aliasing
This commit is contained in:
parent
72df0b3e30
commit
3ba0b6e0f0
1 changed files with 19 additions and 21 deletions
|
@ -57,6 +57,8 @@ Restore::Restore(Block_context& ctx) :
|
|||
|
||||
addRecSignal(GSN_LQHKEYREF, &Restore::execLQHKEYREF);
|
||||
addRecSignal(GSN_LQHKEYCONF, &Restore::execLQHKEYCONF);
|
||||
|
||||
ndbrequire(sizeof(Column) == 8);
|
||||
}
|
||||
|
||||
Restore::~Restore()
|
||||
|
@ -794,10 +796,10 @@ Restore::parse_table_description(Signal* signal, FilePtr file_ptr,
|
|||
return;
|
||||
}
|
||||
|
||||
DataBuffer<15> variable(m_databuffer_pool);
|
||||
|
||||
Uint32 null_offset = 0;
|
||||
union { Column c; Uint32 _align[2];};
|
||||
Column c;
|
||||
Uint32 colstore[sizeof(Column)/sizeof(Uint32)];
|
||||
|
||||
for(Uint32 i = 0; i<tmpTab.NoOfAttributes; i++) {
|
||||
jam();
|
||||
DictTabInfo::Attribute tmp; tmp.init();
|
||||
|
@ -814,10 +816,6 @@ Restore::parse_table_description(Signal* signal, FilePtr file_ptr,
|
|||
const Uint32 sz32 = (sz * arr + 31) >> 5;
|
||||
const bool varsize = tmp.AttributeArrayType != NDB_ARRAYTYPE_FIXED;
|
||||
|
||||
union {
|
||||
Column c;
|
||||
Uint32 _align[2];
|
||||
};
|
||||
c.m_id = tmp.AttributeId;
|
||||
c.m_size = sz32;
|
||||
c.m_flags = (tmp.AttributeKeyFlag ? Column::COL_KEY : 0);
|
||||
|
@ -836,23 +834,20 @@ Restore::parse_table_description(Signal* signal, FilePtr file_ptr,
|
|||
|
||||
if(!tmp.AttributeNullableFlag && !varsize)
|
||||
{
|
||||
if(!columns.append(_align, sizeof(Column)/sizeof(Uint32)))
|
||||
{
|
||||
parse_error(signal, file_ptr, __LINE__, i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (true) // null mask dropped in 5.1
|
||||
{
|
||||
c.m_flags |= (varsize ? Column::COL_VAR : 0);
|
||||
c.m_flags |= (tmp.AttributeNullableFlag ? Column::COL_NULL : 0);
|
||||
if(!columns.append(_align, sizeof(Column)/sizeof(Uint32)))
|
||||
}
|
||||
|
||||
memcpy(colstore, &c, sizeof(Column));
|
||||
if(!columns.append(colstore, sizeof(Column)/sizeof(Uint32)))
|
||||
{
|
||||
parse_error(signal, file_ptr, __LINE__, i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(lcp)
|
||||
{
|
||||
|
@ -861,7 +856,8 @@ Restore::parse_table_description(Signal* signal, FilePtr file_ptr,
|
|||
c.m_id = AttributeHeader::DISK_REF;
|
||||
c.m_size = 2;
|
||||
c.m_flags = 0;
|
||||
if(!columns.append(_align, sizeof(Column)/sizeof(Uint32)))
|
||||
memcpy(colstore, &c, sizeof(Column));
|
||||
if(!columns.append(colstore, sizeof(Column)/sizeof(Uint32)))
|
||||
{
|
||||
parse_error(signal, file_ptr, __LINE__, 0);
|
||||
return;
|
||||
|
@ -872,7 +868,8 @@ Restore::parse_table_description(Signal* signal, FilePtr file_ptr,
|
|||
c.m_id = AttributeHeader::ROWID;
|
||||
c.m_size = 2;
|
||||
c.m_flags = 0;
|
||||
if(!columns.append(_align, sizeof(Column)/sizeof(Uint32)))
|
||||
memcpy(colstore, &c, sizeof(Column));
|
||||
if(!columns.append(colstore, sizeof(Column)/sizeof(Uint32)))
|
||||
{
|
||||
parse_error(signal, file_ptr, __LINE__, 0);
|
||||
return;
|
||||
|
@ -884,7 +881,8 @@ Restore::parse_table_description(Signal* signal, FilePtr file_ptr,
|
|||
c.m_id = AttributeHeader::ROW_GCI;
|
||||
c.m_size = 2;
|
||||
c.m_flags = 0;
|
||||
if(!columns.append(_align, sizeof(Column)/sizeof(Uint32)))
|
||||
memcpy(colstore, &c, sizeof(Column));
|
||||
if(!columns.append(colstore, sizeof(Column)/sizeof(Uint32)))
|
||||
{
|
||||
parse_error(signal, file_ptr, __LINE__, 0);
|
||||
return;
|
||||
|
@ -942,7 +940,7 @@ Restore::parse_record(Signal* signal, FilePtr file_ptr,
|
|||
Uint32 *attrData = attr_start;
|
||||
union {
|
||||
Column c;
|
||||
Uint32 _align[2];
|
||||
Uint32 _align[sizeof(Column)/sizeof(Uint32)];
|
||||
};
|
||||
bool disk = false;
|
||||
bool rowid = false;
|
||||
|
|
Loading…
Reference in a new issue