mirror of
				https://github.com/pbatard/rufus.git
				synced 2024-08-14 23:57:05 +00:00 
			
		
		
		
	[efi] add RISC-V support
* Also fix Coverity warnings
This commit is contained in:
		
							parent
							
								
									34b1d8a3ca
								
							
						
					
					
						commit
						6f5ea5f88f
					
				
					 7 changed files with 42 additions and 18 deletions
				
			
		
							
								
								
									
										10
									
								
								src/iso.c
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								src/iso.c
									
										
									
									
									
								
							|  | @ -89,8 +89,9 @@ static const char* ldlinux_c32 = "ldlinux.c32"; | ||||||
| static const char* md5sum_name[] = { "MD5SUMS", "md5sum.txt" }; | static const char* md5sum_name[] = { "MD5SUMS", "md5sum.txt" }; | ||||||
| static const char* casper_dirname = "/casper"; | static const char* casper_dirname = "/casper"; | ||||||
| static const char* efi_dirname = "/efi/boot"; | static const char* efi_dirname = "/efi/boot"; | ||||||
| static const char* efi_bootname[MAX_ARCHS] = | static const char* efi_bootname[MAX_ARCHS] = { | ||||||
| 	{ "bootia32.efi", "bootia64.efi", "bootx64.efi", "bootarm.efi", "bootaa64.efi", "bootebc.efi" }; | 	"bootia32.efi", "bootia64.efi", "bootx64.efi", "bootarm.efi", "bootaa64.efi", | ||||||
|  | 	"bootebc.efi", "bootriscv32.efi", "bootriscv64.efi", "bootriscv128.efi" }; | ||||||
| static const char* sources_str = "/sources"; | static const char* sources_str = "/sources"; | ||||||
| static const char* wininst_name[] = { "install.wim", "install.esd", "install.swm" }; | static const char* wininst_name[] = { "install.wim", "install.esd", "install.swm" }; | ||||||
| // We only support GRUB/BIOS (x86) that uses a standard config dir (/boot/grub/i386-pc/)
 | // We only support GRUB/BIOS (x86) that uses a standard config dir (/boot/grub/i386-pc/)
 | ||||||
|  | @ -1020,7 +1021,7 @@ out: | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		if (!IS_EFI_BOOTABLE(img_report) && HAS_EFI_IMG(img_report) && HasEfiImgBootLoaders()) { | 		if (!IS_EFI_BOOTABLE(img_report) && HAS_EFI_IMG(img_report) && HasEfiImgBootLoaders()) { | ||||||
| 			img_report.has_efi = 0x80; | 			img_report.has_efi = 0x8000; | ||||||
| 		} | 		} | ||||||
| 		if (HAS_WINPE(img_report)) { | 		if (HAS_WINPE(img_report)) { | ||||||
| 			// In case we have a WinPE 1.x based iso, we extract and parse txtsetup.sif
 | 			// In case we have a WinPE 1.x based iso, we extract and parse txtsetup.sif
 | ||||||
|  | @ -1045,6 +1046,7 @@ out: | ||||||
| 		if (img_report.has_grub2) { | 		if (img_report.has_grub2) { | ||||||
| 			// In case we have a GRUB2 based iso, we extract boot/grub/i386-pc/normal.mod to parse its version
 | 			// In case we have a GRUB2 based iso, we extract boot/grub/i386-pc/normal.mod to parse its version
 | ||||||
| 			img_report.grub2_version[0] = 0; | 			img_report.grub2_version[0] = 0; | ||||||
|  | 			// coverity[swapped_arguments]
 | ||||||
| 			if (GetTempFileNameU(temp_dir, APPLICATION_NAME, 0, path) != 0) { | 			if (GetTempFileNameU(temp_dir, APPLICATION_NAME, 0, path) != 0) { | ||||||
| 				size = (size_t)ExtractISOFile(src_iso, "boot/grub/i386-pc/normal.mod", path, FILE_ATTRIBUTE_NORMAL); | 				size = (size_t)ExtractISOFile(src_iso, "boot/grub/i386-pc/normal.mod", path, FILE_ATTRIBUTE_NORMAL); | ||||||
| 				buf = (char*)calloc(size, 1); | 				buf = (char*)calloc(size, 1); | ||||||
|  | @ -1071,7 +1073,7 @@ out: | ||||||
| 		SendMessage(hMainDialog, UM_PROGRESS_EXIT, 0, 0); | 		SendMessage(hMainDialog, UM_PROGRESS_EXIT, 0, 0); | ||||||
| 	} else { | 	} else { | ||||||
| 		// Solus and other ISOs only provide EFI boot files in a FAT efi.img
 | 		// Solus and other ISOs only provide EFI boot files in a FAT efi.img
 | ||||||
| 		if (img_report.has_efi == 0x80) | 		if (img_report.has_efi == 0x8000) | ||||||
| 			DumpFatDir(dest_dir, 0); | 			DumpFatDir(dest_dir, 0); | ||||||
| 		if (HAS_SYSLINUX(img_report)) { | 		if (HAS_SYSLINUX(img_report)) { | ||||||
| 			static_sprintf(path, "%s\\syslinux.cfg", dest_dir); | 			static_sprintf(path, "%s\\syslinux.cfg", dest_dir); | ||||||
|  |  | ||||||
|  | @ -125,3 +125,14 @@ static __inline void *_reallocf(void *ptr, size_t size) { | ||||||
| /* The following is used for native ISO mounting in Windows 8 or later */ | /* The following is used for native ISO mounting in Windows 8 or later */ | ||||||
| #define VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT \ | #define VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT \ | ||||||
| 	{ 0xEC984AECL, 0xA0F9, 0x47e9, { 0x90, 0x1F, 0x71, 0x41, 0x5A, 0x66, 0x34, 0x5B } } | 	{ 0xEC984AECL, 0xA0F9, 0x47e9, { 0x90, 0x1F, 0x71, 0x41, 0x5A, 0x66, 0x34, 0x5B } } | ||||||
|  | 
 | ||||||
|  | /* RISC-V is still bleeding edge */ | ||||||
|  | #ifndef IMAGE_FILE_MACHINE_RISCV32 | ||||||
|  | #define IMAGE_FILE_MACHINE_RISCV32 0x5032 | ||||||
|  | #endif | ||||||
|  | #ifndef IMAGE_FILE_MACHINE_RISCV64 | ||||||
|  | #define IMAGE_FILE_MACHINE_RISCV64 0x5064 | ||||||
|  | #endif | ||||||
|  | #ifndef IMAGE_FILE_MACHINE_RISCV128 | ||||||
|  | #define IMAGE_FILE_MACHINE_RISCV128 0x5128 | ||||||
|  | #endif | ||||||
|  |  | ||||||
							
								
								
									
										19
									
								
								src/rufus.c
									
										
									
									
									
								
							
							
						
						
									
										19
									
								
								src/rufus.c
									
										
									
									
									
								
							|  | @ -62,7 +62,8 @@ enum bootcheck_return { | ||||||
| static const char* cmdline_hogger = "rufus.com"; | static const char* cmdline_hogger = "rufus.com"; | ||||||
| static const char* ep_reg = "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer"; | static const char* ep_reg = "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer"; | ||||||
| static const char* vs_reg = "Software\\Microsoft\\VisualStudio"; | static const char* vs_reg = "Software\\Microsoft\\VisualStudio"; | ||||||
| static const char* arch_name[MAX_ARCHS] = { "x86_32", "Itanic", "x86_64", "ARM", "ARM64", "EBC" }; | static const char* arch_name[MAX_ARCHS] = { | ||||||
|  | 	"x86_32", "Itanic", "x86_64", "ARM", "ARM64", "EBC","Risc-V 32", "Risc-V 64", "Risc-V 128" }; | ||||||
| static BOOL existing_key = FALSE;	// For LGP set/restore
 | static BOOL existing_key = FALSE;	// For LGP set/restore
 | ||||||
| static BOOL size_check = TRUE; | static BOOL size_check = TRUE; | ||||||
| static BOOL log_displayed = FALSE; | static BOOL log_displayed = FALSE; | ||||||
|  | @ -1167,6 +1168,15 @@ static uint8_t FindArch(const char* filename) | ||||||
| 	case IMAGE_FILE_MACHINE_EBC: | 	case IMAGE_FILE_MACHINE_EBC: | ||||||
| 		ret = 6; | 		ret = 6; | ||||||
| 		break; | 		break; | ||||||
|  | 	case IMAGE_FILE_MACHINE_RISCV32: | ||||||
|  | 		ret = 7; | ||||||
|  | 		break; | ||||||
|  | 	case IMAGE_FILE_MACHINE_RISCV64: | ||||||
|  | 		ret = 8; | ||||||
|  | 		break; | ||||||
|  | 	case IMAGE_FILE_MACHINE_RISCV128: | ||||||
|  | 		ret = 9; | ||||||
|  | 		break; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| out: | out: | ||||||
|  | @ -1212,12 +1222,13 @@ DWORD WINAPI ImageScanThread(LPVOID param) | ||||||
| 
 | 
 | ||||||
| 	if (img_report.is_windows_img) { | 	if (img_report.is_windows_img) { | ||||||
| 		selection_default = BT_IMAGE; | 		selection_default = BT_IMAGE; | ||||||
|  | 		// coverity[swapped_arguments]
 | ||||||
| 		if (GetTempFileNameU(temp_dir, APPLICATION_NAME, 0, tmp_path) != 0) { | 		if (GetTempFileNameU(temp_dir, APPLICATION_NAME, 0, tmp_path) != 0) { | ||||||
| 			// Only look at index 1 for now. If people complain, we may look for more.
 | 			// Only look at index 1 for now. If people complain, we may look for more.
 | ||||||
| 			if (WimExtractFile(image_path, 1, "Windows\\Boot\\EFI\\bootmgr.efi", tmp_path, TRUE)) { | 			if (WimExtractFile(image_path, 1, "Windows\\Boot\\EFI\\bootmgr.efi", tmp_path, TRUE)) { | ||||||
| 				arch = FindArch(tmp_path); | 				arch = FindArch(tmp_path); | ||||||
| 				if (arch != 0) { | 				if (arch != 0) { | ||||||
| 					uprintf("  Image contains an %s EFI boot manager", arch_name[arch - 1]); | 					uprintf("  Image contains a%s %s EFI boot manager", arch_name[arch - 1], (arch < 7) ? "n" : ""); | ||||||
| 					img_report.has_efi = 1 | (1 << arch); | 					img_report.has_efi = 1 | (1 << arch); | ||||||
| 					img_report.has_bootmgr_efi = TRUE; | 					img_report.has_bootmgr_efi = TRUE; | ||||||
| 					img_report.wininst_index = 1; | 					img_report.wininst_index = 1; | ||||||
|  | @ -1727,7 +1738,7 @@ static void InitDialog(HWND hDlg) | ||||||
| 	// Count on Microsoft for making it more attractive to read a
 | 	// Count on Microsoft for making it more attractive to read a
 | ||||||
| 	// version using strtok() than using GetFileVersionInfo()
 | 	// version using strtok() than using GetFileVersionInfo()
 | ||||||
| 	token = strtok(tmp, " "); | 	token = strtok(tmp, " "); | ||||||
| 	for (i=0; (i<3) && ((token = strtok(NULL, ".")) != NULL); i++) | 	for (i = 0; (i < 3) && ((token = strtok(NULL, ".")) != NULL); i++) | ||||||
| 		rufus_version[i] = (uint16_t)atoi(token); | 		rufus_version[i] = (uint16_t)atoi(token); | ||||||
| 
 | 
 | ||||||
| 	// Redefine the title to be able to add "Alpha" or "Beta"
 | 	// Redefine the title to be able to add "Alpha" or "Beta"
 | ||||||
|  | @ -1738,7 +1749,7 @@ static void InitDialog(HWND hDlg) | ||||||
| 	dialog_handle = FindWindowA(NULL, tmp); | 	dialog_handle = FindWindowA(NULL, tmp); | ||||||
| 	uprintf(APPLICATION_NAME " " APPLICATION_ARCH " v%d.%d.%d%s%s", rufus_version[0], rufus_version[1], rufus_version[2], | 	uprintf(APPLICATION_NAME " " APPLICATION_ARCH " v%d.%d.%d%s%s", rufus_version[0], rufus_version[1], rufus_version[2], | ||||||
| 		IsAlphaOrBeta(), (ini_file != NULL)?"(Portable)":""); | 		IsAlphaOrBeta(), (ini_file != NULL)?"(Portable)":""); | ||||||
| 	for (i=0; i<ARRAYSIZE(resource); i++) { | 	for (i = 0; i < ARRAYSIZE(resource); i++) { | ||||||
| 		len = 0; | 		len = 0; | ||||||
| 		buf = (char*)GetResource(hMainInstance, resource[i], _RT_RCDATA, "ldlinux_sys", &len, TRUE); | 		buf = (char*)GetResource(hMainInstance, resource[i], _RT_RCDATA, "ldlinux_sys", &len, TRUE); | ||||||
| 		if (buf == NULL) { | 		if (buf == NULL) { | ||||||
|  |  | ||||||
|  | @ -62,7 +62,7 @@ | ||||||
| #define DRIVE_INDEX_MAX             0x000000C0 | #define DRIVE_INDEX_MAX             0x000000C0 | ||||||
| #define MIN_DRIVE_SIZE              8			// Minimum size a drive must have, to be formattable (in MB)
 | #define MIN_DRIVE_SIZE              8			// Minimum size a drive must have, to be formattable (in MB)
 | ||||||
| #define MIN_EXTRA_PART_SIZE         (1024*1024)	// Minimum size of the extra partition, in bytes
 | #define MIN_EXTRA_PART_SIZE         (1024*1024)	// Minimum size of the extra partition, in bytes
 | ||||||
| #define MAX_ARCHS                   6			// Number of arhitectures we recognize
 | #define MAX_ARCHS                   9			// Number of arhitectures we recognize
 | ||||||
| #define MAX_DRIVES                  (DRIVE_INDEX_MAX - DRIVE_INDEX_MIN) | #define MAX_DRIVES                  (DRIVE_INDEX_MAX - DRIVE_INDEX_MIN) | ||||||
| #define MAX_TOOLTIPS                128 | #define MAX_TOOLTIPS                128 | ||||||
| #define MAX_SIZE_SUFFIXES           6			// bytes, KB, MB, GB, TB, PB
 | #define MAX_SIZE_SUFFIXES           6			// bytes, KB, MB, GB, TB, PB
 | ||||||
|  | @ -308,7 +308,7 @@ enum checksum_type { | ||||||
| #define HAS_BOOTMGR_BIOS(r) (r.has_bootmgr) | #define HAS_BOOTMGR_BIOS(r) (r.has_bootmgr) | ||||||
| #define HAS_BOOTMGR_EFI(r)  (r.has_bootmgr_efi) | #define HAS_BOOTMGR_EFI(r)  (r.has_bootmgr_efi) | ||||||
| #define HAS_BOOTMGR(r)      (HAS_BOOTMGR_BIOS(r) || HAS_BOOTMGR_EFI(r)) | #define HAS_BOOTMGR(r)      (HAS_BOOTMGR_BIOS(r) || HAS_BOOTMGR_EFI(r)) | ||||||
| #define HAS_REGULAR_EFI(r)  (r.has_efi & 0x7E) | #define HAS_REGULAR_EFI(r)  (r.has_efi & 0x7FFE) | ||||||
| #define HAS_WININST(r)      (r.wininst_index != 0) | #define HAS_WININST(r)      (r.wininst_index != 0) | ||||||
| #define HAS_WINPE(r)        (((r.winpe & WINPE_I386) == WINPE_I386)||((r.winpe & WINPE_AMD64) == WINPE_AMD64)||((r.winpe & WINPE_MININT) == WINPE_MININT)) | #define HAS_WINPE(r)        (((r.winpe & WINPE_I386) == WINPE_I386)||((r.winpe & WINPE_AMD64) == WINPE_AMD64)||((r.winpe & WINPE_MININT) == WINPE_MININT)) | ||||||
| #define HAS_WINDOWS(r)      (HAS_BOOTMGR(r) || (r.uses_minint) || HAS_WINPE(r)) | #define HAS_WINDOWS(r)      (HAS_BOOTMGR(r) || (r.uses_minint) || HAS_WINPE(r)) | ||||||
|  | @ -342,7 +342,7 @@ typedef struct { | ||||||
| 	BOOLEAN is_windows_img; | 	BOOLEAN is_windows_img; | ||||||
| 	BOOLEAN disable_iso; | 	BOOLEAN disable_iso; | ||||||
| 	uint16_t winpe; | 	uint16_t winpe; | ||||||
| 	uint8_t has_efi; | 	uint16_t has_efi; | ||||||
| 	uint8_t has_md5sum; | 	uint8_t has_md5sum; | ||||||
| 	uint8_t wininst_index; | 	uint8_t wininst_index; | ||||||
| 	uint8_t has_symlinks; | 	uint8_t has_symlinks; | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								src/rufus.rc
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								src/rufus.rc
									
										
									
									
									
								
							|  | @ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL | ||||||
| IDD_DIALOG DIALOGEX 12, 12, 232, 326 | IDD_DIALOG DIALOGEX 12, 12, 232, 326 | ||||||
| STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||||
| EXSTYLE WS_EX_ACCEPTFILES | EXSTYLE WS_EX_ACCEPTFILES | ||||||
| CAPTION "Rufus 3.12.1691" | CAPTION "Rufus 3.12.1692" | ||||||
| FONT 9, "Segoe UI Symbol", 400, 0, 0x0 | FONT 9, "Segoe UI Symbol", 400, 0, 0x0 | ||||||
| BEGIN | BEGIN | ||||||
|     LTEXT           "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP |     LTEXT           "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP | ||||||
|  | @ -395,8 +395,8 @@ END | ||||||
| // | // | ||||||
| 
 | 
 | ||||||
| VS_VERSION_INFO VERSIONINFO | VS_VERSION_INFO VERSIONINFO | ||||||
|  FILEVERSION 3,12,1691,0 |  FILEVERSION 3,12,1692,0 | ||||||
|  PRODUCTVERSION 3,12,1691,0 |  PRODUCTVERSION 3,12,1692,0 | ||||||
|  FILEFLAGSMASK 0x3fL |  FILEFLAGSMASK 0x3fL | ||||||
| #ifdef _DEBUG | #ifdef _DEBUG | ||||||
|  FILEFLAGS 0x1L |  FILEFLAGS 0x1L | ||||||
|  | @ -414,13 +414,13 @@ BEGIN | ||||||
|             VALUE "Comments", "https://rufus.ie" |             VALUE "Comments", "https://rufus.ie" | ||||||
|             VALUE "CompanyName", "Akeo Consulting" |             VALUE "CompanyName", "Akeo Consulting" | ||||||
|             VALUE "FileDescription", "Rufus" |             VALUE "FileDescription", "Rufus" | ||||||
|             VALUE "FileVersion", "3.12.1691" |             VALUE "FileVersion", "3.12.1692" | ||||||
|             VALUE "InternalName", "Rufus" |             VALUE "InternalName", "Rufus" | ||||||
|             VALUE "LegalCopyright", "© 2011-2020 Pete Batard (GPL v3)" |             VALUE "LegalCopyright", "© 2011-2020 Pete Batard (GPL v3)" | ||||||
|             VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html" |             VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html" | ||||||
|             VALUE "OriginalFilename", "rufus-3.12.exe" |             VALUE "OriginalFilename", "rufus-3.12.exe" | ||||||
|             VALUE "ProductName", "Rufus" |             VALUE "ProductName", "Rufus" | ||||||
|             VALUE "ProductVersion", "3.12.1691" |             VALUE "ProductVersion", "3.12.1692" | ||||||
|         END |         END | ||||||
|     END |     END | ||||||
|     BLOCK "VarFileInfo" |     BLOCK "VarFileInfo" | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								src/ui.c
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								src/ui.c
									
										
									
									
									
								
							|  | @ -76,7 +76,7 @@ void SetAccessibleName(HWND hCtrl, const char* name) | ||||||
| 
 | 
 | ||||||
| 	SetWindowTextW(hCtrl, wname); | 	SetWindowTextW(hCtrl, wname); | ||||||
| 	if (pfaps == NULL) | 	if (pfaps == NULL) | ||||||
| 		CoCreateInstance(&CLSID_AccPropServices, NULL, CLSCTX_INPROC, &IID_IAccPropServices, (LPVOID)&pfaps); | 		IGNORE_RETVAL(CoCreateInstance(&CLSID_AccPropServices, NULL, CLSCTX_INPROC, &IID_IAccPropServices, (LPVOID)&pfaps)); | ||||||
| 	if (pfaps != NULL) { | 	if (pfaps != NULL) { | ||||||
| 		IAccPropServices_ClearHwndProps(pfaps, hCtrl, OBJID_CLIENT, CHILDID_SELF, props, ARRAYSIZE(props)); | 		IAccPropServices_ClearHwndProps(pfaps, hCtrl, OBJID_CLIENT, CHILDID_SELF, props, ARRAYSIZE(props)); | ||||||
| 		IAccPropServices_SetHwndPropStr(pfaps, hCtrl, OBJID_CLIENT, CHILDID_SELF, Name_Property_GUID, wname); | 		IAccPropServices_SetHwndPropStr(pfaps, hCtrl, OBJID_CLIENT, CHILDID_SELF, Name_Property_GUID, wname); | ||||||
|  |  | ||||||
|  | @ -307,7 +307,7 @@ BOOL IsBootableImage(const char* path) | ||||||
| 	} | 	} | ||||||
| 	img_report.image_size = (uint64_t)liImageSize.QuadPart; | 	img_report.image_size = (uint64_t)liImageSize.QuadPart; | ||||||
| 	size = sizeof(wim_magic); | 	size = sizeof(wim_magic); | ||||||
| 	SetFilePointerEx(handle, ptr, NULL, FILE_BEGIN); | 	IGNORE_RETVAL(SetFilePointerEx(handle, ptr, NULL, FILE_BEGIN)); | ||||||
| 	img_report.is_windows_img = ReadFile(handle, &wim_magic, size, &size, NULL) && (wim_magic == WIM_MAGIC); | 	img_report.is_windows_img = ReadFile(handle, &wim_magic, size, &size, NULL) && (wim_magic == WIM_MAGIC); | ||||||
| 	if (img_report.is_windows_img) | 	if (img_report.is_windows_img) | ||||||
| 		goto out; | 		goto out; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue