diff --git a/rbutil/rbutilqt/base/rockboxinfo.cpp b/rbutil/rbutilqt/base/rockboxinfo.cpp index 2f56a291c5..9d8aba65f9 100644 --- a/rbutil/rbutilqt/base/rockboxinfo.cpp +++ b/rbutil/rbutilqt/base/rockboxinfo.cpp @@ -33,38 +33,40 @@ RockboxInfo::RockboxInfo(QString mountpoint, QString fname) return; // read file contents + QRegExp hash("^Version:\\s+(r?)([0-9a-fM]+)"); + QRegExp version("^Version:\\s+(\\S.*)"); + QRegExp release("^Version:\\s+([0-9\\.]+)"); + QRegExp target("^Target:\\s+(\\S.*)"); + QRegExp features("^Features:\\s+(\\S.*)"); + QRegExp targetid("^Target id:\\s+(\\S.*)"); + QRegExp memory("^Memory:\\s+(\\S.*)"); while (!file.atEnd()) { - QString line = file.readLine(); + QString line = file.readLine().trimmed(); - if(line.contains("Version:")) - { - m_version = line.remove("Version:").trimmed(); - if(m_version.startsWith("r")) { - m_revision = m_version; - m_revision.remove("r").replace(QRegExp("-.+$"), ""); - m_release = ""; - } - else { - m_release = m_version; - m_revision = ""; - } + if(version.indexIn(line) >= 0) { + m_version = version.cap(1); } - else if(line.contains("Target: ")) - { - m_target = line.remove("Target: ").trimmed(); + if(release.indexIn(line) >= 0) { + m_release = release.cap(1); } - else if(line.contains("Features:")) - { - m_features = line.remove("Features:").trimmed(); + if(hash.indexIn(line) >= 0) { + // git hashes are usually at least 7 characters. + // svn revisions are expected to be at least 4 digits. + if(hash.cap(2).size() > 3) + m_revision = hash.cap(2); } - else if(line.contains("Target id:")) - { - m_targetid = line.remove("Target id:").trimmed(); + else if(target.indexIn(line) >= 0) { + m_target = target.cap(1); } - else if(line.contains("Memory:")) - { - m_ram = line.remove("Memory:").trimmed().toInt(); + else if(features.indexIn(line) >= 0) { + m_features = features.cap(1); + } + else if(targetid.indexIn(line) >= 0) { + m_targetid = targetid.cap(1); + } + else if(memory.indexIn(line) >= 0) { + m_ram = memory.cap(1).toInt(); } } diff --git a/rbutil/rbutilqt/test/test-rockboxinfo b/rbutil/rbutilqt/test/test-rockboxinfo deleted file mode 100755 index f881e68015..0000000000 Binary files a/rbutil/rbutilqt/test/test-rockboxinfo and /dev/null differ diff --git a/rbutil/rbutilqt/test/test-rockboxinfo.cpp b/rbutil/rbutilqt/test/test-rockboxinfo.cpp index 541d1c18ee..6fb45fd028 100644 --- a/rbutil/rbutilqt/test/test-rockboxinfo.cpp +++ b/rbutil/rbutilqt/test/test-rockboxinfo.cpp @@ -45,10 +45,14 @@ void TestRockboxInfo::testVersion() const struct testvector testdata[] = { - { "Version: r29629-110321", "29629", "r29629-110321", "" }, - { "Version: r29629M-110321", "29629M", "r29629M-110321", "" }, - { "Version: 3.10", "", "3.10", "3.10" }, - { "Version:\t3.10", "", "3.10", "3.10" }, + { "Version: r29629-110321", "29629", "r29629-110321", "" }, + { "Version: r29629M-110321", "29629M", "r29629M-110321", "" }, + { "Version: 3.10", "", "3.10", "3.10" }, + { "Version:\t3.10", "", "3.10", "3.10" }, + { "#Version: r29629-110321", "", "", "" }, + { "Version: e5b1b0f-120218", "e5b1b0f", "e5b1b0f-120218", "" }, + { "Version: e5b1b0fM-120218", "e5b1b0fM", "e5b1b0fM-120218", "" }, + { "#Version: e5b1b0f-120218", "", "", "" }, }; @@ -70,7 +74,7 @@ void TestRockboxInfo::testVersion() void TestRockboxInfo::testTarget() { - unsigned int i, j; + int i, j; QStringList targets; targets << "sansae200" << "gigabeats" << "iriverh100" << "unknown"; QStringList prefix; @@ -94,7 +98,7 @@ void TestRockboxInfo::testTarget() void TestRockboxInfo::testMemory() { - unsigned int i, j; + int i, j; QStringList memsizes; memsizes << "8" << "16" << "32" << "64"; QStringList prefix; @@ -118,7 +122,7 @@ void TestRockboxInfo::testMemory() void TestRockboxInfo::testFeatures() { - unsigned int i, j; + int i, j; QStringList features; features << "backlight_brightness:button_light:dircache:flash_storage" << "pitchscreen:multivolume:multidrive_usb:quickscreen";