mirror of
https://github.com/pbatard/rufus.git
synced 2024-08-14 23:57:05 +00:00
[misc] fix FAT32 cluster boundaries and add cheat mode to force DD
* Closes #310 * Alt-I can now be used to disable ISO support. This is meant to be used for dual ISO/DD images so that DD (disk image) mode will be used * Also issue a message in the log to indicate whether slow or quick format is used * Also change the cheat mode keys for force update and proper unit to C and U
This commit is contained in:
parent
1c8f57a4e7
commit
f78eb4de99
6 changed files with 40 additions and 25 deletions
|
@ -80,5 +80,6 @@ o Version 1.0.0 (2013.10.20)
|
||||||
[TODO] (NOTE: THIS PART IS ONLY FOR THE RUFUS DEVELOPER, NOT TRANSLATORS)
|
[TODO] (NOTE: THIS PART IS ONLY FOR THE RUFUS DEVELOPER, NOT TRANSLATORS)
|
||||||
- MSG_165 should be altered to say image
|
- MSG_165 should be altered to say image
|
||||||
- NEW message for wrong MSG_044 in _StrError()
|
- NEW message for wrong MSG_044 in _StrError()
|
||||||
- NEW message for Alt-Q toggle
|
- NEW message for Alt-I toggle
|
||||||
|
- NEW message for Alt-U toggle
|
||||||
- NEW message for ERROR_NOT_READY
|
- NEW message for ERROR_NOT_READY
|
|
@ -743,6 +743,7 @@ static BOOL FormatDrive(DWORD DriveIndex)
|
||||||
task_number = 0;
|
task_number = 0;
|
||||||
fs_index = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem));
|
fs_index = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem));
|
||||||
|
|
||||||
|
uprintf("%s format was selected\n", IsChecked(IDC_QUICKFORMAT)?"Quick":"Slow");
|
||||||
pfFormatEx(wVolumeName, SelectedDrive.Geometry.MediaType, wFSType, wLabel,
|
pfFormatEx(wVolumeName, SelectedDrive.Geometry.MediaType, wFSType, wLabel,
|
||||||
IsChecked(IDC_QUICKFORMAT), ulClusterSize, FormatExCallback);
|
IsChecked(IDC_QUICKFORMAT), ulClusterSize, FormatExCallback);
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ void cdio_destroy (CdIo_t* p_cdio) {}
|
||||||
|
|
||||||
RUFUS_ISO_REPORT iso_report;
|
RUFUS_ISO_REPORT iso_report;
|
||||||
int64_t iso_blocking_status = -1;
|
int64_t iso_blocking_status = -1;
|
||||||
BOOL enable_joliet = TRUE, enable_rockridge = TRUE, has_ldlinux_c32;
|
BOOL enable_iso = TRUE, enable_joliet = TRUE, enable_rockridge = TRUE, has_ldlinux_c32;
|
||||||
#define ISO_BLOCKING(x) do {x; iso_blocking_status++; } while(0)
|
#define ISO_BLOCKING(x) do {x; iso_blocking_status++; } while(0)
|
||||||
static const char* psz_extract_dir;
|
static const char* psz_extract_dir;
|
||||||
static const char* bootmgr_efi_name = "bootmgr.efi";
|
static const char* bootmgr_efi_name = "bootmgr.efi";
|
||||||
|
@ -483,7 +483,7 @@ BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan)
|
||||||
const char ISOLINUX[] = { 'I', 'S', 'O', 'L', 'I', 'N', 'U', 'X', ' ' };
|
const char ISOLINUX[] = { 'I', 'S', 'O', 'L', 'I', 'N', 'U', 'X', ' ' };
|
||||||
iso_extension_mask_t iso_extension_mask = ISO_EXTENSION_ALL;
|
iso_extension_mask_t iso_extension_mask = ISO_EXTENSION_ALL;
|
||||||
|
|
||||||
if ((src_iso == NULL) || (dest_dir == NULL))
|
if ((!enable_iso) || (src_iso == NULL) || (dest_dir == NULL))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
scan_only = scan;
|
scan_only = scan;
|
||||||
|
|
44
src/rufus.c
44
src/rufus.c
|
@ -117,7 +117,7 @@ static BOOL log_displayed = FALSE;
|
||||||
static BOOL iso_provided = FALSE;
|
static BOOL iso_provided = FALSE;
|
||||||
static BOOL user_notified = FALSE;
|
static BOOL user_notified = FALSE;
|
||||||
static BOOL relaunch = FALSE;
|
static BOOL relaunch = FALSE;
|
||||||
extern BOOL force_large_fat32, enable_joliet, enable_rockridge, enable_ntfs_compression;
|
extern BOOL force_large_fat32, enable_iso, enable_joliet, enable_rockridge, enable_ntfs_compression;
|
||||||
extern const char* old_c32_name[NB_OLD_C32];
|
extern const char* old_c32_name[NB_OLD_C32];
|
||||||
static int selection_default;
|
static int selection_default;
|
||||||
static loc_cmd* selected_locale = NULL;
|
static loc_cmd* selected_locale = NULL;
|
||||||
|
@ -261,7 +261,7 @@ static BOOL DefineClusterSizes(void)
|
||||||
if ((SelectedDrive.DiskSize >= 32*MB) && (1.0f*SelectedDrive.DiskSize < 1.0f*MAX_FAT32_SIZE*TB)) {
|
if ((SelectedDrive.DiskSize >= 32*MB) && (1.0f*SelectedDrive.DiskSize < 1.0f*MAX_FAT32_SIZE*TB)) {
|
||||||
SelectedDrive.ClusterSize[FS_FAT32].Allowed = 0x000001F8;
|
SelectedDrive.ClusterSize[FS_FAT32].Allowed = 0x000001F8;
|
||||||
for (i=32; i<=(32*1024); i<<=1) { // 32 MB -> 32 GB
|
for (i=32; i<=(32*1024); i<<=1) { // 32 MB -> 32 GB
|
||||||
if (SelectedDrive.DiskSize < i*MB) {
|
if (SelectedDrive.DiskSize*1.0f < i*MB*FAT32_CLUSTER_THRESHOLD) { // MS
|
||||||
SelectedDrive.ClusterSize[FS_FAT32].Default = 8*(ULONG)i;
|
SelectedDrive.ClusterSize[FS_FAT32].Default = 8*(ULONG)i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -272,7 +272,7 @@ static BOOL DefineClusterSizes(void)
|
||||||
// Default cluster sizes in the 256MB to 32 GB range do not follow the rule above
|
// Default cluster sizes in the 256MB to 32 GB range do not follow the rule above
|
||||||
if ((SelectedDrive.DiskSize >= 256*MB) && (SelectedDrive.DiskSize < 32*GB)) {
|
if ((SelectedDrive.DiskSize >= 256*MB) && (SelectedDrive.DiskSize < 32*GB)) {
|
||||||
for (i=8; i<=32; i<<=1) { // 256 MB -> 32 GB
|
for (i=8; i<=32; i<<=1) { // 256 MB -> 32 GB
|
||||||
if (SelectedDrive.DiskSize < i*GB) {
|
if (SelectedDrive.DiskSize*1.0f < i*GB*FAT32_CLUSTER_THRESHOLD) {
|
||||||
SelectedDrive.ClusterSize[FS_FAT32].Default = ((ULONG)i/2)*1024;
|
SelectedDrive.ClusterSize[FS_FAT32].Default = ((ULONG)i/2)*1024;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2105,7 +2105,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
return (INT_PTR)TRUE;
|
return (INT_PTR)TRUE;
|
||||||
case IDC_SELECT_ISO:
|
case IDC_SELECT_ISO:
|
||||||
if (iso_provided) {
|
if (iso_provided) {
|
||||||
uprintf("Commandline Image provided: '%s'\n", iso_path);
|
uprintf("Image provided: '%s'\n", iso_path);
|
||||||
iso_provided = FALSE; // One off thing...
|
iso_provided = FALSE; // One off thing...
|
||||||
} else {
|
} else {
|
||||||
safe_free(iso_path);
|
safe_free(iso_path);
|
||||||
|
@ -2526,6 +2526,14 @@ relaunch:
|
||||||
PrintStatus2000(lmprintf(MSG_256), detect_fakes);
|
PrintStatus2000(lmprintf(MSG_256), detect_fakes);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
// Alt C => Force the update check to be successful
|
||||||
|
// This will set the reported current version of Rufus to 0.0.0.0 when performing an update
|
||||||
|
// check, so that it always succeeds. This is useful for translators.
|
||||||
|
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'C')) {
|
||||||
|
force_update = !force_update;
|
||||||
|
PrintStatus2000(lmprintf(MSG_259), force_update);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
// Alt-D => Delete the NoDriveTypeAutorun key on exit (useful if the app crashed)
|
// Alt-D => Delete the NoDriveTypeAutorun key on exit (useful if the app crashed)
|
||||||
// This key is used to disable Windows popup messages when an USB drive is plugged in.
|
// This key is used to disable Windows popup messages when an USB drive is plugged in.
|
||||||
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'D')) {
|
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'D')) {
|
||||||
|
@ -2544,6 +2552,18 @@ relaunch:
|
||||||
CheckDlgButton(hMainDialog, IDC_ENABLE_FIXED_DISKS, enable_HDDs?BST_CHECKED:BST_UNCHECKED);
|
CheckDlgButton(hMainDialog, IDC_ENABLE_FIXED_DISKS, enable_HDDs?BST_CHECKED:BST_UNCHECKED);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
// Alt-I => Toggle ISO support
|
||||||
|
// This is useful if you have a dual ISO/DD image and you want to force Rufus to use
|
||||||
|
// DD-mode when writing the data.
|
||||||
|
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'I')) {
|
||||||
|
enable_iso = !enable_iso;
|
||||||
|
PrintStatus2000("ISO support:", enable_iso);
|
||||||
|
if (iso_path != NULL) {
|
||||||
|
iso_provided = TRUE;
|
||||||
|
PostMessage(hDlg, WM_COMMAND, IDC_SELECT_ISO, 0);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
// Alt J => Toggle Joliet support for ISO9660 images
|
// Alt J => Toggle Joliet support for ISO9660 images
|
||||||
// Some ISOs (Ubuntu) have Joliet extensions but expect applications not to use them,
|
// Some ISOs (Ubuntu) have Joliet extensions but expect applications not to use them,
|
||||||
// due to their reliance on filenames that are > 64 chars (the Joliet max length for
|
// due to their reliance on filenames that are > 64 chars (the Joliet max length for
|
||||||
|
@ -2572,13 +2592,6 @@ relaunch:
|
||||||
PrintStatus2000(lmprintf(MSG_260), enable_ntfs_compression);
|
PrintStatus2000(lmprintf(MSG_260), enable_ntfs_compression);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// Alt-Q => Use PROPER size units, instead of this whole Kibi/Gibi nonsense
|
|
||||||
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'Q')) {
|
|
||||||
use_fake_units = !use_fake_units;
|
|
||||||
PrintStatus2000("Use PROPER size units:", !use_fake_units);
|
|
||||||
GetUSBDevices(0);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// Alt-R => Remove all the registry keys created by Rufus
|
// Alt-R => Remove all the registry keys created by Rufus
|
||||||
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'R')) {
|
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'R')) {
|
||||||
PrintStatus(2000, FALSE, DeleteRegistryKey(REGKEY_HKCU, COMPANY_NAME "\\" APPLICATION_NAME)?MSG_248:MSG_249);
|
PrintStatus(2000, FALSE, DeleteRegistryKey(REGKEY_HKCU, COMPANY_NAME "\\" APPLICATION_NAME)?MSG_248:MSG_249);
|
||||||
|
@ -2595,12 +2608,11 @@ relaunch:
|
||||||
GetUSBDevices(0);
|
GetUSBDevices(0);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// Alt U => Force the update check to be successful
|
// Alt-U => Use PROPER size units, instead of this whole Kibi/Gibi nonsense
|
||||||
// This will set the reported current version of Rufus to 0.0.0.0 when performing an update
|
|
||||||
// check, so that it always succeeds. This is useful for translators.
|
|
||||||
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'U')) {
|
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'U')) {
|
||||||
force_update = !force_update;
|
use_fake_units = !use_fake_units;
|
||||||
PrintStatus2000(lmprintf(MSG_259), force_update);
|
PrintStatus2000("Use PROPER size units:", !use_fake_units);
|
||||||
|
GetUSBDevices(0);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
TranslateMessage(&msg);
|
TranslateMessage(&msg);
|
||||||
|
|
|
@ -58,6 +58,7 @@
|
||||||
#define UDF_FORMAT_SPEED 3.1f // Speed estimate at which we expect UDF drives to be formatted (GB/s)
|
#define UDF_FORMAT_SPEED 3.1f // Speed estimate at which we expect UDF drives to be formatted (GB/s)
|
||||||
#define UDF_FORMAT_WARN 20 // Duration (in seconds) above which we warn about long UDF formatting times
|
#define UDF_FORMAT_WARN 20 // Duration (in seconds) above which we warn about long UDF formatting times
|
||||||
#define MAX_FAT32_SIZE 2.0f // Threshold above which we disable FAT32 formatting (in TB)
|
#define MAX_FAT32_SIZE 2.0f // Threshold above which we disable FAT32 formatting (in TB)
|
||||||
|
#define FAT32_CLUSTER_THRESHOLD 1.011f // For FAT32, cluster size changes don't occur at power of 2 boundaries but sligthly above
|
||||||
#define DD_BUFFER_SIZE 65536 // Size of the buffer we use for DD operations
|
#define DD_BUFFER_SIZE 65536 // Size of the buffer we use for DD operations
|
||||||
#define WHITE RGB(255,255,255)
|
#define WHITE RGB(255,255,255)
|
||||||
#define SEPARATOR_GREY RGB(223,223,223)
|
#define SEPARATOR_GREY RGB(223,223,223)
|
||||||
|
|
12
src/rufus.rc
12
src/rufus.rc
|
@ -32,7 +32,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||||
|
|
||||||
IDD_DIALOG DIALOGEX 12, 12, 206, 329
|
IDD_DIALOG DIALOGEX 12, 12, 206, 329
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Rufus 1.4.7.452"
|
CAPTION "Rufus 1.4.7.453"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
DEFPUSHBUTTON "Start",IDC_START,94,291,50,14
|
DEFPUSHBUTTON "Start",IDC_START,94,291,50,14
|
||||||
|
@ -165,7 +165,7 @@ END
|
||||||
RTL_IDD_DIALOG DIALOGEX 12, 12, 206, 329
|
RTL_IDD_DIALOG DIALOGEX 12, 12, 206, 329
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL
|
EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL
|
||||||
CAPTION "Rufus 1.4.7.452"
|
CAPTION "Rufus 1.4.7.453"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
DEFPUSHBUTTON "Start",IDC_START,94,291,50,14
|
DEFPUSHBUTTON "Start",IDC_START,94,291,50,14
|
||||||
|
@ -427,8 +427,8 @@ END
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 1,4,7,452
|
FILEVERSION 1,4,7,453
|
||||||
PRODUCTVERSION 1,4,7,452
|
PRODUCTVERSION 1,4,7,453
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
@ -445,13 +445,13 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)"
|
VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)"
|
||||||
VALUE "FileDescription", "Rufus"
|
VALUE "FileDescription", "Rufus"
|
||||||
VALUE "FileVersion", "1.4.7.452"
|
VALUE "FileVersion", "1.4.7.453"
|
||||||
VALUE "InternalName", "Rufus"
|
VALUE "InternalName", "Rufus"
|
||||||
VALUE "LegalCopyright", "© 2011-2014 Pete Batard (GPL v3)"
|
VALUE "LegalCopyright", "© 2011-2014 Pete Batard (GPL v3)"
|
||||||
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
|
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
|
||||||
VALUE "OriginalFilename", "rufus.exe"
|
VALUE "OriginalFilename", "rufus.exe"
|
||||||
VALUE "ProductName", "Rufus"
|
VALUE "ProductName", "Rufus"
|
||||||
VALUE "ProductVersion", "1.4.7.452"
|
VALUE "ProductVersion", "1.4.7.453"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
Loading…
Reference in a new issue