diff --git a/src/format.c b/src/format.c index 0900bf82..5e6dcdb3 100644 --- a/src/format.c +++ b/src/format.c @@ -136,6 +136,47 @@ static BOOLEAN __stdcall FormatExCallback(FILE_SYSTEM_CALLBACK_COMMAND Command, return (!IS_ERROR(FormatStatus)); } +/* + * Converts an UTF-16 label to a valid FAT/NTFS one + */ +static void ToValidLabel(WCHAR* name, BOOL bFAT) +{ + size_t i, j, k; + BOOL found; + WCHAR unauthorized[] = L"*?.,;:/\\|+=<>[]"; + WCHAR to_underscore[] = L"\t"; + + if (name == NULL) + return; + + for (i=0, k=0; i= FOUR_GIGABYTES) @@ -244,14 +244,14 @@ static int iso_extract_files(iso9660_t* p_iso, const char *psz_path) if (!p_entlist) return 1; - _CDIO_LIST_FOREACH (p_entnode, p_entlist) { + _CDIO_LIST_FOREACH(p_entnode, p_entlist) { if (FormatStatus) goto out; p_statbuf = (iso9660_stat_t*) _cdio_list_node_data(p_entnode); /* Eliminate . and .. entries */ if ( (strcmp(p_statbuf->filename, ".") == 0) || (strcmp(p_statbuf->filename, "..") == 0) ) continue; - iso9660_name_translate(p_statbuf->filename, psz_basename); + iso9660_name_translate_ext(p_statbuf->filename, psz_basename, i_joliet_level); if (p_statbuf->type == _STAT_DIR) { if (!scan_only) _mkdir(psz_fullpath); if (iso_extract_files(p_iso, psz_iso_name)) @@ -260,11 +260,11 @@ static int iso_extract_files(iso9660_t* p_iso, const char *psz_path) i_file_length = p_statbuf->size; if (scan_only) { // Check for a "bootmgr" file in root (psz_path = "") - if ((*psz_path == 0) && (safe_strcmp(psz_basename, bootmgr_name) == 0)) + if ((*psz_path == 0) && (_stricmp(psz_basename, bootmgr_name) == 0)) iso_report.has_bootmgr = TRUE; // Check for a syslinux config file anywhere for (i=0; i= FOUR_GIGABYTES) @@ -276,7 +276,7 @@ static int iso_extract_files(iso9660_t* p_iso, const char *psz_path) } else { // In case there's an ldlinux.sys on the ISO, prevent it from overwriting ours if ((*psz_path == 0) && (safe_strcmp(psz_basename, ldlinux_name) == 0)) { - uprintf("skipping % file from ISO image\n", ldlinux_name); + uprintf("Skipping % file from ISO image\n", ldlinux_name); continue; } } @@ -389,12 +389,15 @@ BOOL ExtractISO(const char* src_iso, const char* dest_dir, bool scan) goto out; try_iso: - p_iso = iso9660_open(src_iso); + p_iso = iso9660_open_ext(src_iso, 0xFF); if (p_iso == NULL) { uprintf("Unable to open image '%s'.\n", src_iso); goto out; } - uprintf("Disc image is an ISO9660 image\n"); + i_joliet_level = iso9660_ifs_get_joliet_level(p_iso); + uprintf("Disc image is an ISO9660 image (Joliet = %d)\n", i_joliet_level); + // FIXME: libcdio's Joliet detection seems broken => override + i_joliet_level = ISO_EXTENSION_JOLIET_LEVEL3; if (scan_only) { if (iso9660_ifs_get_volume_id(p_iso, &vol_id)) safe_strcpy(iso_report.label, sizeof(iso_report.label), vol_id); diff --git a/src/libcdio/iso9660/iso9660_fs.c b/src/libcdio/iso9660/iso9660_fs.c index 272c5dd7..cd5e49f9 100644 --- a/src/libcdio/iso9660/iso9660_fs.c +++ b/src/libcdio/iso9660/iso9660_fs.c @@ -703,7 +703,7 @@ iso9660_seek_read_framesize (const iso9660_t *p_iso, void *ptr, uint16_t i_framesize) { long int ret; - long int i_byte_offset; + int64_t i_byte_offset; if (!p_iso) return 0; i_byte_offset = (start * p_iso->i_framesize) + p_iso->i_fuzzy_offset diff --git a/src/rufus.c b/src/rufus.c index 3bc68127..d6e8de5c 100644 --- a/src/rufus.c +++ b/src/rufus.c @@ -952,41 +952,6 @@ BOOL CALLBACK ISOProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) return FALSE; } -/* - * Converts a name + ext UTF-8 pair to a valid MS filename. - * Returned string is allocated and needs to be freed manually - */ -void to_valid_label(char* name) -{ - size_t i, j, k; - BOOL found; - char unauthorized[] = "*?.,;:/\\|+=<>[]"; - char to_underscore[] = "\t"; - - if (name == NULL) - return; - - for (i=0, k=0; i use a thread DWORD WINAPI ISOScanThread(LPVOID param) { @@ -1013,7 +978,6 @@ DWORD WINAPI ISOScanThread(LPVOID param) // Some Linux distros, such as Arch Linux, require the USB drive to have // a specific label => copy the one we got from the ISO image if (iso_report.label[0] != 0) { - to_valid_label(iso_report.label); SetWindowTextU(hLabel, iso_report.label); } } @@ -1321,27 +1285,29 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA FormatStatus = 0; nDeviceIndex = ComboBox_GetCurSel(hDeviceList); if (nDeviceIndex != CB_ERR) { - dt = (int)ComboBox_GetItemData(hDOSType, ComboBox_GetCurSel(hDOSType)); - if ((dt == DT_ISO_NTFS) || (dt == DT_ISO_FAT)) { - if (iso_path == NULL) { - MessageBoxA(hMainDialog, "Please click on the disc button to select a bootable ISO,\n" - "or uncheck the \"Create a bootable disk...\" checkbox.", - "No ISO image selected...", MB_OK|MB_ICONERROR); - break; - } - if ((iso_size_check) && (iso_report.projected_size > (uint64_t)SelectedDrive.DiskSize)) { - MessageBoxA(hMainDialog, "This ISO image is too big " - "for the selected target.", "ISO image too big...", MB_OK|MB_ICONERROR); - break; - } - if ((dt == DT_ISO_NTFS) && (!iso_report.has_bootmgr)) { - MessageBoxA(hMainDialog, "Only 'bootmgr' based ISO " - "images can be used with NTFS.", "Unsupported ISO...", MB_OK|MB_ICONERROR); - break; - } else if ((dt == DT_ISO_FAT) && (!iso_report.has_isolinux)) { - MessageBoxA(hMainDialog, "Only 'isolinux' based ISO " - "images can be used with FAT.", "Unsupported ISO...", MB_OK|MB_ICONERROR); - break; + if (IsChecked(IDC_DOS)) { + dt = (int)ComboBox_GetItemData(hDOSType, ComboBox_GetCurSel(hDOSType)); + if ((dt == DT_ISO_NTFS) || (dt == DT_ISO_FAT)) { + if (iso_path == NULL) { + MessageBoxA(hMainDialog, "Please click on the disc button to select a bootable ISO,\n" + "or uncheck the \"Create a bootable disk...\" checkbox.", + "No ISO image selected...", MB_OK|MB_ICONERROR); + break; + } + if ((iso_size_check) && (iso_report.projected_size > (uint64_t)SelectedDrive.DiskSize)) { + MessageBoxA(hMainDialog, "This ISO image is too big " + "for the selected target.", "ISO image too big...", MB_OK|MB_ICONERROR); + break; + } + if ((dt == DT_ISO_NTFS) && (!iso_report.has_bootmgr)) { + MessageBoxA(hMainDialog, "Only 'bootmgr' based ISO " + "images can be used with NTFS.", "Unsupported ISO...", MB_OK|MB_ICONERROR); + break; + } else if ((dt == DT_ISO_FAT) && (!iso_report.has_isolinux)) { + MessageBoxA(hMainDialog, "Only 'isolinux' based ISO " + "images can be used with FAT.", "Unsupported ISO...", MB_OK|MB_ICONERROR); + break; + } } } GetWindowTextA(hDeviceList, tmp, sizeof(tmp)); diff --git a/src/rufus.rc b/src/rufus.rc index 20a899bd..93a06b83 100644 --- a/src/rufus.rc +++ b/src/rufus.rc @@ -33,7 +33,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL IDD_DIALOG DIALOGEX 12, 12, 206, 278 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_APPWINDOW -CAPTION "Rufus v1.1.1.134" +CAPTION "Rufus v1.1.1.135" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN DEFPUSHBUTTON "Start",IDC_START,94,236,50,14 @@ -71,7 +71,7 @@ BEGIN DEFPUSHBUTTON "OK",IDOK,231,175,50,14,WS_GROUP CONTROL "http://rufus.akeo.ie",IDC_ABOUT_RUFUS_URL, "SysLink",WS_TABSTOP,46,47,114,9 - LTEXT "Version 1.1.1 (Build 134)",IDC_STATIC,46,19,78,8 + LTEXT "Version 1.1.1 (Build 135)",IDC_STATIC,46,19,78,8 PUSHBUTTON "License...",IDC_ABOUT_LICENSE,46,175,50,14,WS_GROUP EDITTEXT IDC_ABOUT_COPYRIGHTS,46,107,235,63,ES_MULTILINE | ES_READONLY | WS_VSCROLL LTEXT "Report bugs or request enhancements at:",IDC_STATIC,46,66,187,8 @@ -222,8 +222,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,1,1,134 - PRODUCTVERSION 1,1,1,134 + FILEVERSION 1,1,1,135 + PRODUCTVERSION 1,1,1,135 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -240,13 +240,13 @@ BEGIN BEGIN VALUE "CompanyName", "akeo.ie" VALUE "FileDescription", "Rufus" - VALUE "FileVersion", "1.1.1.134" + VALUE "FileVersion", "1.1.1.135" VALUE "InternalName", "Rufus" VALUE "LegalCopyright", "© 2011 Pete Batard (GPL v3)" VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html" VALUE "OriginalFilename", "rufus.exe" VALUE "ProductName", "Rufus" - VALUE "ProductVersion", "1.1.1.134" + VALUE "ProductVersion", "1.1.1.135" END END BLOCK "VarFileInfo"