From eb5087d504aaf08aa1dc2aa92bfcc2490da42c3a Mon Sep 17 00:00:00 2001 From: Pete Batard Date: Wed, 2 Aug 2017 18:58:27 +0100 Subject: [PATCH] [togo] fix a typo in index selection and add support for nonofficial ISOs * Closes #991 --- src/format.c | 25 +++++++++++++++++++++---- src/rufus.rc | 10 +++++----- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/format.c b/src/format.c index c0ba4a1c..475bc05f 100644 --- a/src/format.c +++ b/src/format.c @@ -1288,6 +1288,7 @@ int SetWinToGoIndex(void) char tmp_path[MAX_PATH] = "", xml_file[MAX_PATH] = ""; StrArray version_name, version_index; int i, build_nr = 0; + BOOL bNonStandard = FALSE; // Sanity checks wintogo_index = -1; @@ -1307,7 +1308,7 @@ int SetWinToGoIndex(void) if ((GetTempPathU(sizeof(tmp_path), tmp_path) == 0) || (GetTempFileNameU(tmp_path, APPLICATION_NAME, 0, xml_file) == 0) || (xml_file[0] == 0)) { - // Last ditch effort to get a loc file - just extract it to the current directory + // Last ditch effort to get a tmp file - just extract it to the current directory safe_strcpy(xml_file, sizeof(xml_file), ".\\RufVXml.tmp"); } // GetTempFileName() may leave a file behind @@ -1321,8 +1322,24 @@ int SetWinToGoIndex(void) StrArrayCreate(&version_name, 16); StrArrayCreate(&version_index, 16); - for (i = 0; (StrArrayAdd(&version_name, get_token_data_file_indexed("DISPLAYNAME", xml_file, i + 1), FALSE) >= 0) && - (StrArrayAdd(&version_index, get_token_data_file_indexed("IMAGE INDEX", xml_file, i + 1), FALSE) >= 0); i++); + for (i = 0; StrArrayAdd(&version_index, get_token_data_file_indexed("IMAGE INDEX", xml_file, i + 1), FALSE) >= 0; i++) { + // Some people are apparently creating *unofficial* Windows ISOs that don't have DISPLAYNAME elements. + // If we are parsing such an ISO, try to fall back to using DESCRIPTION. Of course, since we don't use + // a formal XML parser, if an ISO mixes entries with both DISPLAYNAME and DESCRIPTION and others with + // only DESCRIPTION, the version names we report will be wrong. + // But hey, there's only so far I'm willing to go to help people who, not content to have demonstrated + // their utter ignorance on development matters, are also trying to lecture experienced developers + // about specific "noob mistakes"... that don't exist in the code they are trying to criticize. + if (StrArrayAdd(&version_name, get_token_data_file_indexed("DISPLAYNAME", xml_file, i + 1), FALSE) < 0) { + bNonStandard = TRUE; + if (StrArrayAdd(&version_name, get_token_data_file_indexed("DESCRIPTION", xml_file, i + 1), FALSE) < 0) { + uprintf("Warning: Could not find a description for image index %d", i + 1); + StrArrayAdd(&version_name, "Unknown Windows Version", TRUE); + } + } + } + if (bNonStandard) + uprintf("Warning: Nonstandard Windows image (missing entries)"); if (i > 1) i = SelectionDialog(lmprintf(MSG_291), lmprintf(MSG_292), version_name.String, i); @@ -1333,7 +1350,7 @@ int SetWinToGoIndex(void) } else { wintogo_index = atoi(version_index.String[i - 1]); } - if (i >= 0) { + if (i > 0) { // Get the build version build = get_token_data_file_indexed("BUILD", xml_file, i); if (build != NULL) diff --git a/src/rufus.rc b/src/rufus.rc index ee67705f..6c496308 100644 --- a/src/rufus.rc +++ b/src/rufus.rc @@ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL IDD_DIALOG DIALOGEX 12, 12, 242, 376 STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_ACCEPTFILES -CAPTION "Rufus 2.16.1171" +CAPTION "Rufus 2.16.1172" FONT 8, "Segoe UI Symbol", 400, 0, 0x0 BEGIN LTEXT "Device",IDS_DEVICE_TXT,9,6,200,8 @@ -366,8 +366,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,16,1171,0 - PRODUCTVERSION 2,16,1171,0 + FILEVERSION 2,16,1172,0 + PRODUCTVERSION 2,16,1172,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -384,13 +384,13 @@ BEGIN BEGIN VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)" VALUE "FileDescription", "Rufus" - VALUE "FileVersion", "2.16.1171" + VALUE "FileVersion", "2.16.1172" VALUE "InternalName", "Rufus" VALUE "LegalCopyright", "© 2011-2017 Pete Batard (GPL v3)" VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html" VALUE "OriginalFilename", "rufus.exe" VALUE "ProductName", "Rufus" - VALUE "ProductVersion", "2.16.1171" + VALUE "ProductVersion", "2.16.1172" END END BLOCK "VarFileInfo"