| 248 | } |
| 249 | |
| 250 | Sys::DistributionInfo Sys::read_legacy_release() |
| 251 | { |
| 252 | struct checkEntry |
| 253 | { |
| 254 | QString file; |
| 255 | std::function<QString(const QString &)> extract_distro; |
| 256 | std::function<QString(const QString &)> extract_version; |
| 257 | }; |
| 258 | QList<checkEntry> checks = |
| 259 | { |
| 260 | {"/etc/arch-release", [](const QString &){ return "arch";}, [](const QString &){ return "rolling";}}, |
| 261 | {"/etc/slackware-version", &Sys::_extract_distribution, &Sys::_extract_version}, |
| 262 | {QString(), &Sys::_extract_distribution, &Sys::_extract_version}, |
| 263 | {"/etc/debian_version", [](const QString &){ return "debian";}, [](const QString & x){ return x;}}, |
| 264 | }; |
| 265 | for(auto & check: checks) |
| 266 | { |
| 267 | QStringList files; |
| 268 | if(check.file.isNull()) |
| 269 | { |
| 270 | QDir etcDir("/etc"); |
| 271 | etcDir.setNameFilters({"*-release"}); |
| 272 | etcDir.setFilter(QDir::Files | QDir::NoDot | QDir::NoDotDot | QDir::Readable | QDir::Hidden); |
| 273 | files = etcDir.entryList(); |
| 274 | } |
| 275 | else |
| 276 | { |
| 277 | files.append(check.file); |
| 278 | } |
| 279 | for (auto file : files) |
| 280 | { |
| 281 | QFile relfile(file); |
| 282 | if(!relfile.open(QIODevice::ReadOnly | QIODevice::Text)) |
| 283 | continue; |
| 284 | QString contents = QString::fromUtf8(relfile.readLine()).trimmed(); |
| 285 | QString dist = check.extract_distro(contents); |
| 286 | QString vers = check.extract_version(contents); |
| 287 | if(!dist.isEmpty()) |
| 288 | { |
| 289 | Sys::DistributionInfo out; |
| 290 | out.distributionName = dist; |
| 291 | out.distributionVersion = vers; |
| 292 | return out; |
| 293 | } |
| 294 | } |
| 295 | } |
| 296 | return Sys::DistributionInfo(); |
| 297 | } |
| 298 | |