From e7578bc12d45990fe2e1261441ab5e3939a60b4e Mon Sep 17 00:00:00 2001 From: Pete Batard Date: Sun, 7 Aug 2016 18:41:47 +0200 Subject: [PATCH] [syslinux] support ISOs that use boot.bin instead of isolinux.bin * Such as WebConverger (webc-35.1.iso) * Also fix non installation of Syslinux if Alt-E (dual UEFI/BIOS) is set * Also update README and AppVeyor script --- README.md | 3 ++- appveyor.yml | 7 ++----- src/format.c | 4 ++-- src/iso.c | 20 +++++++++++--------- src/rufus.h | 1 + src/rufus.rc | 10 +++++----- 6 files changed, 23 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 9750aae5..7d2335df 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Rufus: The Reliable USB Formatting Utility Features -------- -* Format USB and Virtual HD drives to FAT/FAT32/NTFS/UDF/exFAT/ReFS +* Format USB, flash card and virtual drives to FAT/FAT32/NTFS/UDF/exFAT/ReFS * Create DOS bootable USB drives, using [FreeDOS](http://www.freedos.org/) or MS-DOS * Create BIOS or UEFI bootable drives, including [UEFI bootable NTFS](https://github.com/pbatard/uefi-ntfs) * Create bootable drives from bootable ISOs (Windows, Linux, etc.) @@ -18,6 +18,7 @@ Features * Create [Windows To Go](https://en.wikipedia.org/wiki/Windows_To_Go) drives * Twice as fast as Microsoft's USB/DVD tool or UNetbootin, on ISO -> USB creation (1) * Perform bad blocks checks, including detection of "fake" flash drives +* Compute MD5, SHA-1 and SHA-256 checksums of the selected image * Modern and familiar UI, with more than [35 languages natively supported](https://rufus.akeo.ie/translations) * Small footprint. No installation required. * Portable diff --git a/appveyor.yml b/appveyor.yml index 9f5ff6c8..5910a049 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,12 +2,9 @@ os: Visual Studio 2015 init: - ps: >- - if ($env:appveyor_repo_tag -eq "true") - { + if ($env:appveyor_repo_tag -eq "true") { Update-AppveyorBuild -Version "$env:appveyor_repo_tag_name" - } - else - { + } else { Update-AppveyorBuild -Version "dev-$($env:appveyor_repo_commit.substring(0,7))" } diff --git a/src/format.c b/src/format.c index 84ae97e8..0473df18 100644 --- a/src/format.c +++ b/src/format.c @@ -912,7 +912,7 @@ static BOOL WriteMBR(HANDLE hPhysicalDrive) // What follows is really a case statement with complex conditions listed // by order of preference - if ((allow_dual_uefi_bios) && (tt == TT_BIOS)) + if (IS_WINDOWS(img_report) && (allow_dual_uefi_bios) && (tt == TT_BIOS)) goto windows_mbr; // Forced UEFI (by zeroing the MBR) @@ -1826,7 +1826,7 @@ DWORD WINAPI FormatThread(void* param) } } else if ( (bt == BT_SYSLINUX_V4) || (bt == BT_SYSLINUX_V6) || ((bt == BT_ISO) && (HAS_SYSLINUX(img_report) || IS_REACTOS(img_report)) && - (!allow_dual_uefi_bios) && (IS_FAT(fs))) ) { + (!IS_WINDOWS(img_report) || !allow_dual_uefi_bios) && (IS_FAT(fs))) ) { if (!InstallSyslinux(DriveIndex, drive_name[0], fs)) { FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_INSTALL_FAILURE; } diff --git a/src/iso.c b/src/iso.c index e574021f..231d7bfe 100644 --- a/src/iso.c +++ b/src/iso.c @@ -80,8 +80,8 @@ static const char* install_wim_name[] = { "install.wim", "install.swm" }; static const char* grub_dirname = "/boot/grub/i386-pc"; static const char* grub_cfg = "grub.cfg"; static const char* syslinux_cfg[] = { "isolinux.cfg", "syslinux.cfg", "extlinux.conf" }; -static const char dot_isolinux_bin[] = ".\\isolinux.bin"; -static const char* isolinux_bin = &dot_isolinux_bin[2]; +static const char* isolinux_tmp = ".\\isolinux.tmp"; +static const char* isolinux_bin[] = { "isolinux.bin", "boot.bin" }; static const char* pe_dirname[] = { "/i386", "/minint" }; static const char* pe_file[] = { "ntdetect.com", "setupldr.bin", "txtsetup.sif" }; static const char* reactos_name = "setupldr.sys"; // TODO: freeldr.sys doesn't seem to work @@ -217,9 +217,11 @@ static BOOL check_iso_props(const char* psz_dirname, int64_t i_file_length, cons // Maintain a list of all the isolinux/syslinux configs identified so far StrArrayAdd(&config_path, psz_fullpath); } - if (safe_stricmp(psz_basename, isolinux_bin) == 0) { - // Maintain a list of all the isolinux.bin files found - StrArrayAdd(&isolinux_path, psz_fullpath); + for (i=0; i