Commit 9b7bdd45 authored by hjk's avatar hjk Committed by Jani Heikkinen
Browse files

rcc: Replace all occurrences of the marker in two-pass mode


The marker can occur legitimately twice e.g. on iOS
with universal binaries.

Change-Id: Ie334bcd104d45140ff969f44230e6de2212e8e25
Reviewed-by: default avatarTor Arne Vestbø <tor.arne.vestbo@digia.com>
Reviewed-by: default avatarFawzi Mohamed <fawzi.mohamed@theqtcompany.com>
Showing with 27 additions and 23 deletions
......@@ -730,33 +730,37 @@ bool RCCResourceLibrary::output(QIODevice &outDevice, QIODevice &tempDevice, QIO
{
m_errorDevice = &errorDevice;
const char pattern[] = { 'Q', 'R', 'C', '_', 'D', 'A', 'T', 'A' };
if (m_format == Pass2) {
char c;
for (int i = 0; i < 8; ) {
if (!tempDevice.getChar(&c)) {
m_errorDevice->write("No data signature found\n");
return false;
}
if (c == pattern[i]) {
++i;
} else {
for (int k = 0; k < i; ++k)
outDevice.putChar(pattern[k]);
outDevice.putChar(c);
i = 0;
const char pattern[] = { 'Q', 'R', 'C', '_', 'D', 'A', 'T', 'A' };
bool foundSignature = false;
while (true) {
char c;
for (int i = 0; i < 8; ) {
if (!tempDevice.getChar(&c)) {
if (foundSignature)
return true;
m_errorDevice->write("No data signature found\n");
return false;
}
if (c == pattern[i]) {
++i;
} else {
for (int k = 0; k < i; ++k)
outDevice.putChar(pattern[k]);
outDevice.putChar(c);
i = 0;
}
}
}
m_outDevice = &outDevice;
quint64 start = outDevice.pos();
writeDataBlobs();
quint64 len = outDevice.pos() - start;
m_outDevice = &outDevice;
quint64 start = outDevice.pos();
writeDataBlobs();
quint64 len = outDevice.pos() - start;
tempDevice.seek(tempDevice.pos() + len - 8);
outDevice.write(tempDevice.readAll());
return true;
tempDevice.seek(tempDevice.pos() + len - 8);
foundSignature = true;
}
}
//write out
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment