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
plugins/sqldrivers/libqsqlite2.so
plugins/sqldrivers/libqsqlmysql.so
plugins/sqldrivers/libqsqlpsql.so
%%
lib/libQtCore.la
lib/libQt3Support.la
lib/libQtCLucene.la
......
......@@ -9,7 +9,7 @@ int main(int argc, char *argv[])
args.removeFirst();
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;
}
......@@ -17,10 +17,6 @@ int main(int argc, char *argv[])
const QByteArray qtDirPath = QFile::encodeName(args.takeFirst());
const QByteArray newQtPath = QFile::encodeName(args.takeFirst());
QString suffix;
if (! args.isEmpty())
suffix = args.takeFirst();
if (qtDirPath.size() < newQtPath.size()) {
std::cerr << "qpatch: error: newQtDir needs to be less than " << qtDirPath.size() << " characters."
<< std::endl;
......@@ -33,44 +29,54 @@ int main(int argc, char *argv[])
return EXIT_FAILURE;
}
QStringList filesToPatch;
QStringList filesToPatch, textFilesToPatch;
bool readingTextFilesToPatch = false;
// read the input file
QTextStream in(&fn);
forever {
QString line;
line = in.readLine();
const QString line = in.readLine();
if (line.isNull())
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) {
QString prefix = newQtPath;
QString prefix;
prefix += newQtPath;
if (! prefix.endsWith(QLatin1Char('/')))
prefix += QLatin1Char('/');
fileName.prepend(prefix);
qDebug() << "patch file:" << fileName;
continue;
QFile file(fileName);
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;
}
const QFile::Permissions permissions = file.permissions();
const QByteArray source = file.readAll();
file.close();
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 {
int start = source.indexOf(qtDirPath, index);
......@@ -78,26 +84,26 @@ int main(int argc, char *argv[])
break;
int endOfString = start;
while (source.at(endOfString))
++endOfString;
for (; endOfString < source.size(); ++endOfString) {
if (! source.at(endOfString))
break;
}
++endOfString; // include the '\0'
//qDebug() << "*** found string:" << source.mid(start, endOfString - start);
for (int i = index; i < start; ++i)
patched.append(source.at(i));
if (index != start)
file.write(source.constData() + index, start - index);
int length = endOfString - start;
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);
const int qtDirPathLength = qtDirPath.size();
for (const char *x = source.constData() + start + qtDirPathLength - 1;
x != source.constData() + endOfString; ++x)
for (const char *x = source.constData() + start + qtDirPathLength;
x != source.constData() + endOfString; ++x)
s.append(*x);
const int oldSize = s.size();
......@@ -105,20 +111,44 @@ int main(int argc, char *argv[])
for (int i = oldSize; i < length; ++i)
s.append('\0');
for (int i = 0; i < s.size(); ++i)
patched.append(s.at(i));
#if 0
std::cout << "replace string: " << source.mid(start, endOfString - start).constData()
<< " with: " << s.constData() << std::endl;
#endif
file.write(s.constData(), s.size());
index = endOfString;
}
for (int i = index; i < source.size(); ++i)
patched.append(source.at(i));
if (index != source.size())
file.write(source.constData() + index, source.size() - index);
}
QFile out(fileName /* + suffix*/);
out.setPermissions(permissions);
if (out.open(QFile::WriteOnly)) {
out.write(patched.constData(), patched.size());
foreach (QString fileName, textFilesToPatch) {
QString prefix = newQtPath;
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;
......
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