bool Dependency::test(const Version& v) const { int a = v.compare(this->min); int b = v.compare(this->max); bool low; if (minIncluded) low = a >= 0; else low = a > 0; bool high; if (maxIncluded) high = b <= 0; else high = b < 0; return low && high; }
QString InstalledPackages::findPath_npackdcl(const Dependency& dep) { QString ret; QString err; WindowsRegistry packagesWR; LONG e; err = packagesWR.open(HKEY_LOCAL_MACHINE, "SOFTWARE\\Npackd\\Npackd\\Packages", false, KEY_READ, &e); if (e == ERROR_FILE_NOT_FOUND || e == ERROR_PATH_NOT_FOUND) { err = ""; } else if (err.isEmpty()) { Version found = Version::EMPTY; QStringList entries = packagesWR.list(&err); for (int i = 0; i < entries.count(); ++i) { QString name = entries.at(i); int pos = name.lastIndexOf("-"); if (pos <= 0) continue; QString packageName = name.left(pos); if (packageName != dep.package) continue; QString versionName = name.right(name.length() - pos - 1); Version version; if (!version.setVersion(versionName)) continue; if (!dep.test(version)) continue; if (found != Version::EMPTY) { if (version.compare(found) < 0) continue; } WindowsRegistry entryWR; err = entryWR.open(packagesWR, name, KEY_READ); if (!err.isEmpty()) continue; QString p = entryWR.get("Path", &err).trimmed(); if (!err.isEmpty()) continue; QString dir; if (p.isEmpty()) dir = ""; else { QDir d(p); if (d.exists()) { dir = p; } else { dir = ""; } } if (dir.isEmpty()) continue; found = version; ret = dir; } } return ret; }