summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorhjk <hjk121@nokiamail.com>2014-11-07 14:42:06 +0100
committerJani Heikkinen <jani.heikkinen@theqtcompany.com>2014-11-11 12:32:48 +0100
commit9b7bdd455fefc2df78eb540e9f570877aa8cd827 (patch)
tree08b58195fc53a6de7d3ef3cf07398d4fe33412b9 /src
parentade8e0fc9b216190328b6fd3375796e82e34c323 (diff)
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: Tor Arne Vestbø <tor.arne.vestbo@digia.com> Reviewed-by: Fawzi Mohamed <fawzi.mohamed@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r--src/tools/rcc/rcc.cpp50
1 files changed, 27 insertions, 23 deletions
diff --git a/src/tools/rcc/rcc.cpp b/src/tools/rcc/rcc.cpp
index 9d8a7b7051..d7f8e47213 100644
--- a/src/tools/rcc/rcc.cpp
+++ b/src/tools/rcc/rcc.cpp
@@ -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