Index: head/sysutils/unetbootin/files/patch-unetbootin.cpp =================================================================== --- head/sysutils/unetbootin/files/patch-unetbootin.cpp (revision 459107) +++ head/sysutils/unetbootin/files/patch-unetbootin.cpp (revision 459108) @@ -1,243 +1,270 @@ --- unetbootin.cpp.orig 2017-07-14 08:54:12 UTC +++ unetbootin.cpp @@ -301,8 +301,13 @@ bool unetbootin::ubninitialize(QListcurrentText(); devluid = getdevluid(targetDev); ginstallDir = ""; installDir = ginstallDir; targetDrive = QString("%1/").arg(locatemountpoint(targetDev)); +#endif +#ifdef Q_OS_FREEBSD + QStringList driveinfo = driveselect->currentText().split(":"); + targetDev = driveinfo.at(0); + installDir = ginstallDir = ""; + targetDrive = QString("%1/").arg(driveinfo.at(1)); +#endif } #ifdef Q_OS_LINUX if (targetDev.contains(QRegExp("p\\d$"))) @@ -3528,7 +3613,7 @@ void unetbootin::runinst() else rawtargetDev = QString(targetDev).remove(QRegExp("\\d$")); #endif -#ifdef Q_OS_MAC +#ifdef Q_OS_UNIX rawtargetDev = QString(targetDev).remove(QRegExp("s\\d$")); #endif #endif +@@ -3724,7 +3809,7 @@ void unetbootin::writegrub2cfg() + QString menulstxt = QString( + "%9\n\n" + #ifndef NODEFAULTBOOT +- "\nmenuentry \""UNETBOOTINB"\" {\n" ++ "\nmenuentry \"" UNETBOOTINB "\" {\n" + "\tset root=%8\n" + "\t%1 %2 %3 %4\n" + "\t%5 %6 %7\n" +@@ -3845,7 +3930,7 @@ void unetbootin::runinsthdd() + "timeout 10\n" + #endif + #ifndef NODEFAULTBOOT +- "\ntitle "UNETBOOTINB"\n" ++ "\ntitle " UNETBOOTINB "\n" + #ifdef Q_OS_WIN32 + "find --set-root %3\n" + #endif @@ -4281,21 +4366,47 @@ void unetbootin::runinstusb() instIndvfl("libutil.c32", QString("%1libutil.c32").arg(targetPath)); instIndvfl("libcom32.c32", QString("%1libcom32.c32").arg(targetPath)); } + setuppersspace(); +#ifdef Q_OS_FREEBSD + /* + * On FreeBSD, we only support installing on MSDOSFS (no + * extlinux in the ports). This also simplifies things + * a bit, and that's what most users usually want anyway. + * + * Because of syslinux' stupidity, we have to remove any + * existing ldlinux.c32 and ldlinux.sys files, otherwise + * it will fail to install loader (even with -f switch). + * Then we have to unmount the filesystem to avoid the + * "Operation not permitted" error, and must enforce it + * because syslinux expects a block device, and, well, + * there are no "block devices" in FreeBSD. + */ + rmFile(targetPath + "ldlinux.c32"); + rmFile(targetPath + "ldlinux.sys"); + callexternapp("umount", targetDev); + callexternapp(syslinuxcommand, "-i -f " + targetDev); + + if (rawtargetDev != targetDev) + { + /* + * We have partition table (not operating on raw + * disk), so we need to install MBR and mark our + * partition as active. Assume our targetDev is + * /dev/{da,mmcsd}XsY and use the last digit as + * partition index for gpart(8). + */ + QString idx = targetDev.right(1); + callexternapp("gpart", + "bootcode -b /boot/mbr " + rawtargetDev); + callexternapp("gpart", "set -a " + "active -i " + idx + " " + rawtargetDev); + } +#endif fininstall(); } -void unetbootin::killApplication() +void unetbootin::setuppersspace() { - exit(0); -} - -void unetbootin::fininstall() -{ - #ifdef Q_OS_UNIX - this->tprogress->setValue(this->tprogress->maximum()*2/3); - pdesc1->setText(tr("Syncing filesystems")); - callexternapp("sync", ""); - #endif if (this->persistenceSpaceMB > 0) { pdesc1->setText(tr("Setting up persistence")); @@ -4334,6 +4445,20 @@ void unetbootin::fininstall() rmFile(mke2fscommand); #endif } +} + +void unetbootin::killApplication() +{ + exit(0); +} + +void unetbootin::fininstall() +{ + #ifdef Q_OS_UNIX + this->tprogress->setValue(this->tprogress->maximum()*2/3); + pdesc1->setText(tr("Syncing filesystems")); + callexternapp("sync", ""); + #endif pdesc1->setText(""); progresslayer->setEnabled(false); progresslayer->hide(); +@@ -4343,7 +4468,7 @@ void unetbootin::fininstall() + sdesc4->setText(QString("%1 %2").arg(sdesc4->text()).arg(trcurrent)); + if (installType == tr("Hard Disk")) + { +- rebootmsgtext->setText(tr("After rebooting, select the "UNETBOOTINB" menu entry to boot.%1").arg(postinstmsg)); ++ rebootmsgtext->setText(tr("After rebooting, select the " UNETBOOTINB " menu entry to boot.%1").arg(postinstmsg)); + } + if (installType == tr("USB Drive")) + {