| 2597 | } |
| 2598 | |
| 2599 | auto BootEntry::fromEFIBootLoadOption( |
| 2600 | const EFIBoot::Load_option &load_option) -> BootEntry |
| 2601 | { |
| 2602 | BootEntry value{}; |
| 2603 | value.description = QString::fromStdU16String(load_option.description); |
| 2604 | |
| 2605 | value.optional_data_format = OptionalDataFormat::Base64; |
| 2606 | if(toUnicode(value.optional_data, load_option.optional_data, "UTF-8") && !value.optional_data.contains(QChar(0))) |
| 2607 | value.optional_data_format = OptionalDataFormat::Utf8; |
| 2608 | |
| 2609 | if(value.optional_data_format == OptionalDataFormat::Base64 && load_option.optional_data.size() % sizeof(char16_t) == 0 && toUnicode(value.optional_data, load_option.optional_data, "UTF-16") && !value.optional_data.contains(QChar(0))) |
| 2610 | value.optional_data_format = OptionalDataFormat::Utf16; |
| 2611 | |
| 2612 | if(value.optional_data_format == OptionalDataFormat::Base64) |
| 2613 | value.optional_data = QByteArray::fromRawData(reinterpret_cast<const char *>(load_option.optional_data.data()), static_cast<int>(load_option.optional_data.size() * sizeof(decltype(load_option.optional_data)::value_type))).toBase64(); |
| 2614 | |
| 2615 | value.attributes = load_option.attributes; |
| 2616 | |
| 2617 | for(const auto &file_path: load_option.device_path) |
| 2618 | value.device_path.push_back(std::visit([](const auto &path) -> FilePath::ANY |
| 2619 | { return path; }, |
| 2620 | file_path)); |
| 2621 | |
| 2622 | return value; |
| 2623 | } |
| 2624 | |
| 2625 | auto BootEntry::fromError(const QString &error) -> BootEntry |
| 2626 | { |