Skip to content
Snippets Groups Projects
Commit b93562ae authored by Roberto Raggi's avatar Roberto Raggi Committed by Thorbjørn Lindeijer
Browse files

bugfix

(cherry picked from commit bb7c90ad)
parent 9e972b06
No related branches found
No related tags found
No related merge requests found
...@@ -281,6 +281,7 @@ plugins/sqldrivers/libqsqlite.so ...@@ -281,6 +281,7 @@ plugins/sqldrivers/libqsqlite.so
plugins/sqldrivers/libqsqlite2.so plugins/sqldrivers/libqsqlite2.so
plugins/sqldrivers/libqsqlmysql.so plugins/sqldrivers/libqsqlmysql.so
plugins/sqldrivers/libqsqlpsql.so plugins/sqldrivers/libqsqlpsql.so
%%
lib/libQtCore.la lib/libQtCore.la
lib/libQt3Support.la lib/libQt3Support.la
lib/libQtCLucene.la lib/libQtCLucene.la
......
...@@ -9,7 +9,7 @@ int main(int argc, char *argv[]) ...@@ -9,7 +9,7 @@ int main(int argc, char *argv[])
args.removeFirst(); args.removeFirst();
if (args.size() != 3) { if (args.size() != 3) {
std::cerr << "Usage: qpatch file oldQtDir newQtDir" << std::endl; std::cerr << "Usage: qpatch file.list oldQtDir newQtDir" << std::endl;
return EXIT_FAILURE; return EXIT_FAILURE;
} }
...@@ -17,10 +17,6 @@ int main(int argc, char *argv[]) ...@@ -17,10 +17,6 @@ int main(int argc, char *argv[])
const QByteArray qtDirPath = QFile::encodeName(args.takeFirst()); const QByteArray qtDirPath = QFile::encodeName(args.takeFirst());
const QByteArray newQtPath = QFile::encodeName(args.takeFirst()); const QByteArray newQtPath = QFile::encodeName(args.takeFirst());
QString suffix;
if (! args.isEmpty())
suffix = args.takeFirst();
if (qtDirPath.size() < newQtPath.size()) { if (qtDirPath.size() < newQtPath.size()) {
std::cerr << "qpatch: error: newQtDir needs to be less than " << qtDirPath.size() << " characters." std::cerr << "qpatch: error: newQtDir needs to be less than " << qtDirPath.size() << " characters."
<< std::endl; << std::endl;
...@@ -33,44 +29,54 @@ int main(int argc, char *argv[]) ...@@ -33,44 +29,54 @@ int main(int argc, char *argv[])
return EXIT_FAILURE; return EXIT_FAILURE;
} }
QStringList filesToPatch; QStringList filesToPatch, textFilesToPatch;
bool readingTextFilesToPatch = false;
// read the input file
QTextStream in(&fn); QTextStream in(&fn);
forever { forever {
QString line; const QString line = in.readLine();
line = in.readLine();
if (line.isNull()) if (line.isNull())
break; break;
filesToPatch.append(line); else if (line.isEmpty())
} continue;
else if (line.startsWith(QLatin1String("%%")))
readingTextFilesToPatch = true;
else if (readingTextFilesToPatch)
textFilesToPatch.append(line);
else
filesToPatch.append(line);
}
foreach (QString fileName, filesToPatch) { foreach (QString fileName, filesToPatch) {
QString prefix = newQtPath;
QString prefix;
prefix += newQtPath;
if (! prefix.endsWith(QLatin1Char('/'))) if (! prefix.endsWith(QLatin1Char('/')))
prefix += QLatin1Char('/'); prefix += QLatin1Char('/');
fileName.prepend(prefix); fileName.prepend(prefix);
qDebug() << "patch file:" << fileName;
continue;
QFile file(fileName); QFile file(fileName);
if (! file.open(QFile::ReadOnly)) { if (! file.open(QFile::ReadOnly)) {
std::cerr << "qpatch: warning: file not found" << std::endl; std::cerr << "qpatch: warning: file `" << qPrintable(fileName) << "' not found" << std::endl;
continue; continue;
} }
const QFile::Permissions permissions = file.permissions();
const QByteArray source = file.readAll(); const QByteArray source = file.readAll();
file.close(); file.close();
int index = 0; int index = 0;
QVector<char> patched; if (! file.open(QFile::WriteOnly | QFile::Truncate)) {
std::cerr << "qpatch: error: file `" << qPrintable(fileName) << "' not writable" << std::endl;
continue;
}
forever { forever {
int start = source.indexOf(qtDirPath, index); int start = source.indexOf(qtDirPath, index);
...@@ -78,26 +84,26 @@ int main(int argc, char *argv[]) ...@@ -78,26 +84,26 @@ int main(int argc, char *argv[])
break; break;
int endOfString = start; int endOfString = start;
while (source.at(endOfString)) for (; endOfString < source.size(); ++endOfString) {
++endOfString; if (! source.at(endOfString))
break;
}
++endOfString; // include the '\0' ++endOfString; // include the '\0'
//qDebug() << "*** found string:" << source.mid(start, endOfString - start); if (index != start)
file.write(source.constData() + index, start - index);
for (int i = index; i < start; ++i)
patched.append(source.at(i));
int length = endOfString - start; int length = endOfString - start;
QVector<char> s; QVector<char> s;
for (const char *x = newQtPath.constData(); x != newQtPath.constEnd() - 1; ++x) for (const char *x = newQtPath.constData(); x != newQtPath.constEnd(); ++x)
s.append(*x); s.append(*x);
const int qtDirPathLength = qtDirPath.size(); const int qtDirPathLength = qtDirPath.size();
for (const char *x = source.constData() + start + qtDirPathLength - 1; for (const char *x = source.constData() + start + qtDirPathLength;
x != source.constData() + endOfString; ++x) x != source.constData() + endOfString; ++x)
s.append(*x); s.append(*x);
const int oldSize = s.size(); const int oldSize = s.size();
...@@ -105,20 +111,44 @@ int main(int argc, char *argv[]) ...@@ -105,20 +111,44 @@ int main(int argc, char *argv[])
for (int i = oldSize; i < length; ++i) for (int i = oldSize; i < length; ++i)
s.append('\0'); s.append('\0');
for (int i = 0; i < s.size(); ++i) #if 0
patched.append(s.at(i)); std::cout << "replace string: " << source.mid(start, endOfString - start).constData()
<< " with: " << s.constData() << std::endl;
#endif
file.write(s.constData(), s.size());
index = endOfString; index = endOfString;
} }
for (int i = index; i < source.size(); ++i) if (index != source.size())
patched.append(source.at(i)); file.write(source.constData() + index, source.size() - index);
}
QFile out(fileName /* + suffix*/); foreach (QString fileName, textFilesToPatch) {
out.setPermissions(permissions); QString prefix = newQtPath;
if (out.open(QFile::WriteOnly)) {
out.write(patched.constData(), patched.size()); if (! prefix.endsWith(QLatin1Char('/')))
prefix += QLatin1Char('/');
fileName.prepend(prefix);
QFile file(fileName);
if (! file.open(QFile::ReadOnly)) {
std::cerr << "qpatch: warning: file `" << qPrintable(fileName) << "' not found" << std::endl;
continue;
} }
QByteArray source = file.readAll();
file.close();
if (! file.open(QFile::WriteOnly | QFile::Truncate)) {
std::cerr << "qpatch: error: file `" << qPrintable(fileName) << "' not writable" << std::endl;
continue;
}
source.replace(qtDirPath, newQtPath);
file.write(source);
} }
return 0; return 0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment