Skip to content

Commit 05526d4

Browse files
committed
[iso] improve error reporting on ISO extraction issues
* Also disable NTFS cluster size that no longer work in recent versions of Windows.
1 parent 920a4c5 commit 05526d4

File tree

4 files changed

+18
-9
lines changed

4 files changed

+18
-9
lines changed

src/iso.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -739,7 +739,9 @@ static int udf_extract_files(udf_t *p_udf, udf_dirent_t *p_udf_dirent, const cha
739739
hash_write[HASH_MD5](&ctx, buf, buf_size);
740740
ISO_BLOCKING(r = WriteFileWithRetry(file_handle, buf, buf_size, &wr_size, WRITE_RETRIES));
741741
if (!r || (wr_size != buf_size)) {
742-
uprintf(" Error writing file: %s", r ? "Short write detected" : WindowsErrorString());
742+
if (r)
743+
SetLastError(ERROR_WRITE_FAULT);
744+
uprintf(" Error writing file: %s", WindowsErrorString());
743745
goto out;
744746
}
745747
file_length -= wr_size;
@@ -776,6 +778,8 @@ static int udf_extract_files(udf_t *p_udf, udf_dirent_t *p_udf_dirent, const cha
776778
return 0;
777779

778780
out:
781+
if (GetLastError() != ERROR_SUCCESS)
782+
ErrorStatus = RUFUS_ERROR(GetLastError());
779783
udf_dirent_free(p_udf_dirent);
780784
ISO_BLOCKING(safe_closehandle(file_handle));
781785
safe_free(psz_sanpath);
@@ -1004,7 +1008,9 @@ static int iso_extract_files(iso9660_t* p_iso, const char *psz_path)
10041008
hash_write[HASH_MD5](&ctx, buf, buf_size);
10051009
ISO_BLOCKING(r = WriteFileWithRetry(file_handle, buf, buf_size, &wr_size, WRITE_RETRIES));
10061010
if (!r || wr_size != buf_size) {
1007-
uprintf(" Error writing file: %s", r ? "Short write detected" : WindowsErrorString());
1011+
if (r)
1012+
SetLastError(ERROR_WRITE_FAULT);
1013+
uprintf(" Error writing file: %s", WindowsErrorString());
10081014
goto out;
10091015
}
10101016
file_length -= wr_size;
@@ -1039,6 +1045,8 @@ static int iso_extract_files(iso9660_t* p_iso, const char *psz_path)
10391045
r = 0;
10401046

10411047
out:
1048+
if (r != 0 && GetLastError() != ERROR_SUCCESS)
1049+
ErrorStatus = RUFUS_ERROR(GetLastError());
10421050
ISO_BLOCKING(safe_closehandle(file_handle));
10431051
if (p_entlist != NULL)
10441052
iso9660_filelist_free(p_entlist);

src/rufus.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -537,7 +537,7 @@ static BOOL SetFileSystemAndClusterSize(char* fs_name)
537537

538538
if (SelectedDrive.DiskSize < 256 * TB) {
539539
// NTFS
540-
SelectedDrive.ClusterSize[FS_NTFS].Allowed = 0x0001FE00;
540+
SelectedDrive.ClusterSize[FS_NTFS].Allowed = 0x0001F000;
541541
for (i = 16; i <= 256; i <<= 1) { // 7 MB -> 256 TB
542542
if (SelectedDrive.DiskSize < i * TB) {
543543
SelectedDrive.ClusterSize[FS_NTFS].Default = ((ULONG)i / 4) * KB;

src/rufus.rc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
3333
IDD_DIALOG DIALOGEX 12, 12, 232, 326
3434
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
3535
EXSTYLE WS_EX_ACCEPTFILES
36-
CAPTION "Rufus 4.12.2288"
36+
CAPTION "Rufus 4.12.2289"
3737
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
3838
BEGIN
3939
LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP
@@ -408,8 +408,8 @@ END
408408
//
409409

410410
VS_VERSION_INFO VERSIONINFO
411-
FILEVERSION 4,12,2288,0
412-
PRODUCTVERSION 4,12,2288,0
411+
FILEVERSION 4,12,2289,0
412+
PRODUCTVERSION 4,12,2289,0
413413
FILEFLAGSMASK 0x3fL
414414
#ifdef _DEBUG
415415
FILEFLAGS 0x1L
@@ -427,13 +427,13 @@ BEGIN
427427
VALUE "Comments", "https://rufus.ie"
428428
VALUE "CompanyName", "Akeo Consulting"
429429
VALUE "FileDescription", "Rufus"
430-
VALUE "FileVersion", "4.12.2288"
430+
VALUE "FileVersion", "4.12.2289"
431431
VALUE "InternalName", "Rufus"
432432
VALUE "LegalCopyright", "� 2011-2025 Pete Batard (GPL v3)"
433433
VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html"
434434
VALUE "OriginalFilename", "rufus-4.12.exe"
435435
VALUE "ProductName", "Rufus"
436-
VALUE "ProductVersion", "4.12.2288"
436+
VALUE "ProductVersion", "4.12.2289"
437437
END
438438
END
439439
BLOCK "VarFileInfo"

src/stdio.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -641,13 +641,14 @@ BOOL WriteFileWithRetry(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWr
641641
} else {
642642
uprintf("Write error %s", WindowsErrorString());
643643
LastWriteError = RUFUS_ERROR(GetLastError());
644+
if (LastWriteError == RUFUS_ERROR(ERROR_DISK_FULL))
645+
break;
644646
}
645647
// If we can't reposition for the next run, just abort
646648
if (!readFilePointer)
647649
break;
648650
if (nTry < nNumRetries) {
649651
uprintf("Retrying in %d seconds...", WRITE_TIMEOUT / 1000);
650-
// TODO: Call GetProcessSearch() here?
651652
Sleep(WRITE_TIMEOUT);
652653
}
653654
}

0 commit comments

Comments
 (0)