Hi,

On Sep 2, 2012, at 9:10 PM, ext Konstantin Tokarev <annu...@yandex.ru> wrote:

> Hi all,
> 
> When building Qt 5 on big endian host (PPC) I've found moc breaking on Qt 
> classes containing Q_PLUGIN_METADATA with
> 
> ASSERT: "idx >= 0 && idx < s" in file 
> ../../../include/QtCore/../../src/corelib/tools/qvarlengtharray.h, line 111
> 
> It turned out to be a fault of QJsonPrivate::Parser::parseObject which has 
> different code for handling of big endian and little endian cases:
> 
>    if (parsedObject.offsets.size()) {
>        int tableSize = parsedObject.offsets.size()*sizeof(uint);
>        table = reserveSpace(tableSize);
> #if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
>        memcpy(data + table, parsedObject.offsets.constData(), tableSize);
> #else
>        offset *o = (offset *)(data + table);
>        for (int i = 0; i < tableSize; ++i)
>            o[i] = parsedObject.offsets[i];
> 
> #endif
>    }
> 
> Could anyone explain why memcpy cannot be used for big endian case here?

The big endian code has not been tested at all so far, because I simply didn't 
have a big endian machine available. So there could be bugs (or stupid things) 
in the code paths for big endian. I'd appreciate any patches to fix it. For 
testing, the auto test in tests/auto/corelib/json is pretty complete, so once 
that passes you should be in good shape.

Cheers,
Lars

_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to