mirror of
				https://github.com/pbatard/rufus.git
				synced 2024-08-14 23:57:05 +00:00 
			
		
		
		
	[syslinux] fix support for recent Syslinux versions
* Detect Syslinux version from isolinux.bin (Closes #272) * Download required Syslinux v5+ files where needed (Closes #165) * Also fix an issue where using a Syslinux based ISO didn't switch to ISO mode * Also alter DownloadFile and ExtractISOFile to return a size
This commit is contained in:
		
							parent
							
								
									7e81ec2838
								
							
						
					
					
						commit
						299506056a
					
				
					 9 changed files with 352 additions and 162 deletions
				
			
		|  | @ -6,6 +6,11 @@ the same changes. | ||||||
| Remember to also update the version number for your translation ('v x.y.z') | Remember to also update the version number for your translation ('v x.y.z') | ||||||
| once you have matched all the changes that occurred for the en-US translation. | once you have matched all the changes that occurred for the en-US translation. | ||||||
| 
 | 
 | ||||||
|  | o Version 1.0.8 (2014.01.21) | ||||||
|  |   - MSG_234: 'v%d' is replaced with '%s' (change already applied to existing translations) | ||||||
|  |   - *NEW* MSG_114 "This image uses Syslinux %s but this application only includes Syslinux %s | ||||||
|  |   - *NEW* MSG_115 "Download required" | ||||||
|  | 
 | ||||||
| o Version 1.0.7 (2014.01.01) | o Version 1.0.7 (2014.01.01) | ||||||
|   - Added MSG_092 again |   - Added MSG_092 again | ||||||
|   - Added English example for OK button in About box (IDOK) |   - Added English example for OK button in About box (IDOK) | ||||||
|  |  | ||||||
|  | @ -286,7 +286,14 @@ t MSG_111 "Incompatible Cluster size" | ||||||
| t MSG_112 "Formatting a large UDF volumes can take a lot of time. At USB 2.0 speeds, the estimated formatting " | t MSG_112 "Formatting a large UDF volumes can take a lot of time. At USB 2.0 speeds, the estimated formatting " | ||||||
| 	"duration is %d:%02d, during which the progress bar will appear frozen. Please be patient!" | 	"duration is %d:%02d, during which the progress bar will appear frozen. Please be patient!" | ||||||
| t MSG_113 "Large UDF volume" | t MSG_113 "Large UDF volume" | ||||||
| 
 | t MSG_114 "This image uses Syslinux %s but this application only includes Syslinux %s.\n\n" | ||||||
|  | 	"As new versions of Syslinux are not compatible with one another, and it is not possible to " | ||||||
|  | 	"include them all, Rufus needs to download two additional files ('ldlinux.sys' and 'ldlinux.bss'):\n" | ||||||
|  | 	"- Select 'Yes' to connect to the internet and download these files\n" | ||||||
|  | 	"- Select 'No' to cancel the operation\n\n" | ||||||
|  | 	"Note: The files will be downloaded in the current directory and once " | ||||||
|  | 	"they exist there, they will be reused automatically.\n" | ||||||
|  | t MSG_115 "Download required" | ||||||
| # Tootips | # Tootips | ||||||
| # Partition Scheme and Target Type | # Partition Scheme and Target Type | ||||||
| t MSG_150 "Usually the safest choice. If you have an UEFI computer and want to install " | t MSG_150 "Usually the safest choice. If you have an UEFI computer and want to install " | ||||||
|  | @ -384,8 +391,8 @@ t MSG_230 "Copying DOS files..." | ||||||
| t MSG_231 "Copying ISO files..." | t MSG_231 "Copying ISO files..." | ||||||
| t MSG_232 "Win7 EFI boot setup (this may take a while)..." | t MSG_232 "Win7 EFI boot setup (this may take a while)..." | ||||||
| t MSG_233 "Finalizing, please wait..." | t MSG_233 "Finalizing, please wait..." | ||||||
| # Takes the Syslinux version as parameter, eg. "Installing Syslinux v5..." | # Takes a Syslinux version as parameter, eg. "Installing Syslinux v5.10..." | ||||||
| t MSG_234 "Installing Syslinux v%d..." | t MSG_234 "Installing Syslinux %s..." | ||||||
| # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | ||||||
| t MSG_235 "Bad Blocks: PASS %d/%d - %0.2f%% (%d/%d/%d errors)" | t MSG_235 "Bad Blocks: PASS %d/%d - %0.2f%% (%d/%d/%d errors)" | ||||||
| t MSG_236 "Bad Blocks: Testing with random pattern" | t MSG_236 "Bad Blocks: Testing with random pattern" | ||||||
|  | @ -731,7 +738,7 @@ t MSG_231 "复制 ISO 文件..." | ||||||
| t MSG_232 "设置 Win7 EFI 启动,请耐心等待..." | t MSG_232 "设置 Win7 EFI 启动,请耐心等待..." | ||||||
| t MSG_233 "完成中,请稍等候..." | t MSG_233 "完成中,请稍等候..." | ||||||
| # Takes the Syslinux version as parameter. | # Takes the Syslinux version as parameter. | ||||||
| t MSG_234 "安装 Syslinux v%d..." | t MSG_234 "安装 Syslinux %s..." | ||||||
| # Bad blocks status. | # Bad blocks status. | ||||||
| t MSG_235 "检查坏块:第 %d/%d 遍 - %0.2f%% (%d/%d/%d 错误)" | t MSG_235 "检查坏块:第 %d/%d 遍 - %0.2f%% (%d/%d/%d 错误)" | ||||||
| t MSG_236 "检查坏块:测试中 - 随机模式" | t MSG_236 "检查坏块:测试中 - 随机模式" | ||||||
|  | @ -1078,7 +1085,7 @@ t MSG_231 "複製 ISO 檔案..." | ||||||
| t MSG_232 "建置 Win7 EFI 開機架構 (可能要一段時間,請耐心等候)..." | t MSG_232 "建置 Win7 EFI 開機架構 (可能要一段時間,請耐心等候)..." | ||||||
| t MSG_233 "收尾中,請稍候..." | t MSG_233 "收尾中,請稍候..." | ||||||
| # Takes the Syslinux version as paramete. eg. "Installing Syslinux v5..." | # Takes the Syslinux version as paramete. eg. "Installing Syslinux v5..." | ||||||
| t MSG_234 "Syslinux v%d 安裝中..." | t MSG_234 "Syslinux %s 安裝中..." | ||||||
| # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | ||||||
| t MSG_235 "損毀磁區: 第 %d/%d 回 - %0.2f%% (%d/%d/%d 錯誤)" | t MSG_235 "損毀磁區: 第 %d/%d 回 - %0.2f%% (%d/%d/%d 錯誤)" | ||||||
| t MSG_236 "損毀磁區: 掃描中 (隨機模式)" | t MSG_236 "損毀磁區: 掃描中 (隨機模式)" | ||||||
|  | @ -1458,7 +1465,7 @@ t MSG_231 "ISO bestanden aan het kopiëren..." | ||||||
| t MSG_232 "Win7 EFI opstart setup (Dit kan een tijdje duren)..." | t MSG_232 "Win7 EFI opstart setup (Dit kan een tijdje duren)..." | ||||||
| t MSG_233 "Finaliseren, een moment geduld a.u.b..." | t MSG_233 "Finaliseren, een moment geduld a.u.b..." | ||||||
| # Takes the Syslinux version as paramete. eg. "Installing Syslinux v5..." | # Takes the Syslinux version as paramete. eg. "Installing Syslinux v5..." | ||||||
| t MSG_234 "Bezig met installeren Syslinux v%d..." | t MSG_234 "Bezig met installeren Syslinux %s..." | ||||||
| # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | ||||||
| t MSG_235 "Slechte Blokken: Ronde %d/%d - %0.2f%% (%d/%d/%d fouten)" | t MSG_235 "Slechte Blokken: Ronde %d/%d - %0.2f%% (%d/%d/%d fouten)" | ||||||
| t MSG_236 "Slechte Blokken: Testen met willekeurig patroon" | t MSG_236 "Slechte Blokken: Testen met willekeurig patroon" | ||||||
|  | @ -1698,7 +1705,7 @@ t MSG_102 "Votre plateforme ne peut pas extraire les fichiers depuis les archive | ||||||
| 	"est nécéssaire pour créer des médias USB démarrable avec EFI pour Windows 7/8 ou Windows Vista. Vous pouvez addresser " | 	"est nécéssaire pour créer des médias USB démarrable avec EFI pour Windows 7/8 ou Windows Vista. Vous pouvez addresser " | ||||||
| 	"ce problème en téléchargeant une version récente de l'utilitaire 7-Zip.\nVoulez-vous visiter la page de téléchargements de 7-zip?" | 	"ce problème en téléchargeant une version récente de l'utilitaire 7-Zip.\nVoulez-vous visiter la page de téléchargements de 7-zip?" | ||||||
| t MSG_103 "Télécharger %s?" | t MSG_103 "Télécharger %s?" | ||||||
| t MSG_104 "Syslinux v5.0 ou plus récent requiert l'installtion d'un fichier '%s'.\n" | t MSG_104 "Syslinux v5.0 ou plus récent requiert l'installation d'un fichier '%s'.\n" | ||||||
| 	"Puisque ce fichier fait plus de 100 Ko et est toujours présent sur les images ISO à base de Syslinux v5+, " | 	"Puisque ce fichier fait plus de 100 Ko et est toujours présent sur les images ISO à base de Syslinux v5+, " | ||||||
| 	"il n'est pas inclus dans l'application.\n\nRufus peut télécharger ce fichier pour vous:\n" | 	"il n'est pas inclus dans l'application.\n\nRufus peut télécharger ce fichier pour vous:\n" | ||||||
| 	"- Choisissez 'Oui' pour télécharger le fichier depuis Internet\n" | 	"- Choisissez 'Oui' pour télécharger le fichier depuis Internet\n" | ||||||
|  | @ -1717,6 +1724,14 @@ t MSG_111 "Taille de clusters incompatible" | ||||||
| t MSG_112 "Le formattage d'un volume UDF de grande taille peut prendre beaucoup de temps. Aux vitesses USB 2.0, " | t MSG_112 "Le formattage d'un volume UDF de grande taille peut prendre beaucoup de temps. Aux vitesses USB 2.0, " | ||||||
| 	"la durée de formattage estimée est %d:%02d, pendant laquelle la barre de progrès semblera gelée. Veuillez être patient !" | 	"la durée de formattage estimée est %d:%02d, pendant laquelle la barre de progrès semblera gelée. Veuillez être patient !" | ||||||
| t MSG_113 "Volume UDF de grand taille" | t MSG_113 "Volume UDF de grand taille" | ||||||
|  | t MSG_114 "Cette image utilise Syslinux %s mais l'application inclus seulement Syslinux %s.\n\n" | ||||||
|  | 	"Comme les nouvelles versions de Syslinux sont incompatibles, et il n'est pas possible toutes " | ||||||
|  | 	"les inclure, Rufus doit télécharger 2 fichiers supplémentaires ('ldlinux.sys' et 'ldlinux.bss'):\n" | ||||||
|  | 	"- Choisissez 'Oui' pour télécharger ces fichier depuis Internet\n" | ||||||
|  | 	"- Choisissez 'Non' pour annuler l'opération\n" | ||||||
|  | 	"Note: Ces fichier seront téléchargés dans le répertoire courrant et une fois qu'ils" | ||||||
|  | 	"existent à cet endroit, il seront réutilisés automatiquement." | ||||||
|  | t MSG_115 "Téléchargement nécessaire" | ||||||
| 
 | 
 | ||||||
| # Tootips | # Tootips | ||||||
| t MSG_150 "Ce choix est le plus sûr. Mais si vous possédez un ordinateur à base de UEFI et voulez installer " | t MSG_150 "Ce choix est le plus sûr. Mais si vous possédez un ordinateur à base de UEFI et voulez installer " | ||||||
|  | @ -1804,7 +1819,7 @@ t MSG_230 "Copie des fichiers DOS..." | ||||||
| t MSG_231 "Copie des fichiers ISO..." | t MSG_231 "Copie des fichiers ISO..." | ||||||
| t MSG_232 "Ecriture boot Win7 EFI (peut prendre du temps)..." | t MSG_232 "Ecriture boot Win7 EFI (peut prendre du temps)..." | ||||||
| t MSG_233 "Finalisation, veuillez patienter..." | t MSG_233 "Finalisation, veuillez patienter..." | ||||||
| t MSG_234 "Installation de Syslinux v%d..." | t MSG_234 "Installation de Syslinux %s..." | ||||||
| t MSG_235 "Défauts: PASSE %d/%d - %0.2f%% (%d/%d/%d erreurs)" | t MSG_235 "Défauts: PASSE %d/%d - %0.2f%% (%d/%d/%d erreurs)" | ||||||
| t MSG_236 "Défauts: Test avec motif aléatoire" | t MSG_236 "Défauts: Test avec motif aléatoire" | ||||||
| t MSG_237 "Défauts: Test avec motif 0x%02X" | t MSG_237 "Défauts: Test avec motif 0x%02X" | ||||||
|  | @ -2173,7 +2188,7 @@ t MSG_231 "Kopiere ISO-Dateien..." | ||||||
| t MSG_232 "Win7 EFI Boot setup (kann etwas dauern)..." | t MSG_232 "Win7 EFI Boot setup (kann etwas dauern)..." | ||||||
| t MSG_233 "Abschließen, bitte warten..." | t MSG_233 "Abschließen, bitte warten..." | ||||||
| # Takes the Syslinux version as parameter, eg. "Installing Syslinux v5..." | # Takes the Syslinux version as parameter, eg. "Installing Syslinux v5..." | ||||||
| t MSG_234 "Installiere Syslinux v%d..." | t MSG_234 "Installiere Syslinux %s..." | ||||||
| # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | ||||||
| t MSG_235 "Fehlerhafte Blöcke: Durchlauf %d/%d - %0.2f%% (%d/%d/%d Fehler)" | t MSG_235 "Fehlerhafte Blöcke: Durchlauf %d/%d - %0.2f%% (%d/%d/%d Fehler)" | ||||||
| t MSG_236 "Fehlerhafte Blöcke: Prüfe mit zufälligen Mustern" | t MSG_236 "Fehlerhafte Blöcke: Prüfe mit zufälligen Mustern" | ||||||
|  | @ -2582,7 +2597,7 @@ t MSG_231 "Αντιγραφή αρχείων ISO..." | ||||||
| t MSG_232 "Ρυθμίσεις εκκίνησης Win7 EFI (η διαδικασία ίσως διαρκέσει αρκετά)..." | t MSG_232 "Ρυθμίσεις εκκίνησης Win7 EFI (η διαδικασία ίσως διαρκέσει αρκετά)..." | ||||||
| t MSG_233 "Οριστικοποίηση, παρακαλώ περιμένετε..." | t MSG_233 "Οριστικοποίηση, παρακαλώ περιμένετε..." | ||||||
| # Takes the Syslinux version as paramete. eg. "Installing Syslinux v5..." | # Takes the Syslinux version as paramete. eg. "Installing Syslinux v5..." | ||||||
| t MSG_234 "Εγκατάσταση Syslinux v%d..." | t MSG_234 "Εγκατάσταση Syslinux %s..." | ||||||
| # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | ||||||
| t MSG_235 "Κατεστραμμένοι τομείς: πέρασμα %d/%d - %0.2f%% (%d/%d/%d σφάλματα)" | t MSG_235 "Κατεστραμμένοι τομείς: πέρασμα %d/%d - %0.2f%% (%d/%d/%d σφάλματα)" | ||||||
| t MSG_236 "Κατεστραμμένοι τομείς: Έλεγχος με τυχαίο διάταξη" | t MSG_236 "Κατεστραμμένοι τομείς: Έλεγχος με τυχαίο διάταξη" | ||||||
|  | @ -2940,7 +2955,7 @@ t MSG_231 "ISO fájlok másolása..." | ||||||
| t MSG_232 "Win7 EFI boot telepítő (ez eltarthat egy kis ideig)..." | t MSG_232 "Win7 EFI boot telepítő (ez eltarthat egy kis ideig)..." | ||||||
| t MSG_233 "Véglegesítés, kérlek, várj..." | t MSG_233 "Véglegesítés, kérlek, várj..." | ||||||
| # Takes the Syslinux version as parameter, eg. "Installing Syslinux v5..." | # Takes the Syslinux version as parameter, eg. "Installing Syslinux v5..." | ||||||
| t MSG_234 "Syslinux v%d telepítése..." | t MSG_234 "Syslinux %s telepítése..." | ||||||
| # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | ||||||
| t MSG_235 "Hibás blokkok: Próbálkozás %d/%d - %0.2f%% (%d/%d/%d hiba)" | t MSG_235 "Hibás blokkok: Próbálkozás %d/%d - %0.2f%% (%d/%d/%d hiba)" | ||||||
| t MSG_236 "Hibás blokkok: Véletlenszerű paraméterrel való tesztelés" | t MSG_236 "Hibás blokkok: Véletlenszerű paraméterrel való tesztelés" | ||||||
|  | @ -3337,7 +3352,7 @@ t MSG_231 "Menyalin file ISO..." | ||||||
| t MSG_232 "Konfigurasi Win7 EFI boot (ini mungkin memakan waktu cukup lama)..." | t MSG_232 "Konfigurasi Win7 EFI boot (ini mungkin memakan waktu cukup lama)..." | ||||||
| t MSG_233 "Menyelesaikan, harap tunggu..." | t MSG_233 "Menyelesaikan, harap tunggu..." | ||||||
| # Takes the Syslinux version as parameter, eg. "Installing Syslinux v5..." | # Takes the Syslinux version as parameter, eg. "Installing Syslinux v5..." | ||||||
| t MSG_234 "Memasang Syslinux v%d..." | t MSG_234 "Memasang Syslinux %s..." | ||||||
| # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | ||||||
| t MSG_235 "Blok Buruk: LULUS %d/%d - %0.2f%% (%d/%d/%d kerusakan)" | t MSG_235 "Blok Buruk: LULUS %d/%d - %0.2f%% (%d/%d/%d kerusakan)" | ||||||
| t MSG_236 "Blok Buruk: Pengujian dengan pola acak" | t MSG_236 "Blok Buruk: Pengujian dengan pola acak" | ||||||
|  | @ -3699,7 +3714,7 @@ t MSG_230 "Copia file DOS..." | ||||||
| t MSG_231 "Copia file immagine ISO..." | t MSG_231 "Copia file immagine ISO..." | ||||||
| t MSG_232 "Impostazione avvio EFI Windows 7 (potrebbe richiedere del tempo)..." | t MSG_232 "Impostazione avvio EFI Windows 7 (potrebbe richiedere del tempo)..." | ||||||
| t MSG_233 "Finalizzazione..." | t MSG_233 "Finalizzazione..." | ||||||
| t MSG_234 "Installazione Syslinux v. %d..." | t MSG_234 "Installazione Syslinux %s..." | ||||||
| t MSG_235 "Blocchi danneggiati: pattern %d/%d - %0.2f%% (errori %d/%d/%d)" | t MSG_235 "Blocchi danneggiati: pattern %d/%d - %0.2f%% (errori %d/%d/%d)" | ||||||
| t MSG_236 "Blocchi danneggiati: test con pattern casuali" | t MSG_236 "Blocchi danneggiati: test con pattern casuali" | ||||||
| t MSG_237 "Blocchi danneggiati: testing con pattern 0x%02X" | t MSG_237 "Blocchi danneggiati: testing con pattern 0x%02X" | ||||||
|  | @ -4070,7 +4085,7 @@ t MSG_231 "ISO 파일을 복사..." | ||||||
| t MSG_232 "WIN7 EFI 부팅 설정 (잠시만)..." | t MSG_232 "WIN7 EFI 부팅 설정 (잠시만)..." | ||||||
| t MSG_233 "마무리 하는 중... 잠시만..." | t MSG_233 "마무리 하는 중... 잠시만..." | ||||||
| # Takes the Syslinux version as parameter, eg. "Installing Syslinux v5..." | # Takes the Syslinux version as parameter, eg. "Installing Syslinux v5..." | ||||||
| t MSG_234 "Syslinux v%d를 설치..." | t MSG_234 "Syslinux %s를 설치..." | ||||||
| # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | ||||||
| t MSG_235 "배드 섹터: PASS %d/%d - %0.2f%% (%d/%d/%d errors)" | t MSG_235 "배드 섹터: PASS %d/%d - %0.2f%% (%d/%d/%d errors)" | ||||||
| t MSG_236 "배드 섹터: 랜덤 패턴 테스트" | t MSG_236 "배드 섹터: 랜덤 패턴 테스트" | ||||||
|  | @ -4468,7 +4483,7 @@ t MSG_231 "Kopijuojami ISO failai..." | ||||||
| t MSG_232 "Win7 EFI įkelties sąranka (gali užtrukti)..." | t MSG_232 "Win7 EFI įkelties sąranka (gali užtrukti)..." | ||||||
| t MSG_233 "Baigiama, prašome palaukti..." | t MSG_233 "Baigiama, prašome palaukti..." | ||||||
| # Takes the Syslinux version as parameter, eg. "Installing Syslinux v5..." | # Takes the Syslinux version as parameter, eg. "Installing Syslinux v5..." | ||||||
| t MSG_234 "Įdiegiama Syslinux v%d..." | t MSG_234 "Įdiegiama Syslinux %s..." | ||||||
| # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | ||||||
| t MSG_235 "Blogi blokai: BANDYMAS %d/%d - %0.2f%% (%d/%d/%d klaidos)" | t MSG_235 "Blogi blokai: BANDYMAS %d/%d - %0.2f%% (%d/%d/%d klaidos)" | ||||||
| t MSG_236 "Blogi blokai: tikrinama su atsitiktiniu šablonu" | t MSG_236 "Blogi blokai: tikrinama su atsitiktiniu šablonu" | ||||||
|  | @ -4870,7 +4885,7 @@ t MSG_231 "Menyalin fail ISO..." | ||||||
| t MSG_232 "Persediaan boot EFI Win7 (ini mungkin mengambil sedikit masa)..." | t MSG_232 "Persediaan boot EFI Win7 (ini mungkin mengambil sedikit masa)..." | ||||||
| t MSG_233 "Memuktamadkan, sila tunggu..." | t MSG_233 "Memuktamadkan, sila tunggu..." | ||||||
| # Takes the Syslinux version as parameter, eg. "Installing Syslinux v5..." | # Takes the Syslinux version as parameter, eg. "Installing Syslinux v5..." | ||||||
| t MSG_234 "Memasang Syslinux v%d..." | t MSG_234 "Memasang Syslinux %s..." | ||||||
| # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | ||||||
| t MSG_235 "Blok rosak: PASS %d/%d - %0.2f%% (%d/%d/%d errors)" | t MSG_235 "Blok rosak: PASS %d/%d - %0.2f%% (%d/%d/%d errors)" | ||||||
| t MSG_236 "Blok rosak: menguji dengan corak rawak" | t MSG_236 "Blok rosak: menguji dengan corak rawak" | ||||||
|  | @ -5270,7 +5285,7 @@ t MSG_231 "Kopiowanie plików ISO..." | ||||||
| t MSG_232 "Ustawianie bootowania Win7 EFI (to może chwilę potrwać)..." | t MSG_232 "Ustawianie bootowania Win7 EFI (to może chwilę potrwać)..." | ||||||
| t MSG_233 "Finalizacja, proszę czekać..." | t MSG_233 "Finalizacja, proszę czekać..." | ||||||
| # Takes the Syslinux version as paramete. eg. "Installing Syslinux v5..." | # Takes the Syslinux version as paramete. eg. "Installing Syslinux v5..." | ||||||
| t MSG_234 "Instalowanie Syslinux v%d..." | t MSG_234 "Instalowanie Syslinux %s..." | ||||||
| # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | ||||||
| t MSG_235 "Błędne Sektory: UKOŃCZONO %d/%d - %0.2f%% (%d/%d/%d błędów)" | t MSG_235 "Błędne Sektory: UKOŃCZONO %d/%d - %0.2f%% (%d/%d/%d błędów)" | ||||||
| t MSG_236 "Błędne Sektory: Testowanie z losowym wzorem" | t MSG_236 "Błędne Sektory: Testowanie z losowym wzorem" | ||||||
|  | @ -5679,7 +5694,7 @@ t MSG_231 "A copiar arquivos ISO..." | ||||||
| t MSG_232 "Configuração de arranque Win7 EFI (pode demorar um pouco)..." | t MSG_232 "Configuração de arranque Win7 EFI (pode demorar um pouco)..." | ||||||
| t MSG_233 "A finalizar, por favor espere..." | t MSG_233 "A finalizar, por favor espere..." | ||||||
| # Takes the Syslinux version as parameter, eg. "Installing Syslinux v5..." | # Takes the Syslinux version as parameter, eg. "Installing Syslinux v5..." | ||||||
| t MSG_234 "A instalar Syslinux v%d..." | t MSG_234 "A instalar Syslinux %s..." | ||||||
| # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | ||||||
| t MSG_235 "Blocos com erro: PASSO %d/%d - %0.2f%% (%d/%d/%d erros)" | t MSG_235 "Blocos com erro: PASSO %d/%d - %0.2f%% (%d/%d/%d erros)" | ||||||
| t MSG_236 "Blocos com erro: A verificar com teste padrão" | t MSG_236 "Blocos com erro: A verificar com teste padrão" | ||||||
|  | @ -6034,7 +6049,7 @@ t MSG_230 "Copierea fişierului DOS..." | ||||||
| t MSG_231 "Copierea fişierului imagine ISO..." | t MSG_231 "Copierea fişierului imagine ISO..." | ||||||
| t MSG_232 "Setarea UEFI de boot Windows 7 (poate dura ceva timp)..." | t MSG_232 "Setarea UEFI de boot Windows 7 (poate dura ceva timp)..." | ||||||
| t MSG_233 "Finalizarea..." | t MSG_233 "Finalizarea..." | ||||||
| t MSG_234 "Instalarea Syslinux v. %d..." | t MSG_234 "Instalarea Syslinux %s..." | ||||||
| t MSG_235 "Blocuri defecte: model %d/%d - %0.2f%% (erori %d/%d/%d)" | t MSG_235 "Blocuri defecte: model %d/%d - %0.2f%% (erori %d/%d/%d)" | ||||||
| t MSG_236 "Blocuri defecte: testarea cu modele aleatoare" | t MSG_236 "Blocuri defecte: testarea cu modele aleatoare" | ||||||
| t MSG_237 "Blocuri defecte: testarea cu model 0x%02X" | t MSG_237 "Blocuri defecte: testarea cu model 0x%02X" | ||||||
|  | @ -6422,7 +6437,7 @@ t MSG_231 "Копирование ISO-файлов..." | ||||||
| t MSG_232 "Настройка Win7 EFI boot (Это может занять время)..." | t MSG_232 "Настройка Win7 EFI boot (Это может занять время)..." | ||||||
| t MSG_233 "Завершение, пожалуйста, ждите..." | t MSG_233 "Завершение, пожалуйста, ждите..." | ||||||
| # Takes the Syslinux version as paramete. eg. "Installing Syslinux v5..." | # Takes the Syslinux version as paramete. eg. "Installing Syslinux v5..." | ||||||
| t MSG_234 "Установка Syslinux v%d..." | t MSG_234 "Установка Syslinux %s..." | ||||||
| # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | ||||||
| t MSG_235 "Плохие блоки: Проход %d/%d - %0.2f%% (%d/%d/%d ошибок)" | t MSG_235 "Плохие блоки: Проход %d/%d - %0.2f%% (%d/%d/%d ошибок)" | ||||||
| t MSG_236 "Плохие блоки: Тестирование случайным образом" | t MSG_236 "Плохие блоки: Тестирование случайным образом" | ||||||
|  | @ -6808,7 +6823,7 @@ t MSG_231 "Kopiram ISO datoteke…" | ||||||
| t MSG_232 "Pripravljam pogon za zagon Windows 7 na EFI (to lahko traja)…" | t MSG_232 "Pripravljam pogon za zagon Windows 7 na EFI (to lahko traja)…" | ||||||
| t MSG_233 "Zaključujem; prosim, počakajte…" | t MSG_233 "Zaključujem; prosim, počakajte…" | ||||||
| # Takes the Syslinux version as parameter, eg. "Installing Syslinux v5…" | # Takes the Syslinux version as parameter, eg. "Installing Syslinux v5…" | ||||||
| t MSG_234 "Nameščam Syslinux v%d…" | t MSG_234 "Nameščam Syslinux %s…" | ||||||
| # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | ||||||
| t MSG_235 "Slabi bloki: prehod %d/%d - %0.2f%% (%d/%d/%d napak)" | t MSG_235 "Slabi bloki: prehod %d/%d - %0.2f%% (%d/%d/%d napak)" | ||||||
| t MSG_236 "Slabi bloki: testiram z naključnim vzorcem" | t MSG_236 "Slabi bloki: testiram z naključnim vzorcem" | ||||||
|  | @ -7210,7 +7225,7 @@ t MSG_231 "Copiando archivos ISO..." | ||||||
| t MSG_232 "Configuración de arranque Win7 EFI (puede tardar un rato)..." | t MSG_232 "Configuración de arranque Win7 EFI (puede tardar un rato)..." | ||||||
| t MSG_233 "Finalización, por favor espere..." | t MSG_233 "Finalización, por favor espere..." | ||||||
| # Takes the Syslinux version as parameter, eg. "Installing Syslinux v5..." | # Takes the Syslinux version as parameter, eg. "Installing Syslinux v5..." | ||||||
| t MSG_234 "Instalando Syslinux v%d..." | t MSG_234 "Instalando Syslinux %s..." | ||||||
| # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | ||||||
| t MSG_235 "Bloques dañados: PASO %d/%d - %0.2f%% (%d/%d/%d errores)" | t MSG_235 "Bloques dañados: PASO %d/%d - %0.2f%% (%d/%d/%d errores)" | ||||||
| t MSG_236 "Bloques dañados: Probando con patrones aleatorios" | t MSG_236 "Bloques dañados: Probando con patrones aleatorios" | ||||||
|  | @ -7605,7 +7620,7 @@ t MSG_231 "ISO Dosyaları Kopyalanıyor..." | ||||||
| t MSG_232 "Win7 EFI Açılış Kurulumu (Biraz zaman alabilir)..." | t MSG_232 "Win7 EFI Açılış Kurulumu (Biraz zaman alabilir)..." | ||||||
| t MSG_233 "Bitiriliyor, Lütfen Bekleyin..." | t MSG_233 "Bitiriliyor, Lütfen Bekleyin..." | ||||||
| # Takes the Syslinux version as parameter, eg. "Installing Syslinux v5..." | # Takes the Syslinux version as parameter, eg. "Installing Syslinux v5..." | ||||||
| t MSG_234 "Syslinux v%d Yükleniyor..." | t MSG_234 "Syslinux %s Yükleniyor..." | ||||||
| # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | # Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" | ||||||
| t MSG_235 "Hatalı Bloklar: Geçiş %d/%d - %0.2f%% (%d/%d/%d hata)" | t MSG_235 "Hatalı Bloklar: Geçiş %d/%d - %0.2f%% (%d/%d/%d hata)" | ||||||
| t MSG_236 "Hatalı Bloklar: Rasgele kalıpla deneniyor" | t MSG_236 "Hatalı Bloklar: Rasgele kalıpla deneniyor" | ||||||
|  |  | ||||||
							
								
								
									
										105
									
								
								src/iso.c
									
										
									
									
									
								
							
							
						
						
									
										105
									
								
								src/iso.c
									
										
									
									
									
								
							|  | @ -55,14 +55,16 @@ 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; | BOOL 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"; | ||||||
| static const char* ldlinux_name = "ldlinux.sys"; | static const char* ldlinux_name = "ldlinux.sys"; | ||||||
| static const char* syslinux_v5_file = "ldlinux.c32"; | static const char* ldlinux_c32 = "ldlinux.c32"; | ||||||
| static const char* efi_dirname = "/efi/boot"; | static const char* efi_dirname = "/efi/boot"; | ||||||
| static const char* isolinux_name[] = { "isolinux.cfg", "syslinux.cfg", "extlinux.conf"}; | static const char* syslinux_cfg[] = { "isolinux.cfg", "syslinux.cfg", "extlinux.conf"}; | ||||||
|  | static const char dot_isolinux_bin[] = ".\\isolinux.bin"; | ||||||
|  | static const char* isolinux_bin = &dot_isolinux_bin[2]; | ||||||
| static const char* pe_dirname[] = { "/i386", "/minint" }; | static const char* pe_dirname[] = { "/i386", "/minint" }; | ||||||
| static const char* pe_file[] = { "ntdetect.com", "setupldr.bin", "txtsetup.sif" }; | static const char* pe_file[] = { "ntdetect.com", "setupldr.bin", "txtsetup.sif" }; | ||||||
| static const char* reactos_name = "setupldr.sys"; // TODO: freeldr.sys doesn't seem to work
 | static const char* reactos_name = "setupldr.sys"; // TODO: freeldr.sys doesn't seem to work
 | ||||||
|  | @ -72,7 +74,7 @@ static const int64_t old_c32_threshold[NB_OLD_C32] = OLD_C32_THRESHOLD; | ||||||
| static uint8_t i_joliet_level = 0; | static uint8_t i_joliet_level = 0; | ||||||
| static uint64_t total_blocks, nb_blocks; | static uint64_t total_blocks, nb_blocks; | ||||||
| static BOOL scan_only = FALSE; | static BOOL scan_only = FALSE; | ||||||
| static StrArray config_path; | static StrArray config_path, isolinux_path; | ||||||
| 
 | 
 | ||||||
| // TODO: Timestamp & permissions preservation
 | // TODO: Timestamp & permissions preservation
 | ||||||
| 
 | 
 | ||||||
|  | @ -117,6 +119,7 @@ static void log_handler (cdio_log_level_t level, const char *message) | ||||||
| { | { | ||||||
| 	switch(level) { | 	switch(level) { | ||||||
| 	case CDIO_LOG_DEBUG: | 	case CDIO_LOG_DEBUG: | ||||||
|  | 		// TODO: use a registry key to enable libcdio debug?
 | ||||||
| 		return; | 		return; | ||||||
| 	default: | 	default: | ||||||
| 		uprintf("libcdio: %s\n", message); | 		uprintf("libcdio: %s\n", message); | ||||||
|  | @ -134,14 +137,14 @@ static BOOL check_iso_props(const char* psz_dirname, BOOL* is_syslinux_cfg, BOOL | ||||||
| 
 | 
 | ||||||
| 	// Check for an isolinux/syslinux config file anywhere
 | 	// Check for an isolinux/syslinux config file anywhere
 | ||||||
| 	*is_syslinux_cfg = FALSE; | 	*is_syslinux_cfg = FALSE; | ||||||
| 	for (i=0; i<ARRAYSIZE(isolinux_name); i++) { | 	for (i=0; i<ARRAYSIZE(syslinux_cfg); i++) { | ||||||
| 		if (safe_stricmp(psz_basename, isolinux_name[i]) == 0) | 		if (safe_stricmp(psz_basename, syslinux_cfg[i]) == 0) | ||||||
| 			*is_syslinux_cfg = TRUE; | 			*is_syslinux_cfg = TRUE; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Check for a syslinux v5.0 file anywhere
 | 	// Check for a syslinux v5.0+ file anywhere
 | ||||||
| 	if (safe_stricmp(psz_basename, syslinux_v5_file) == 0) { | 	if (safe_stricmp(psz_basename, ldlinux_c32) == 0) { | ||||||
| 		iso_report.has_syslinux_v5 = TRUE; | 		has_ldlinux_c32 = TRUE; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Check for an old incompatible c32 file anywhere
 | 	// Check for an old incompatible c32 file anywhere
 | ||||||
|  | @ -178,10 +181,14 @@ static BOOL check_iso_props(const char* psz_dirname, BOOL* is_syslinux_cfg, BOOL | ||||||
| 						iso_report.winpe |= (1<<i)<<(ARRAYSIZE(pe_dirname)*j); | 						iso_report.winpe |= (1<<i)<<(ARRAYSIZE(pe_dirname)*j); | ||||||
| 
 | 
 | ||||||
| 		if (*is_syslinux_cfg) { | 		if (*is_syslinux_cfg) { | ||||||
| 			iso_report.has_isolinux = TRUE; |  | ||||||
| 			// Maintain a list of all the isolinux/syslinux configs identified so far
 | 			// Maintain a list of all the isolinux/syslinux configs identified so far
 | ||||||
| 			StrArrayAdd(&config_path, psz_fullpath); | 			StrArrayAdd(&config_path, psz_fullpath); | ||||||
| 		} | 		} | ||||||
|  | 		if (safe_stricmp(psz_basename, isolinux_bin) == 0) { | ||||||
|  | 			// Maintain a list of all the isolinux.bin files found
 | ||||||
|  | 			StrArrayAdd(&isolinux_path, psz_fullpath); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		for (i=0; i<NB_OLD_C32; i++) { | 		for (i=0; i<NB_OLD_C32; i++) { | ||||||
| 			if (is_old_c32[i]) | 			if (is_old_c32[i]) | ||||||
| 				iso_report.has_old_c32[i] = TRUE; | 				iso_report.has_old_c32[i] = TRUE; | ||||||
|  | @ -465,18 +472,20 @@ out: | ||||||
| 
 | 
 | ||||||
| BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan) | BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan) | ||||||
| { | { | ||||||
| 	size_t i; | 	size_t i, k, size; | ||||||
| 	int j; | 	int j; | ||||||
|  | 	uint16_t sl_version; | ||||||
| 	FILE* fd; | 	FILE* fd; | ||||||
| 	BOOL r = FALSE; | 	BOOL r = FALSE; | ||||||
| 	iso9660_t* p_iso = NULL; | 	iso9660_t* p_iso = NULL; | ||||||
| 	udf_t* p_udf = NULL;  | 	udf_t* p_udf = NULL;  | ||||||
| 	udf_dirent_t* p_udf_root; | 	udf_dirent_t* p_udf_root; | ||||||
| 	LONG progress_style; | 	LONG progress_style; | ||||||
| 	char* tmp; | 	char *tmp, *buf; | ||||||
| 	char path[64]; | 	char path[MAX_PATH]; | ||||||
| 	const char* basedir[] = { "i386", "minint" }; | 	const char* basedir[] = { "i386", "minint" }; | ||||||
| 	const char* tmp_sif = ".\\txtsetup.sif~"; | 	const char* tmp_sif = ".\\txtsetup.sif~"; | ||||||
|  | 	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 ((src_iso == NULL) || (dest_dir == NULL)) | ||||||
|  | @ -489,8 +498,10 @@ BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan) | ||||||
| 	if (scan_only) { | 	if (scan_only) { | ||||||
| 		total_blocks = 0; | 		total_blocks = 0; | ||||||
| 		memset(&iso_report, 0, sizeof(iso_report)); | 		memset(&iso_report, 0, sizeof(iso_report)); | ||||||
|  | 		has_ldlinux_c32 = FALSE; | ||||||
| 		// String array of all isolinux/syslinux locations
 | 		// String array of all isolinux/syslinux locations
 | ||||||
| 		StrArrayCreate(&config_path, 8); | 		StrArrayCreate(&config_path, 8); | ||||||
|  | 		StrArrayCreate(&isolinux_path, 8); | ||||||
| 		// Change the Window title and static text
 | 		// Change the Window title and static text
 | ||||||
| 		SetWindowTextU(hISOProgressDlg, lmprintf(MSG_202)); | 		SetWindowTextU(hISOProgressDlg, lmprintf(MSG_202)); | ||||||
| 		SetWindowTextU(hISOFileName, lmprintf(MSG_202)); | 		SetWindowTextU(hISOFileName, lmprintf(MSG_202)); | ||||||
|  | @ -566,14 +577,65 @@ out: | ||||||
| 		// We use the fact that UDF_BLOCKSIZE and ISO_BLOCKSIZE are the same here
 | 		// We use the fact that UDF_BLOCKSIZE and ISO_BLOCKSIZE are the same here
 | ||||||
| 		iso_report.projected_size = total_blocks * ISO_BLOCKSIZE; | 		iso_report.projected_size = total_blocks * ISO_BLOCKSIZE; | ||||||
| 		// We will link the existing isolinux.cfg from a syslinux.cfg we create
 | 		// We will link the existing isolinux.cfg from a syslinux.cfg we create
 | ||||||
| 		// If multiple config file exist, choose the one with the shortest path
 | 		// If multiple config files exist, choose the one with the shortest path
 | ||||||
| 		if (iso_report.has_isolinux) { | 		// (so that a '/syslinux.cfg' is preferred over a '/isolinux/isolinux.cfg')
 | ||||||
|  | 		if (!IsStrArrayEmpty(config_path)) { | ||||||
| 			safe_strcpy(iso_report.cfg_path, sizeof(iso_report.cfg_path), config_path.Table[0]); | 			safe_strcpy(iso_report.cfg_path, sizeof(iso_report.cfg_path), config_path.Table[0]); | ||||||
| 			for (i=1; i<config_path.Index; i++) { | 			for (i=1; i<config_path.Index; i++) { | ||||||
| 				if (safe_strlen(iso_report.cfg_path) > safe_strlen(config_path.Table[i])) | 				if (safe_strlen(iso_report.cfg_path) > safe_strlen(config_path.Table[i])) | ||||||
| 					safe_strcpy(iso_report.cfg_path, sizeof(iso_report.cfg_path), config_path.Table[i]); | 					safe_strcpy(iso_report.cfg_path, sizeof(iso_report.cfg_path), config_path.Table[i]); | ||||||
| 			} | 			} | ||||||
| 			uprintf("Will use %s for Syslinux\n", iso_report.cfg_path); | 			uprintf("Will use %s for Syslinux\n", iso_report.cfg_path); | ||||||
|  | 			// Extract all of the isolinux.bin files we found to identify their versions
 | ||||||
|  | 			for (i=0; i<isolinux_path.Index; i++) { | ||||||
|  | 				size = (size_t)ExtractISOFile(src_iso, isolinux_path.Table[i], dot_isolinux_bin); | ||||||
|  | 				if (size == 0) { | ||||||
|  | 					uprintf("Could not access %s\n", isolinux_path.Table[i]); | ||||||
|  | 				} else { | ||||||
|  | 					buf = (char*)calloc(size, 1); | ||||||
|  | 					if (buf == NULL) break; | ||||||
|  | 					fd = fopen(dot_isolinux_bin, "rb"); | ||||||
|  | 					if (fd == NULL) { | ||||||
|  | 						free(buf); | ||||||
|  | 						continue; | ||||||
|  | 					} | ||||||
|  | 					fread(buf, 1, size, fd); | ||||||
|  | 					fclose(fd); | ||||||
|  | 					for (k=0; k<size-16; k++) { | ||||||
|  | 						if (memcmp(&buf[k], ISOLINUX, sizeof(ISOLINUX)) == 0) { | ||||||
|  | 							k += sizeof(ISOLINUX); | ||||||
|  | 							sl_version = (((uint8_t)strtoul(&buf[k], &tmp, 10))<<8) + (uint8_t)strtoul(&tmp[1], NULL, 10); | ||||||
|  | 							if (iso_report.sl_version == 0) { | ||||||
|  | 								iso_report.sl_version = sl_version; | ||||||
|  | 								j = (int)i; | ||||||
|  | 							} else if (iso_report.sl_version != sl_version) { | ||||||
|  | 								uprintf("Found conflicting %s versions:\n  '%s' (v%d.%02d) vs '%s' (v%d.%02d)\n", isolinux_bin, | ||||||
|  | 									isolinux_path.Table[j], SL_MAJOR(iso_report.sl_version), SL_MINOR(iso_report.sl_version), | ||||||
|  | 									isolinux_path.Table[i], SL_MAJOR(sl_version), SL_MINOR(sl_version)); | ||||||
|  | 							} | ||||||
|  | 							break; | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 					free(buf); | ||||||
|  | 					_unlink(dot_isolinux_bin); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			if (iso_report.sl_version != 0) { | ||||||
|  | 				static_sprintf(iso_report.sl_version_str, "v%d.%02d", | ||||||
|  | 					SL_MAJOR(iso_report.sl_version), SL_MINOR(iso_report.sl_version)); | ||||||
|  | 				uprintf("Detected Isolinux version: %s (from '%s')", | ||||||
|  | 					iso_report.sl_version_str, isolinux_path.Table[j]); | ||||||
|  | 				if ( (has_ldlinux_c32 && (SL_MAJOR(iso_report.sl_version) < 5)) | ||||||
|  | 				  || (!has_ldlinux_c32 && (SL_MAJOR(iso_report.sl_version) >= 5)) ) | ||||||
|  | 					uprintf("Warning: Conflict between Isolinux version and the presence of ldlinux.c32...\n"); | ||||||
|  | 			} else { | ||||||
|  | 				// Couldn't find a version from isolinux.bin. Force set to the versions we embed
 | ||||||
|  | 				iso_report.sl_version = embedded_sl_version[has_ldlinux_c32?1:0]; | ||||||
|  | 				static_sprintf(iso_report.sl_version_str, "v%d.%02d", | ||||||
|  | 					SL_MAJOR(iso_report.sl_version), SL_MINOR(iso_report.sl_version)); | ||||||
|  | 				uprintf("Warning: Could not detect Isolinux version - Forcing to %s (embedded)", | ||||||
|  | 					iso_report.sl_version_str); | ||||||
|  | 			} | ||||||
| 		} | 		} | ||||||
| 		if (IS_WINPE(iso_report.winpe)) { | 		if (IS_WINPE(iso_report.winpe)) { | ||||||
| 			// 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
 | ||||||
|  | @ -593,7 +655,8 @@ out: | ||||||
| 			safe_free(tmp); | 			safe_free(tmp); | ||||||
| 		} | 		} | ||||||
| 		StrArrayDestroy(&config_path); | 		StrArrayDestroy(&config_path); | ||||||
| 	} else if (iso_report.has_isolinux) { | 		StrArrayDestroy(&isolinux_path); | ||||||
|  | 	} else if (!IsStrArrayEmpty(config_path)) { | ||||||
| 		safe_sprintf(path, sizeof(path), "%s\\syslinux.cfg", dest_dir); | 		safe_sprintf(path, sizeof(path), "%s\\syslinux.cfg", dest_dir); | ||||||
| 		// Create a /syslinux.cfg (if none exists) that points to the existing isolinux cfg
 | 		// Create a /syslinux.cfg (if none exists) that points to the existing isolinux cfg
 | ||||||
| 		fd = fopen(path, "r"); | 		fd = fopen(path, "r"); | ||||||
|  | @ -626,14 +689,14 @@ out: | ||||||
| 	return (r == 0); | 	return (r == 0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| BOOL ExtractISOFile(const char* iso, const char* iso_file, const char* dest_file) | int64_t ExtractISOFile(const char* iso, const char* iso_file, const char* dest_file) | ||||||
| { | { | ||||||
| 	size_t i; | 	size_t i; | ||||||
| 	ssize_t read_size; | 	ssize_t read_size; | ||||||
| 	int64_t file_length; | 	int64_t file_length; | ||||||
| 	char buf[UDF_BLOCKSIZE]; | 	char buf[UDF_BLOCKSIZE]; | ||||||
| 	DWORD buf_size, wr_size; | 	DWORD buf_size, wr_size; | ||||||
| 	BOOL s, r = FALSE; | 	BOOL s, r = 0; | ||||||
| 	iso9660_t* p_iso = NULL; | 	iso9660_t* p_iso = NULL; | ||||||
| 	udf_t* p_udf = NULL;  | 	udf_t* p_udf = NULL;  | ||||||
| 	udf_dirent_t *p_udf_root = NULL, *p_udf_file = NULL; | 	udf_dirent_t *p_udf_root = NULL, *p_udf_file = NULL; | ||||||
|  | @ -678,8 +741,8 @@ BOOL ExtractISOFile(const char* iso, const char* iso_file, const char* dest_file | ||||||
| 			goto out; | 			goto out; | ||||||
| 		} | 		} | ||||||
| 		file_length -= read_size; | 		file_length -= read_size; | ||||||
|  | 		r += read_size; | ||||||
| 	} | 	} | ||||||
| 	r = TRUE; |  | ||||||
| 	goto out; | 	goto out; | ||||||
| 
 | 
 | ||||||
| try_iso: | try_iso: | ||||||
|  | @ -710,8 +773,8 @@ try_iso: | ||||||
| 			goto out; | 			goto out; | ||||||
| 		} | 		} | ||||||
| 		file_length -= ISO_BLOCKSIZE; | 		file_length -= ISO_BLOCKSIZE; | ||||||
|  | 		r += ISO_BLOCKSIZE; | ||||||
| 	} | 	} | ||||||
| 	r = TRUE; |  | ||||||
| 
 | 
 | ||||||
| out: | out: | ||||||
| 	safe_closehandle(file_handle); | 	safe_closehandle(file_handle); | ||||||
|  | @ -726,5 +789,5 @@ out: | ||||||
| 		iso9660_close(p_iso); | 		iso9660_close(p_iso); | ||||||
| 	if (p_udf != NULL) | 	if (p_udf != NULL) | ||||||
| 		udf_close(p_udf); | 		udf_close(p_udf); | ||||||
| 	return (r == 0); | 	return r; | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										30
									
								
								src/net.c
									
										
									
									
									
								
							
							
						
						
									
										30
									
								
								src/net.c
									
										
									
									
									
								
							|  | @ -1,7 +1,7 @@ | ||||||
| /*
 | /*
 | ||||||
|  * Rufus: The Reliable USB Formatting Utility |  * Rufus: The Reliable USB Formatting Utility | ||||||
|  * Networking functionality (web file download, check for update, etc.) |  * Networking functionality (web file download, check for update, etc.) | ||||||
|  * Copyright © 2012-2013 Pete Batard <pete@akeo.ie> |  * Copyright © 2012-2014 Pete Batard <pete@akeo.ie> | ||||||
|  * |  * | ||||||
|  * This program is free software: you can redistribute it and/or modify |  * This program is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
|  | @ -239,7 +239,7 @@ const char* WinInetErrorString(void) | ||||||
|  * to the dialog in question, with WPARAM being set to nonzero for EXIT on success |  * to the dialog in question, with WPARAM being set to nonzero for EXIT on success | ||||||
|  * and also attempt to indicate progress using an IDC_PROGRESS control |  * and also attempt to indicate progress using an IDC_PROGRESS control | ||||||
|  */ |  */ | ||||||
| BOOL DownloadFile(const char* url, const char* file, HWND hProgressDialog) | DWORD DownloadFile(const char* url, const char* file, HWND hProgressDialog) | ||||||
| { | { | ||||||
| 	HWND hProgressBar = NULL; | 	HWND hProgressBar = NULL; | ||||||
| 	BOOL r = FALSE; | 	BOOL r = FALSE; | ||||||
|  | @ -251,6 +251,7 @@ BOOL DownloadFile(const char* url, const char* file, HWND hProgressDialog) | ||||||
| 	HINTERNET hSession = NULL, hConnection = NULL, hRequest = NULL; | 	HINTERNET hSession = NULL, hConnection = NULL, hRequest = NULL; | ||||||
| 	URL_COMPONENTSA UrlParts = {sizeof(URL_COMPONENTSA), NULL, 1, (INTERNET_SCHEME)0, | 	URL_COMPONENTSA UrlParts = {sizeof(URL_COMPONENTSA), NULL, 1, (INTERNET_SCHEME)0, | ||||||
| 		hostname, sizeof(hostname), 0, NULL, 1, urlpath, sizeof(urlpath), NULL, 1}; | 		hostname, sizeof(hostname), 0, NULL, 1, urlpath, sizeof(urlpath), NULL, 1}; | ||||||
|  | 	size_t last_slash; | ||||||
| 	int i; | 	int i; | ||||||
| 
 | 
 | ||||||
| 	if (hProgressDialog != NULL) { | 	if (hProgressDialog != NULL) { | ||||||
|  | @ -264,8 +265,15 @@ BOOL DownloadFile(const char* url, const char* file, HWND hProgressDialog) | ||||||
| 		SendMessage(hProgressDialog, UM_ISO_INIT, 0, 0); | 		SendMessage(hProgressDialog, UM_ISO_INIT, 0, 0); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	PrintStatus(0, FALSE, MSG_240, file); | 	for (last_slash = safe_strlen(file); last_slash != 0; last_slash--) { | ||||||
| 	uprintf("Downloading %s from %s\n", file, url); | 		if ((file[last_slash] == '/') || (file[last_slash] == '\\')) { | ||||||
|  | 			last_slash++; | ||||||
|  | 			break; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	PrintStatus(0, FALSE, MSG_240, &file[last_slash]); | ||||||
|  | 	uprintf("Downloading '%s' from %s\n", &file[last_slash], url); | ||||||
| 
 | 
 | ||||||
| 	if (!InternetCrackUrlA(url, (DWORD)safe_strlen(url), 0, &UrlParts)) { | 	if (!InternetCrackUrlA(url, (DWORD)safe_strlen(url), 0, &UrlParts)) { | ||||||
| 		uprintf("Unable to decode URL: %s\n", WinInetErrorString()); | 		uprintf("Unable to decode URL: %s\n", WinInetErrorString()); | ||||||
|  | @ -286,7 +294,7 @@ BOOL DownloadFile(const char* url, const char* file, HWND hProgressDialog) | ||||||
| 	_snprintf(agent, ARRAYSIZE(agent), APPLICATION_NAME "/%d.%d.%d.%d", rufus_version[0], rufus_version[1], rufus_version[2], rufus_version[3]); | 	_snprintf(agent, ARRAYSIZE(agent), APPLICATION_NAME "/%d.%d.%d.%d", rufus_version[0], rufus_version[1], rufus_version[2], rufus_version[3]); | ||||||
| 	hSession = InternetOpenA(agent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); | 	hSession = InternetOpenA(agent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); | ||||||
| 	if (hSession == NULL) { | 	if (hSession == NULL) { | ||||||
| 		uprintf("Could not open internet session: %s\n", WinInetErrorString()); | 		uprintf("Could not open Internet session: %s\n", WinInetErrorString()); | ||||||
| 		goto out; | 		goto out; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -300,7 +308,7 @@ BOOL DownloadFile(const char* url, const char* file, HWND hProgressDialog) | ||||||
| 		INTERNET_FLAG_HYPERLINK|INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP|INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS|INTERNET_FLAG_NO_COOKIES| | 		INTERNET_FLAG_HYPERLINK|INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP|INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS|INTERNET_FLAG_NO_COOKIES| | ||||||
| 		INTERNET_FLAG_NO_UI|INTERNET_FLAG_NO_CACHE_WRITE, (DWORD_PTR)NULL); | 		INTERNET_FLAG_NO_UI|INTERNET_FLAG_NO_CACHE_WRITE, (DWORD_PTR)NULL); | ||||||
| 	if (hRequest == NULL) { | 	if (hRequest == NULL) { | ||||||
| 		uprintf("Could not open url %s: %s\n", url, WinInetErrorString()); | 		uprintf("Could not open URL %s: %s\n", url, WinInetErrorString()); | ||||||
| 		goto out; | 		goto out; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -327,7 +335,7 @@ BOOL DownloadFile(const char* url, const char* file, HWND hProgressDialog) | ||||||
| 
 | 
 | ||||||
| 	fd = fopenU(file, "wb"); | 	fd = fopenU(file, "wb"); | ||||||
| 	if (fd == NULL) { | 	if (fd == NULL) { | ||||||
| 		uprintf("Unable to create file '%s': %s\n", file, WinInetErrorString()); | 		uprintf("Unable to create file '%s': %s\n", &file[last_slash], WinInetErrorString()); | ||||||
| 		goto out; | 		goto out; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -343,7 +351,7 @@ BOOL DownloadFile(const char* url, const char* file, HWND hProgressDialog) | ||||||
| 		SendMessage(hProgressBar, PBM_SETPOS, (WPARAM)(MAX_PROGRESS*((1.0f*dwSize)/(1.0f*dwTotalSize))), 0); | 		SendMessage(hProgressBar, PBM_SETPOS, (WPARAM)(MAX_PROGRESS*((1.0f*dwSize)/(1.0f*dwTotalSize))), 0); | ||||||
| 		PrintStatus(0, FALSE, MSG_241, (100.0f*dwSize)/(1.0f*dwTotalSize)); | 		PrintStatus(0, FALSE, MSG_241, (100.0f*dwSize)/(1.0f*dwTotalSize)); | ||||||
| 		if (fwrite(buf, 1, dwDownloaded, fd) != dwDownloaded) { | 		if (fwrite(buf, 1, dwDownloaded, fd) != dwDownloaded) { | ||||||
| 			uprintf("Error writing file '%s': %s\n", file, WinInetErrorString()); | 			uprintf("Error writing file '%s': %s\n", &file[last_slash], WinInetErrorString()); | ||||||
| 			goto out; | 			goto out; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | @ -354,7 +362,7 @@ BOOL DownloadFile(const char* url, const char* file, HWND hProgressDialog) | ||||||
| 		goto out; | 		goto out; | ||||||
| 	} else { | 	} else { | ||||||
| 		r = TRUE; | 		r = TRUE; | ||||||
| 		uprintf("Successfully downloaded '%s'\n", file); | 		uprintf("Successfully downloaded '%s'\n", &file[last_slash]); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| out: | out: | ||||||
|  | @ -372,7 +380,7 @@ out: | ||||||
| 	if (hConnection) InternetCloseHandle(hConnection); | 	if (hConnection) InternetCloseHandle(hConnection); | ||||||
| 	if (hSession) InternetCloseHandle(hSession); | 	if (hSession) InternetCloseHandle(hSession); | ||||||
| 
 | 
 | ||||||
| 	return r; | 	return r?dwSize:0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* Threaded download */ | /* Threaded download */ | ||||||
|  | @ -380,7 +388,7 @@ static const char *_url, *_file; | ||||||
| static HWND _hProgressDialog; | static HWND _hProgressDialog; | ||||||
| static DWORD WINAPI _DownloadFileThread(LPVOID param) | static DWORD WINAPI _DownloadFileThread(LPVOID param) | ||||||
| { | { | ||||||
| 	ExitThread(DownloadFile(_url, _file, _hProgressDialog)); | 	ExitThread(DownloadFile(_url, _file, _hProgressDialog) != 0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| HANDLE DownloadFileThreaded(const char* url, const char* file, HWND hProgressDialog) | HANDLE DownloadFileThreaded(const char* url, const char* file, HWND hProgressDialog) | ||||||
|  |  | ||||||
							
								
								
									
										147
									
								
								src/rufus.c
									
										
									
									
									
								
							
							
						
						
									
										147
									
								
								src/rufus.c
									
										
									
									
									
								
							|  | @ -141,7 +141,8 @@ BOOL use_own_c32[NB_OLD_C32] = {FALSE, FALSE}, detect_fakes = TRUE, mbr_selected | ||||||
| BOOL iso_op_in_progress = FALSE, format_op_in_progress = FALSE; | BOOL iso_op_in_progress = FALSE, format_op_in_progress = FALSE; | ||||||
| BOOL enable_HDDs = FALSE, advanced_mode = TRUE, force_update = FALSE; | BOOL enable_HDDs = FALSE, advanced_mode = TRUE, force_update = FALSE; | ||||||
| int dialog_showing = 0; | int dialog_showing = 0; | ||||||
| uint16_t rufus_version[4]; | uint16_t rufus_version[4], embedded_sl_version[2]; | ||||||
|  | char embedded_sl_version_str[2][12] = { "v?.??", "v?.??" }; | ||||||
| RUFUS_UPDATE update = { {0,0,0,0}, {0,0}, NULL, NULL}; | RUFUS_UPDATE update = { {0,0,0,0}, {0,0}, NULL, NULL}; | ||||||
| extern char szStatusMessage[256]; | extern char szStatusMessage[256]; | ||||||
| 
 | 
 | ||||||
|  | @ -445,7 +446,7 @@ static void SetFSFromISO(void) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Syslinux and EFI have precedence over bootmgr (unless the user selected BIOS as target type)
 | 	// Syslinux and EFI have precedence over bootmgr (unless the user selected BIOS as target type)
 | ||||||
| 	if ((iso_report.has_isolinux) || (IS_REACTOS(iso_report)) || ( (IS_EFI(iso_report)) && (bt == BT_UEFI))) { | 	if ((HAS_SYSLINUX(iso_report)) || (IS_REACTOS(iso_report)) || ( (IS_EFI(iso_report)) && (bt == BT_UEFI))) { | ||||||
| 		if (fs_mask & (1<<FS_FAT32)) { | 		if (fs_mask & (1<<FS_FAT32)) { | ||||||
| 			selected_fs = FS_FAT32; | 			selected_fs = FS_FAT32; | ||||||
| 		} else if (fs_mask & (1<<FS_FAT16)) { | 		} else if (fs_mask & (1<<FS_FAT16)) { | ||||||
|  | @ -531,7 +532,7 @@ static void SetTargetSystem(void) | ||||||
| 	if (SelectedDrive.PartitionType == PARTITION_STYLE_GPT) { | 	if (SelectedDrive.PartitionType == PARTITION_STYLE_GPT) { | ||||||
| 		ts = 2;	// GPT/UEFI
 | 		ts = 2;	// GPT/UEFI
 | ||||||
| 	} else if (SelectedDrive.has_protective_mbr || SelectedDrive.has_mbr_uefi_marker || (IS_EFI(iso_report) && | 	} else if (SelectedDrive.has_protective_mbr || SelectedDrive.has_mbr_uefi_marker || (IS_EFI(iso_report) && | ||||||
| 		(!iso_report.has_isolinux) && (!iso_report.has_bootmgr) && (!IS_WINPE(iso_report.winpe))) ) { | 		(!HAS_SYSLINUX(iso_report)) && (!iso_report.has_bootmgr) && (!IS_WINPE(iso_report.winpe))) ) { | ||||||
| 		ts = 1;	// MBR/UEFI
 | 		ts = 1;	// MBR/UEFI
 | ||||||
| 	} else { | 	} else { | ||||||
| 		ts = 0;	// MBR/BIOS|UEFI
 | 		ts = 0;	// MBR/BIOS|UEFI
 | ||||||
|  | @ -1171,6 +1172,7 @@ DWORD WINAPI ISOScanThread(LPVOID param) | ||||||
| 	FILE* fd; | 	FILE* fd; | ||||||
| 	const char* old_c32_name[NB_OLD_C32] = OLD_C32_NAMES; | 	const char* old_c32_name[NB_OLD_C32] = OLD_C32_NAMES; | ||||||
| 	const char* new_c32_url[NB_OLD_C32] = NEW_C32_URL; | 	const char* new_c32_url[NB_OLD_C32] = NEW_C32_URL; | ||||||
|  | 	char isolinux_str[16] = "No"; | ||||||
| 
 | 
 | ||||||
| 	if (iso_path == NULL) | 	if (iso_path == NULL) | ||||||
| 		goto out; | 		goto out; | ||||||
|  | @ -1185,41 +1187,45 @@ DWORD WINAPI ISOScanThread(LPVOID param) | ||||||
| 		safe_free(iso_path); | 		safe_free(iso_path); | ||||||
| 		goto out; | 		goto out; | ||||||
| 	} | 	} | ||||||
|  | 	if (HAS_SYSLINUX(iso_report)) { | ||||||
|  | 		safe_sprintf(isolinux_str, sizeof(isolinux_str), "Yes (%s)", iso_report.sl_version_str); | ||||||
|  | 	} | ||||||
| 	uprintf("ISO label: '%s'\r\n  Size: %lld bytes\r\n  Has a >64 chars filename: %s\r\n  Has a >4GB file: %s\r\n" | 	uprintf("ISO label: '%s'\r\n  Size: %lld bytes\r\n  Has a >64 chars filename: %s\r\n  Has a >4GB file: %s\r\n" | ||||||
| 		"  ReactOS: %s\r\n  Uses EFI: %s%s\r\n  Uses Bootmgr: %s\r\n  Uses WinPE: %s%s\r\n  Uses isolinux: %s %s\r\n", | 		"  ReactOS: %s\r\n  Uses EFI: %s%s\r\n  Uses Bootmgr: %s\r\n  Uses WinPE: %s%s\r\n  Uses isolinux: %s\r\n", | ||||||
| 		iso_report.label, iso_report.projected_size, iso_report.has_long_filename?"Yes":"No", iso_report.has_4GB_file?"Yes":"No", | 		iso_report.label, iso_report.projected_size, iso_report.has_long_filename?"Yes":"No", iso_report.has_4GB_file?"Yes":"No", | ||||||
| 		IS_REACTOS(iso_report)?"Yes":"No", (iso_report.has_efi || iso_report.has_win7_efi)?"Yes":"No", | 		IS_REACTOS(iso_report)?"Yes":"No", (iso_report.has_efi || iso_report.has_win7_efi)?"Yes":"No", | ||||||
| 		(iso_report.has_win7_efi && (!iso_report.has_efi))?" (win7_x64)":"", iso_report.has_bootmgr?"Yes":"No", | 		(iso_report.has_win7_efi && (!iso_report.has_efi))?" (win7_x64)":"", iso_report.has_bootmgr?"Yes":"No", | ||||||
| 		IS_WINPE(iso_report.winpe)?"Yes":"No", (iso_report.uses_minint)?" (with /minint)":"", iso_report.has_isolinux?"Yes":"No", | 		IS_WINPE(iso_report.winpe)?"Yes":"No", (iso_report.uses_minint)?" (with /minint)":"", isolinux_str); | ||||||
| 		iso_report.has_syslinux_v5?"(v5.0 or later)":iso_report.has_isolinux?"(v4.x or earlier)":""); | 	if (HAS_SYSLINUX(iso_report) && (SL_MAJOR(iso_report.sl_version) < 5)) { | ||||||
| 	if (iso_report.has_isolinux && !iso_report.has_syslinux_v5) { |  | ||||||
| 		for (i=0; i<NB_OLD_C32; i++) { | 		for (i=0; i<NB_OLD_C32; i++) { | ||||||
| 			uprintf("    With an old %s: %s\n", old_c32_name[i], iso_report.has_old_c32[i]?"Yes":"No"); | 			uprintf("    With an old %s: %s\n", old_c32_name[i], iso_report.has_old_c32[i]?"Yes":"No"); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if ( (!iso_report.has_bootmgr) && (!iso_report.has_isolinux) && (!IS_WINPE(iso_report.winpe))  | 	if ( (!iso_report.has_bootmgr) && (!HAS_SYSLINUX(iso_report)) && (!IS_WINPE(iso_report.winpe))  | ||||||
| 	  && (!iso_report.has_efi) && (!IS_REACTOS(iso_report)) ) { | 	  && (!iso_report.has_efi) && (!IS_REACTOS(iso_report)) ) { | ||||||
| 		MessageBoxU(hMainDialog, lmprintf(MSG_082), lmprintf(MSG_081), MB_OK|MB_ICONINFORMATION); | 		MessageBoxU(hMainDialog, lmprintf(MSG_082), lmprintf(MSG_081), MB_OK|MB_ICONINFORMATION); | ||||||
| 		safe_free(iso_path); | 		safe_free(iso_path); | ||||||
| 		SetMBRProps(); | 		SetMBRProps(); | ||||||
| 	} else if (!iso_report.has_syslinux_v5) {	// This check is for Syslinux v4.x or earlier
 | 	} else if (HAS_SYSLINUX(iso_report)) { | ||||||
| 		_chdirU(app_dir); | 		if (SL_MAJOR(iso_report.sl_version) < 5) { | ||||||
| 		for (i=0; i<NB_OLD_C32; i++) { | 			_chdirU(app_dir); | ||||||
| 			if (iso_report.has_old_c32[i]) { | 			for (i=0; i<NB_OLD_C32; i++) { | ||||||
| 				fd = fopen(old_c32_name[i], "rb"); | 				if (iso_report.has_old_c32[i]) { | ||||||
| 				if (fd != NULL) { | 					fd = fopen(old_c32_name[i], "rb"); | ||||||
| 					// If a file already exists in the current directory, use that one
 | 					if (fd != NULL) { | ||||||
| 					uprintf("Will replace obsolete '%s' from ISO with the one found in current directory\n", old_c32_name[i]); | 						// If a file already exists in the current directory, use that one
 | ||||||
| 					fclose(fd); | 						uprintf("Will replace obsolete '%s' from ISO with the one found in current directory\n", old_c32_name[i]); | ||||||
| 					use_own_c32[i] = TRUE; | 						fclose(fd); | ||||||
| 				} else { | 						use_own_c32[i] = TRUE; | ||||||
| 					PrintStatus(0, FALSE, MSG_204, old_c32_name[i]); | 					} else { | ||||||
| 					if (MessageBoxU(hMainDialog, lmprintf(MSG_084, old_c32_name[i], old_c32_name[i]), | 						PrintStatus(0, FALSE, MSG_204, old_c32_name[i]); | ||||||
| 						 lmprintf(MSG_083, old_c32_name[i]), MB_YESNO|MB_ICONWARNING) == IDYES) { | 						if (MessageBoxU(hMainDialog, lmprintf(MSG_084, old_c32_name[i], old_c32_name[i]), | ||||||
| 						SetWindowTextU(hISOProgressDlg, lmprintf(MSG_085, old_c32_name[i])); | 							 lmprintf(MSG_083, old_c32_name[i]), MB_YESNO|MB_ICONWARNING) == IDYES) { | ||||||
| 						SetWindowTextU(hISOFileName, new_c32_url[i]); | 							SetWindowTextU(hISOProgressDlg, lmprintf(MSG_085, old_c32_name[i])); | ||||||
| 						if (DownloadFile(new_c32_url[i], old_c32_name[i], hISOProgressDlg)) | 							SetWindowTextU(hISOFileName, new_c32_url[i]); | ||||||
| 							use_own_c32[i] = TRUE; | 							if (DownloadFile(new_c32_url[i], old_c32_name[i], hISOProgressDlg)) | ||||||
|  | 								use_own_c32[i] = TRUE; | ||||||
|  | 						} | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
|  | @ -1319,10 +1325,14 @@ void ToggleAdvanced(void) | ||||||
| 
 | 
 | ||||||
| static BOOL BootCheck(void) | static BOOL BootCheck(void) | ||||||
| { | { | ||||||
| 	int fs, bt, dt, r; | 	int i, fs, bt, dt, r; | ||||||
| 	FILE* fd; | 	FILE* fd; | ||||||
| 	const char* ldlinux_name = "ldlinux.c32"; | 	const char* ldlinux = "ldlinux"; | ||||||
|  | 	const char* syslinux = "syslinux"; | ||||||
|  | 	const char* ldlinux_ext[3] = { "sys", "bss", "c32" }; | ||||||
|  | 	char tmp[MAX_PATH]; | ||||||
| 
 | 
 | ||||||
|  | 	syslinux_ldlinux_len[0] = 0; syslinux_ldlinux_len[1] = 0; | ||||||
| 	dt = (int)ComboBox_GetItemData(hBootType, ComboBox_GetCurSel(hBootType)); | 	dt = (int)ComboBox_GetItemData(hBootType, ComboBox_GetCurSel(hBootType)); | ||||||
| 	if (dt == DT_ISO) { | 	if (dt == DT_ISO) { | ||||||
| 		if (iso_path == NULL) { | 		if (iso_path == NULL) { | ||||||
|  | @ -1350,7 +1360,7 @@ static BOOL BootCheck(void) | ||||||
| 				return FALSE; | 				return FALSE; | ||||||
| 			} | 			} | ||||||
| 		} else if ((fs == FS_NTFS) && (!iso_report.has_bootmgr) && (!IS_WINPE(iso_report.winpe))) { | 		} else if ((fs == FS_NTFS) && (!iso_report.has_bootmgr) && (!IS_WINPE(iso_report.winpe))) { | ||||||
| 			if (iso_report.has_isolinux) { | 			if (HAS_SYSLINUX(iso_report)) { | ||||||
| 				// Only FAT/FAT32 is supported for this type of ISO
 | 				// Only FAT/FAT32 is supported for this type of ISO
 | ||||||
| 				MessageBoxU(hMainDialog, lmprintf(MSG_096), lmprintf(MSG_092), MB_OK|MB_ICONERROR); | 				MessageBoxU(hMainDialog, lmprintf(MSG_096), lmprintf(MSG_092), MB_OK|MB_ICONERROR); | ||||||
| 			} else { | 			} else { | ||||||
|  | @ -1358,7 +1368,7 @@ static BOOL BootCheck(void) | ||||||
| 				MessageBoxU(hMainDialog, lmprintf(MSG_097), lmprintf(MSG_090), MB_OK|MB_ICONERROR); | 				MessageBoxU(hMainDialog, lmprintf(MSG_097), lmprintf(MSG_090), MB_OK|MB_ICONERROR); | ||||||
| 			} | 			} | ||||||
| 			return FALSE; | 			return FALSE; | ||||||
| 		} else if (((fs == FS_FAT16)||(fs == FS_FAT32)) && (!iso_report.has_isolinux) && (!IS_REACTOS(iso_report))) { | 		} else if (((fs == FS_FAT16)||(fs == FS_FAT32)) && (!HAS_SYSLINUX(iso_report)) && (!IS_REACTOS(iso_report))) { | ||||||
| 			// FAT/FAT32 can only be used for isolinux based ISO images or when the Target Type is UEFI
 | 			// FAT/FAT32 can only be used for isolinux based ISO images or when the Target Type is UEFI
 | ||||||
| 			MessageBoxU(hMainDialog, lmprintf(MSG_098), lmprintf(MSG_090), MB_OK|MB_ICONERROR); | 			MessageBoxU(hMainDialog, lmprintf(MSG_098), lmprintf(MSG_090), MB_OK|MB_ICONERROR); | ||||||
| 			return FALSE; | 			return FALSE; | ||||||
|  | @ -1368,23 +1378,68 @@ static BOOL BootCheck(void) | ||||||
| 			MessageBoxU(hMainDialog, lmprintf(MSG_100), lmprintf(MSG_099), MB_OK|MB_ICONERROR); | 			MessageBoxU(hMainDialog, lmprintf(MSG_100), lmprintf(MSG_099), MB_OK|MB_ICONERROR); | ||||||
| 			return FALSE; | 			return FALSE; | ||||||
| 		} | 		} | ||||||
|  | 		if ((SL_MAJOR(iso_report.sl_version) >= 5) && (iso_report.sl_version != embedded_sl_version[1])) { | ||||||
|  | 			// Unlike what was the case for v4 and earlier, Syslinux v5+ versions are INCOMPATIBLE with one another!
 | ||||||
|  | 			_chdirU(app_dir); | ||||||
|  | 			_mkdir(FILES_DIR); | ||||||
|  | 			_chdir(FILES_DIR); | ||||||
|  | 			for (i=0; i<2; i++) { | ||||||
|  | 				// Check if we already have the relevant ldlinux_v#.##.sys & ldlinux_v#.##.bss files
 | ||||||
|  | 				static_sprintf(tmp, "%s-%s/%s.%s", syslinux, &iso_report.sl_version_str[1], ldlinux, ldlinux_ext[i]); | ||||||
|  | 				fd = fopen(tmp, "rb"); | ||||||
|  | 				if (fd != NULL) { | ||||||
|  | 					fseek(fd, 0, SEEK_END); | ||||||
|  | 					syslinux_ldlinux_len[i] = (DWORD)ftell(fd); | ||||||
|  | 					fclose(fd); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			if ((syslinux_ldlinux_len[0] != 0) && (syslinux_ldlinux_len[1] != 0)) { | ||||||
|  | 				uprintf("Will reuse '%s.%s' and '%s.%s' from './%s/%s-%s/' for Syslinux installation\n", | ||||||
|  | 					ldlinux, ldlinux_ext[0], ldlinux, ldlinux_ext[1], FILES_DIR, syslinux, &iso_report.sl_version_str[1]); | ||||||
|  | 			} else { | ||||||
|  | 				r = MessageBoxU(hMainDialog, lmprintf(MSG_114, iso_report.sl_version_str, embedded_sl_version_str[1]), | ||||||
|  | 					lmprintf(MSG_115), MB_YESNO|MB_ICONWARNING); | ||||||
|  | 				if (r != IDYES) | ||||||
|  | 					return FALSE; | ||||||
|  | 				for (i=0; i<2; i++) { | ||||||
|  | 					static_sprintf(tmp, "%s-%s", syslinux, &iso_report.sl_version_str[1]); | ||||||
|  | 					_mkdir(tmp); | ||||||
|  | 					static_sprintf(tmp, "%s.%s %s", ldlinux, ldlinux_ext[i], iso_report.sl_version_str); | ||||||
|  | 					SetWindowTextU(hISOProgressDlg, lmprintf(MSG_085, tmp)); | ||||||
|  | 					static_sprintf(tmp, "%s/%s-%s/%s.%s", FILES_URL, syslinux, &iso_report.sl_version_str[1], ldlinux, ldlinux_ext[i]); | ||||||
|  | 					SetWindowTextU(hISOFileName, tmp); | ||||||
|  | 					syslinux_ldlinux_len[i] = DownloadFile(tmp, &tmp[sizeof(FILES_URL)], hISOProgressDlg); | ||||||
|  | 					if (syslinux_ldlinux_len[i] == 0) { | ||||||
|  | 						uprintf("Couldn't download the files - cancelling\n"); | ||||||
|  | 						return FALSE; | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
| 	} else if (dt == DT_SYSLINUX_V5) { | 	} else if (dt == DT_SYSLINUX_V5) { | ||||||
| 		_chdirU(app_dir); | 		_chdirU(app_dir); | ||||||
| 		fd = fopen(ldlinux_name, "rb"); | 		_mkdir(FILES_DIR); | ||||||
|  | 		_chdir(FILES_DIR); | ||||||
|  | 		static_sprintf(tmp, "%s-%s/%s.%s", syslinux, &embedded_sl_version_str[1][1], ldlinux, ldlinux_ext[2]); | ||||||
|  | 		fd = fopenU(tmp, "rb"); | ||||||
| 		if (fd != NULL) { | 		if (fd != NULL) { | ||||||
| 			uprintf("Will reuse '%s' for Syslinux v5\n", ldlinux_name); | 			uprintf("Will reuse './%s/%s' for Syslinux installation\n", FILES_DIR, tmp); | ||||||
| 			fclose(fd); | 			fclose(fd); | ||||||
| 		} else { | 		} else { | ||||||
| 			PrintStatus(0, FALSE, MSG_206, ldlinux_name); | 			static_sprintf(tmp, "%s.%s", ldlinux, ldlinux_ext[2]); | ||||||
| 			// Syslinux v5.0 or later requires a '%s' file to be installed
 | 			PrintStatus(0, FALSE, MSG_206, tmp); | ||||||
| 			r = MessageBoxU(hMainDialog, lmprintf(MSG_104, ldlinux_name, ldlinux_name), | 			// MSG_104: "Syslinux v5.0 or later requires a '%s' file to be installed"
 | ||||||
| 				lmprintf(MSG_103, ldlinux_name), MB_YESNOCANCEL|MB_ICONWARNING); | 			r = MessageBoxU(hMainDialog, lmprintf(MSG_104, tmp, tmp), | ||||||
|  | 				lmprintf(MSG_103, tmp), MB_YESNOCANCEL|MB_ICONWARNING); | ||||||
| 			if (r == IDCANCEL) | 			if (r == IDCANCEL) | ||||||
| 				return FALSE; | 				return FALSE; | ||||||
| 			if (r == IDYES) { | 			if (r == IDYES) { | ||||||
| 				SetWindowTextU(hISOProgressDlg, lmprintf(MSG_085, ldlinux_name)); | 				static_sprintf(tmp, "%s-%s", syslinux, &embedded_sl_version_str[1][1]); | ||||||
| 				SetWindowTextU(hISOFileName, LDLINUX_C32_URL); | 				_mkdir(tmp); | ||||||
| 				DownloadFile(LDLINUX_C32_URL, ldlinux_name, hISOProgressDlg); | 				static_sprintf(tmp, "%s/%s-%s/%s.%s", FILES_URL, syslinux, &embedded_sl_version_str[1][1], ldlinux, ldlinux_ext[2]); | ||||||
|  | 				SetWindowTextU(hISOProgressDlg, lmprintf(MSG_085, tmp)); | ||||||
|  | 				SetWindowTextU(hISOFileName, tmp); | ||||||
|  | 				DownloadFile(tmp, &tmp[sizeof(FILES_URL)], hISOProgressDlg); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} else if (dt == DT_WINME) { | 	} else if (dt == DT_WINME) { | ||||||
|  | @ -1401,9 +1456,11 @@ static BOOL BootCheck(void) | ||||||
| void InitDialog(HWND hDlg) | void InitDialog(HWND hDlg) | ||||||
| { | { | ||||||
| 	HINSTANCE hDllInst; | 	HINSTANCE hDllInst; | ||||||
|  | 	DWORD len; | ||||||
| 	HDC hDC; | 	HDC hDC; | ||||||
| 	int i, i16, s16; | 	int i, i16, s16; | ||||||
| 	char tmp[128], *token; | 	char tmp[128], *token, *buf; | ||||||
|  | 	static char* resource[2] = { MAKEINTRESOURCEA(IDR_SL_LDLINUX_V4_SYS), MAKEINTRESOURCEA(IDR_SL_LDLINUX_V5_SYS) }; | ||||||
| 
 | 
 | ||||||
| #ifdef RUFUS_TEST | #ifdef RUFUS_TEST | ||||||
| 	ShowWindow(GetDlgItem(hDlg, IDC_TEST), SW_SHOW); | 	ShowWindow(GetDlgItem(hDlg, IDC_TEST), SW_SHOW); | ||||||
|  | @ -1449,6 +1506,16 @@ void InitDialog(HWND hDlg) | ||||||
| 		rufus_version[i] = (uint16_t)atoi(token); | 		rufus_version[i] = (uint16_t)atoi(token); | ||||||
| 	uprintf(APPLICATION_NAME " version %d.%d.%d.%d\n", rufus_version[0], rufus_version[1], rufus_version[2], rufus_version[3]); | 	uprintf(APPLICATION_NAME " version %d.%d.%d.%d\n", rufus_version[0], rufus_version[1], rufus_version[2], rufus_version[3]); | ||||||
| 	uprintf("Windows version: %s\n", WindowsVersionStr); | 	uprintf("Windows version: %s\n", WindowsVersionStr); | ||||||
|  | 	for (i=0; i<ARRAYSIZE(resource); i++) { | ||||||
|  | 		buf = (char*)GetResource(hMainInstance, resource[i], _RT_RCDATA, "ldlinux_sys", &len, FALSE); | ||||||
|  | 		if ((buf == NULL) || (len < 16)) { | ||||||
|  | 			uprintf("Warning: could not read embedded Syslinux v%d version", i+4); | ||||||
|  | 		} else { | ||||||
|  | 			embedded_sl_version[i] = (((uint8_t)strtoul(&buf[0xb], &token, 10))<<8) + (uint8_t)strtoul(&token[1], NULL, 10); | ||||||
|  | 			static_sprintf(embedded_sl_version_str[i], "v%d.%02d", SL_MAJOR(embedded_sl_version[i]), SL_MINOR(embedded_sl_version[i])); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	uprintf("Syslinux version: %s, %s", embedded_sl_version_str[0], embedded_sl_version_str[1]); | ||||||
| 	uprintf("LCID: 0x%04X\n", GetUserDefaultUILanguage()); | 	uprintf("LCID: 0x%04X\n", GetUserDefaultUILanguage()); | ||||||
| 
 | 
 | ||||||
| 	SetClusterSizeLabels(); | 	SetClusterSizeLabels(); | ||||||
|  |  | ||||||
							
								
								
									
										32
									
								
								src/rufus.h
									
										
									
									
									
								
							
							
						
						
									
										32
									
								
								src/rufus.h
									
										
									
									
									
								
							|  | @ -59,7 +59,10 @@ | ||||||
| #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) | ||||||
| #define RUFUS_URL                   "http://rufus.akeo.ie"
 | #define RUFUS_URL                   "http://rufus.akeo.ie"
 | ||||||
|  | #define DOWNLOAD_URL                RUFUS_URL "/downloads" | ||||||
|  | #define FILES_URL                   RUFUS_URL "/files" | ||||||
| #define SEVENZIP_URL                "http://sourceforge.net/projects/sevenzip/files/7-Zip/"
 | #define SEVENZIP_URL                "http://sourceforge.net/projects/sevenzip/files/7-Zip/"
 | ||||||
|  | #define FILES_DIR                   "rufus_files" | ||||||
| #define IGNORE_RETVAL(expr)         do { (void)(expr); } while(0) | #define IGNORE_RETVAL(expr)         do { (void)(expr); } while(0) | ||||||
| #ifndef ARRAYSIZE | #ifndef ARRAYSIZE | ||||||
| #define ARRAYSIZE(A)                (sizeof(A)/sizeof((A)[0])) | #define ARRAYSIZE(A)                (sizeof(A)/sizeof((A)[0])) | ||||||
|  | @ -80,6 +83,7 @@ | ||||||
| #define safe_closehandle(h) do {if ((h != INVALID_HANDLE_VALUE) && (h != NULL)) {CloseHandle(h); h = INVALID_HANDLE_VALUE;}} while(0) | #define safe_closehandle(h) do {if ((h != INVALID_HANDLE_VALUE) && (h != NULL)) {CloseHandle(h); h = INVALID_HANDLE_VALUE;}} while(0) | ||||||
| #define safe_unlockclose(h) do {if ((h != INVALID_HANDLE_VALUE) && (h != NULL)) {UnlockDrive(h); CloseHandle(h); h = INVALID_HANDLE_VALUE;}} while(0) | #define safe_unlockclose(h) do {if ((h != INVALID_HANDLE_VALUE) && (h != NULL)) {UnlockDrive(h); CloseHandle(h); h = INVALID_HANDLE_VALUE;}} while(0) | ||||||
| #define safe_sprintf(dst, count, ...) do {_snprintf(dst, count, __VA_ARGS__); (dst)[(count)-1] = 0; } while(0) | #define safe_sprintf(dst, count, ...) do {_snprintf(dst, count, __VA_ARGS__); (dst)[(count)-1] = 0; } while(0) | ||||||
|  | #define static_sprintf(dst, ...) safe_sprintf(dst, sizeof(dst), __VA_ARGS__) | ||||||
| #define safe_strlen(str) ((((char*)str)==NULL)?0:strlen(str)) | #define safe_strlen(str) ((((char*)str)==NULL)?0:strlen(str)) | ||||||
| #define safe_strdup _strdup | #define safe_strdup _strdup | ||||||
| #if defined(_MSC_VER) | #if defined(_MSC_VER) | ||||||
|  | @ -203,14 +207,14 @@ typedef struct { | ||||||
| 
 | 
 | ||||||
| /* Special handling for old .c32 files we need to replace */ | /* Special handling for old .c32 files we need to replace */ | ||||||
| #define NB_OLD_C32          2 | #define NB_OLD_C32          2 | ||||||
| #define OLD_C32_NAMES       {"menu.c32", "vesamenu.c32"} | #define OLD_C32_NAMES       { "menu.c32", "vesamenu.c32" } | ||||||
| #define OLD_C32_THRESHOLD   {53500, 148000} | #define OLD_C32_THRESHOLD   { 53500, 148000 } | ||||||
| #define NEW_C32_URL         {RUFUS_URL "/downloads/menu.c32", RUFUS_URL "/downloads/vesamenu.c32"} | #define NEW_C32_URL         { DOWNLOAD_URL "/menu.c32", DOWNLOAD_URL "/vesamenu.c32" } | ||||||
| #define LDLINUX_C32_URL     RUFUS_URL "/downloads/ldlinux.c32" |  | ||||||
| 
 | 
 | ||||||
| /* ISO details that the application may want */ | /* ISO details that the application may want */ | ||||||
| #define WINPE_MININT    0x2A | #define WINPE_MININT    0x2A | ||||||
| #define WINPE_I386      0x15 | #define WINPE_I386      0x15 | ||||||
|  | #define HAS_SYSLINUX(r) (r.sl_version != 0) | ||||||
| #define IS_WINPE(r)     (((r&WINPE_MININT) == WINPE_MININT)||((r&WINPE_I386) == WINPE_I386)) | #define IS_WINPE(r)     (((r&WINPE_MININT) == WINPE_MININT)||((r&WINPE_I386) == WINPE_I386)) | ||||||
| #define IS_EFI(r)       ((r.has_efi) || (r.has_win7_efi)) | #define IS_EFI(r)       ((r.has_efi) || (r.has_win7_efi)) | ||||||
| #define IS_REACTOS(r)   (r.reactos_path[0] != 0) | #define IS_REACTOS(r)   (r.reactos_path[0] != 0) | ||||||
|  | @ -228,14 +232,18 @@ typedef struct { | ||||||
| 	BOOL has_bootmgr; | 	BOOL has_bootmgr; | ||||||
| 	BOOL has_efi; | 	BOOL has_efi; | ||||||
| 	BOOL has_win7_efi; | 	BOOL has_win7_efi; | ||||||
| 	BOOL has_isolinux; |  | ||||||
| 	BOOL has_autorun; | 	BOOL has_autorun; | ||||||
| 	BOOL has_old_c32[NB_OLD_C32]; | 	BOOL has_old_c32[NB_OLD_C32]; | ||||||
| 	BOOL has_old_vesamenu; | 	BOOL has_old_vesamenu; | ||||||
| 	BOOL has_syslinux_v5; |  | ||||||
| 	BOOL uses_minint; | 	BOOL uses_minint; | ||||||
|  | 	uint16_t sl_version;	// Syslinux/Isolinux version
 | ||||||
|  | 	char sl_version_str[12]; | ||||||
| } RUFUS_ISO_REPORT; | } RUFUS_ISO_REPORT; | ||||||
| 
 | 
 | ||||||
|  | /* Isolate the Syslinux version numbers */ | ||||||
|  | #define SL_MAJOR(x) ((uint8_t)((x)>>8)) | ||||||
|  | #define SL_MINOR(x) ((uint8_t)(x)) | ||||||
|  | 
 | ||||||
| typedef struct { | typedef struct { | ||||||
| 	uint16_t version[4]; | 	uint16_t version[4]; | ||||||
| 	uint32_t platform_min[2];		// minimum platform version required
 | 	uint32_t platform_min[2];		// minimum platform version required
 | ||||||
|  | @ -277,14 +285,16 @@ extern float fScale; | ||||||
| extern char szFolderPath[MAX_PATH], app_dir[MAX_PATH]; | extern char szFolderPath[MAX_PATH], app_dir[MAX_PATH]; | ||||||
| extern char* iso_path; | extern char* iso_path; | ||||||
| extern DWORD FormatStatus; | extern DWORD FormatStatus; | ||||||
|  | extern DWORD syslinux_ldlinux_len[2]; | ||||||
| extern RUFUS_DRIVE_INFO SelectedDrive; | extern RUFUS_DRIVE_INFO SelectedDrive; | ||||||
| extern const int nb_steps[FS_MAX]; | extern const int nb_steps[FS_MAX]; | ||||||
| extern BOOL use_own_c32[NB_OLD_C32], detect_fakes, iso_op_in_progress, format_op_in_progress; | extern BOOL use_own_c32[NB_OLD_C32], detect_fakes, iso_op_in_progress, format_op_in_progress; | ||||||
| extern RUFUS_ISO_REPORT iso_report; | extern RUFUS_ISO_REPORT iso_report; | ||||||
| extern int64_t iso_blocking_status; | extern int64_t iso_blocking_status; | ||||||
| extern uint16_t rufus_version[4]; | extern uint16_t rufus_version[4], embedded_sl_version[2]; | ||||||
| extern int nWindowsVersion; | extern int nWindowsVersion; | ||||||
| extern char WindowsVersionStr[128]; | extern char WindowsVersionStr[128]; | ||||||
|  | extern char embedded_sl_version_str[2][12]; | ||||||
| extern RUFUS_UPDATE update; | extern RUFUS_UPDATE update; | ||||||
| extern int dialog_showing; | extern int dialog_showing; | ||||||
| 
 | 
 | ||||||
|  | @ -316,7 +326,7 @@ extern BOOL Notification(int type, const notification_info* more_info, char* tit | ||||||
| extern BOOL Question(char* title, char* format, ...); | extern BOOL Question(char* title, char* format, ...); | ||||||
| extern BOOL ExtractDOS(const char* path); | extern BOOL ExtractDOS(const char* path); | ||||||
| extern BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan); | extern BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan); | ||||||
| extern BOOL ExtractISOFile(const char* iso, const char* iso_file, const char* dest_file); | extern int64_t ExtractISOFile(const char* iso, const char* iso_file, const char* dest_file); | ||||||
| extern BOOL InstallSyslinux(DWORD drive_index, char drive_letter); | extern BOOL InstallSyslinux(DWORD drive_index, char drive_letter); | ||||||
| DWORD WINAPI FormatThread(void* param); | DWORD WINAPI FormatThread(void* param); | ||||||
| extern BOOL CreateProgress(void); | extern BOOL CreateProgress(void); | ||||||
|  | @ -326,7 +336,7 @@ extern BOOL FileIO(BOOL save, char* path, char** buffer, DWORD* size); | ||||||
| extern unsigned char* GetResource(HMODULE module, char* name, char* type, const char* desc, DWORD* len, BOOL duplicate); | extern unsigned char* GetResource(HMODULE module, char* name, char* type, const char* desc, DWORD* len, BOOL duplicate); | ||||||
| extern BOOL SetLGP(BOOL bRestore, BOOL* bExistingKey, const char* szPath, const char* szPolicy, DWORD dwValue); | extern BOOL SetLGP(BOOL bRestore, BOOL* bExistingKey, const char* szPath, const char* szPolicy, DWORD dwValue); | ||||||
| extern LONG GetEntryWidth(HWND hDropDown, const char* entry); | extern LONG GetEntryWidth(HWND hDropDown, const char* entry); | ||||||
| extern BOOL DownloadFile(const char* url, const char* file, HWND hProgressDialog); | extern DWORD DownloadFile(const char* url, const char* file, HWND hProgressDialog); | ||||||
| extern HANDLE DownloadFileThreaded(const char* url, const char* file, HWND hProgressDialog); | extern HANDLE DownloadFileThreaded(const char* url, const char* file, HWND hProgressDialog); | ||||||
| extern INT_PTR CALLBACK UpdateCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); | extern INT_PTR CALLBACK UpdateCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); | ||||||
| extern BOOL SetUpdateCheck(void); | extern BOOL SetUpdateCheck(void); | ||||||
|  | @ -358,6 +368,7 @@ static __inline void *_reallocf(void *ptr, size_t size) | ||||||
| 
 | 
 | ||||||
| /* Basic String Array */ | /* Basic String Array */ | ||||||
| typedef struct { | typedef struct { | ||||||
|  | 	// TODO: rename 'Table' to 'String'
 | ||||||
| 	char** Table; | 	char** Table; | ||||||
| 	size_t Index;	// Current array size
 | 	size_t Index;	// Current array size
 | ||||||
| 	size_t Max;		// Maximum array size
 | 	size_t Max;		// Maximum array size
 | ||||||
|  | @ -366,6 +377,7 @@ extern void StrArrayCreate(StrArray* arr, size_t initial_size); | ||||||
| extern void StrArrayAdd(StrArray* arr, const char* str); | extern void StrArrayAdd(StrArray* arr, const char* str); | ||||||
| extern void StrArrayClear(StrArray* arr); | extern void StrArrayClear(StrArray* arr); | ||||||
| extern void StrArrayDestroy(StrArray* arr); | extern void StrArrayDestroy(StrArray* arr); | ||||||
|  | #define IsStrArrayEmpty(arr) (arr.Index == 0) | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * typedefs for the function prototypes. Use the something like: |  * typedefs for the function prototypes. Use the something like: | ||||||
|  | @ -389,7 +401,7 @@ static __inline HMODULE GetDLLHandle(char* szDLLName) | ||||||
| #define PF_INIT(proc, dllname) pf##proc = (proc##_t) GetProcAddress(GetDLLHandle(#dllname), #proc) | #define PF_INIT(proc, dllname) pf##proc = (proc##_t) GetProcAddress(GetDLLHandle(#dllname), #proc) | ||||||
| #define PF_INIT_OR_OUT(proc, dllname) \ | #define PF_INIT_OR_OUT(proc, dllname) \ | ||||||
| 	PF_INIT(proc, dllname); if (pf##proc == NULL) { \ | 	PF_INIT(proc, dllname); if (pf##proc == NULL) { \ | ||||||
| 	uprintf("Unable to access %s DLL: %s\n", #dllname, \ | 	uprintf("Unable to locate %s() in %s.dll: %s\n", #proc, #dllname, \ | ||||||
| 	WindowsErrorString()); goto out; } | 	WindowsErrorString()); goto out; } | ||||||
| 
 | 
 | ||||||
| /* Clang/MinGW32 has an issue with intptr_t */ | /* Clang/MinGW32 has an issue with intptr_t */ | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								src/rufus.rc
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								src/rufus.rc
									
										
									
									
									
								
							|  | @ -33,7 +33,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 | ||||||
| EXSTYLE WS_EX_APPWINDOW | EXSTYLE WS_EX_APPWINDOW | ||||||
| CAPTION "Rufus v1.4.3.385" | CAPTION "Rufus v1.4.3.386" | ||||||
| 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 | ||||||
|  | @ -288,8 +288,8 @@ END | ||||||
| // | // | ||||||
| 
 | 
 | ||||||
| VS_VERSION_INFO VERSIONINFO | VS_VERSION_INFO VERSIONINFO | ||||||
|  FILEVERSION 1,4,3,385 |  FILEVERSION 1,4,3,386 | ||||||
|  PRODUCTVERSION 1,4,3,385 |  PRODUCTVERSION 1,4,3,386 | ||||||
|  FILEFLAGSMASK 0x3fL |  FILEFLAGSMASK 0x3fL | ||||||
| #ifdef _DEBUG | #ifdef _DEBUG | ||||||
|  FILEFLAGS 0x1L |  FILEFLAGS 0x1L | ||||||
|  | @ -306,13 +306,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.3.385" |             VALUE "FileVersion", "1.4.3.386" | ||||||
|             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.3.385" |             VALUE "ProductVersion", "1.4.3.386" | ||||||
|         END |         END | ||||||
|     END |     END | ||||||
|     BLOCK "VarFileInfo" |     BLOCK "VarFileInfo" | ||||||
|  |  | ||||||
							
								
								
									
										106
									
								
								src/syslinux.c
									
										
									
									
									
								
							
							
						
						
									
										106
									
								
								src/syslinux.c
									
										
									
									
									
								
							|  | @ -30,16 +30,15 @@ | ||||||
| #include "drive.h" | #include "drive.h" | ||||||
| #include "resource.h" | #include "resource.h" | ||||||
| #include "localization.h" | #include "localization.h" | ||||||
|  | #include "msapi_utf8.h" | ||||||
| 
 | 
 | ||||||
| #include "syslinux.h" | #include "syslinux.h" | ||||||
| #include "syslxfs.h" | #include "syslxfs.h" | ||||||
| #include "libfat.h" | #include "libfat.h" | ||||||
| #include "setadv.h" | #include "setadv.h" | ||||||
| 
 | 
 | ||||||
| unsigned char* syslinux_ldlinux = NULL; | unsigned char* syslinux_ldlinux[2] = { NULL, NULL }; | ||||||
| DWORD syslinux_ldlinux_len; | DWORD syslinux_ldlinux_len[2]; | ||||||
| unsigned char* syslinux_bootsect = NULL; |  | ||||||
| DWORD syslinux_bootsect_len; |  | ||||||
| unsigned char* syslinux_mboot = NULL; | unsigned char* syslinux_mboot = NULL; | ||||||
| DWORD syslinux_mboot_len; | DWORD syslinux_mboot_len; | ||||||
| 
 | 
 | ||||||
|  | @ -78,68 +77,90 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter) | ||||||
| 	DWORD bytes_written; | 	DWORD bytes_written; | ||||||
| 	BOOL r = FALSE; | 	BOOL r = FALSE; | ||||||
| 	FILE* fd; | 	FILE* fd; | ||||||
|  | 	size_t len; | ||||||
| 
 | 
 | ||||||
| 	static unsigned char sectbuf[SECTOR_SIZE]; | 	static unsigned char sectbuf[SECTOR_SIZE]; | ||||||
| 	static char* resource[2][2] = { | 	static char* resource[2][2] = { | ||||||
| 		{ MAKEINTRESOURCEA(IDR_SL_LDLINUX_V4_SYS), MAKEINTRESOURCEA(IDR_SL_LDLINUX_V4_BSS) }, | 		{ MAKEINTRESOURCEA(IDR_SL_LDLINUX_V4_SYS), MAKEINTRESOURCEA(IDR_SL_LDLINUX_V4_BSS) }, | ||||||
| 		{ MAKEINTRESOURCEA(IDR_SL_LDLINUX_V5_SYS), MAKEINTRESOURCEA(IDR_SL_LDLINUX_V5_BSS) } }; | 		{ MAKEINTRESOURCEA(IDR_SL_LDLINUX_V5_SYS), MAKEINTRESOURCEA(IDR_SL_LDLINUX_V5_BSS) } }; | ||||||
| 	static char ldlinux_path[] = "?:\\ldlinux.sys"; | 	const char* ldlinux = "ldlinux"; | ||||||
| 	static char* ldlinux_sys = &ldlinux_path[3]; | 	const char* syslinux = "syslinux"; | ||||||
| 	const char* ldlinux_c32 = "ldlinux.c32"; | 	const char* ldlinux_ext[3] = { "sys", "bss", "c32" }; | ||||||
| 	const char* mboot_c32 = "mboot.c32"; | 	const char* mboot_c32 = "mboot.c32"; | ||||||
| 	char path[MAX_PATH]; | 	char path[MAX_PATH], tmp[64]; | ||||||
| 	struct libfat_filesystem *fs; | 	struct libfat_filesystem *fs; | ||||||
| 	libfat_sector_t s, *secp; | 	libfat_sector_t s, *secp; | ||||||
| 	libfat_sector_t *sectors = NULL; | 	libfat_sector_t *sectors = NULL; | ||||||
| 	int ldlinux_sectors; | 	int ldlinux_sectors; | ||||||
| 	uint32_t ldlinux_cluster; | 	uint32_t ldlinux_cluster; | ||||||
| 	int nsectors; | 	int i, nsectors; | ||||||
| 	int dt = (int)ComboBox_GetItemData(hBootType, ComboBox_GetCurSel(hBootType)); | 	int dt = (int)ComboBox_GetItemData(hBootType, ComboBox_GetCurSel(hBootType)); | ||||||
| 	BOOL use_v5 = (dt == DT_SYSLINUX_V5) || ((dt == DT_ISO) && (iso_report.has_syslinux_v5)); | 	BOOL use_v5 = (dt == DT_SYSLINUX_V5) || ((dt == DT_ISO) && (SL_MAJOR(iso_report.sl_version) >= 5)); | ||||||
| 
 | 
 | ||||||
| 	PrintStatus(0, TRUE, MSG_234, use_v5?5:4); | 	PrintStatus(0, TRUE, MSG_234, (dt == DT_ISO)?iso_report.sl_version_str:embedded_sl_version_str[use_v5?1:0]); | ||||||
| 
 |  | ||||||
| 	ldlinux_path[0] = drive_letter; |  | ||||||
| 
 | 
 | ||||||
| 	/* Initialize the ADV -- this should be smarter */ | 	/* Initialize the ADV -- this should be smarter */ | ||||||
| 	syslinux_reset_adv(syslinux_adv); | 	syslinux_reset_adv(syslinux_adv); | ||||||
| 
 | 
 | ||||||
| 	/* Access a copy of the ldlinux.sys & ldlinux.bss resources */ | 	/* Access a copy of the ldlinux.sys & ldlinux.bss resources (downloaded or embedded) */ | ||||||
| 	syslinux_ldlinux = GetResource(hMainInstance, resource[use_v5?1:0][0], | 	if ((syslinux_ldlinux_len[0] != 0) && (syslinux_ldlinux_len[1] != 0)) { | ||||||
| 		_RT_RCDATA, ldlinux_sys, &syslinux_ldlinux_len, TRUE); | 		_chdirU(app_dir); | ||||||
| 	syslinux_bootsect = GetResource(hMainInstance, resource[use_v5?1:0][1], | 		for (i=0; i<2; i++) { | ||||||
| 		_RT_RCDATA, "ldlinux.bss", &syslinux_bootsect_len, TRUE); | 			syslinux_ldlinux[i] = (unsigned char*) malloc(syslinux_ldlinux_len[i]); | ||||||
| 	if ((syslinux_ldlinux == NULL) || (syslinux_bootsect == NULL)) { | 			if (syslinux_ldlinux[i] == NULL) | ||||||
| 		goto out; | 				goto out; | ||||||
|  | 			static_sprintf(path, "%s/%s-%s/%s.%s", FILES_DIR, syslinux, &iso_report.sl_version_str[1], ldlinux, i==0?"sys":"bss"); | ||||||
|  | 			fd = fopen(path, "rb"); | ||||||
|  | 			if (fd == NULL) { | ||||||
|  | 				uprintf("Could not open %s\n", path); | ||||||
|  | 				goto out; | ||||||
|  | 			} | ||||||
|  | 			len = fread(syslinux_ldlinux[i], 1, (size_t)syslinux_ldlinux_len[i], fd); | ||||||
|  | 			fclose(fd); | ||||||
|  | 			if (len != (size_t)syslinux_ldlinux_len[i]) { | ||||||
|  | 				uprintf("Could not read %s\n", path); | ||||||
|  | 				goto out; | ||||||
|  | 			} | ||||||
|  | 			uprintf("Using existing './%s'\n", path); | ||||||
|  | 		} | ||||||
|  | 	} else { | ||||||
|  | 		for (i=0; i<2; i++) { | ||||||
|  | 		static_sprintf(tmp, "%s.%s", ldlinux, ldlinux_ext[i]); | ||||||
|  | 		syslinux_ldlinux[i] = GetResource(hMainInstance, resource[use_v5?1:0][i], | ||||||
|  | 			_RT_RCDATA, tmp, &syslinux_ldlinux_len[i], TRUE); | ||||||
|  | 		if (syslinux_ldlinux[i] == NULL) | ||||||
|  | 			goto out; | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/* Create ldlinux.sys file */ | 	/* Create ldlinux.sys file */ | ||||||
| 	f_handle = CreateFileA(ldlinux_path, GENERIC_READ | GENERIC_WRITE, | 	static_sprintf(path, "%C:\\%s.%s", drive_letter, ldlinux, ldlinux_ext[0]); | ||||||
|  | 	f_handle = CreateFileA(path, GENERIC_READ | GENERIC_WRITE, | ||||||
| 			  FILE_SHARE_READ | FILE_SHARE_WRITE, | 			  FILE_SHARE_READ | FILE_SHARE_WRITE, | ||||||
| 			  NULL, CREATE_ALWAYS, | 			  NULL, CREATE_ALWAYS, | ||||||
| 			  FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM | | 			  FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM | | ||||||
| 			  FILE_ATTRIBUTE_HIDDEN, NULL); | 			  FILE_ATTRIBUTE_HIDDEN, NULL); | ||||||
| 
 | 
 | ||||||
| 	if (f_handle == INVALID_HANDLE_VALUE) { | 	if (f_handle == INVALID_HANDLE_VALUE) { | ||||||
| 		uprintf("Unable to create '%s'\n", ldlinux_sys); | 		uprintf("Unable to create '%s'\n", &path[3]); | ||||||
| 		goto out; | 		goto out; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/* Write ldlinux.sys file */ | 	/* Write ldlinux.sys file */ | ||||||
| 	if (!WriteFile(f_handle, syslinux_ldlinux, syslinux_ldlinux_len, | 	if (!WriteFile(f_handle, syslinux_ldlinux[0], syslinux_ldlinux_len[0], | ||||||
| 		   &bytes_written, NULL) || | 		   &bytes_written, NULL) || | ||||||
| 		bytes_written != syslinux_ldlinux_len) { | 		bytes_written != syslinux_ldlinux_len[0]) { | ||||||
| 		uprintf("Could not write '%s'\n", ldlinux_sys); | 		uprintf("Could not write '%s'\n", &path[3]); | ||||||
| 		goto out; | 		goto out; | ||||||
| 	} | 	} | ||||||
| 	if (!WriteFile(f_handle, syslinux_adv, 2 * ADV_SIZE, | 	if (!WriteFile(f_handle, syslinux_adv, 2 * ADV_SIZE, | ||||||
| 		   &bytes_written, NULL) || | 		   &bytes_written, NULL) || | ||||||
| 		bytes_written != 2 * ADV_SIZE) { | 		bytes_written != 2 * ADV_SIZE) { | ||||||
| 		uprintf("Could not write ADV to '%s'\n", ldlinux_sys); | 		uprintf("Could not write ADV to '%s'\n", &path[3]); | ||||||
| 		goto out; | 		goto out; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	uprintf("Successfully wrote '%s'\n", ldlinux_sys); | 	uprintf("Successfully wrote '%s'\n", &path[3]); | ||||||
| 	if (dt != DT_ISO) | 	if (dt != DT_ISO) | ||||||
| 		UpdateProgress(OP_DOS, -1.0f); | 		UpdateProgress(OP_DOS, -1.0f); | ||||||
| 
 | 
 | ||||||
|  | @ -157,7 +178,7 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/* Map the file (is there a better way to do this?) */ | 	/* Map the file (is there a better way to do this?) */ | ||||||
| 	ldlinux_sectors = (syslinux_ldlinux_len + 2 * ADV_SIZE + SECTOR_SIZE - 1) >> SECTOR_SHIFT; | 	ldlinux_sectors = (syslinux_ldlinux_len[0] + 2 * ADV_SIZE + SECTOR_SIZE - 1) >> SECTOR_SHIFT; | ||||||
| 	sectors = (libfat_sector_t*) calloc(ldlinux_sectors, sizeof *sectors); | 	sectors = (libfat_sector_t*) calloc(ldlinux_sectors, sizeof *sectors); | ||||||
| 	if (sectors == NULL) | 	if (sectors == NULL) | ||||||
| 		goto out; | 		goto out; | ||||||
|  | @ -182,10 +203,10 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter) | ||||||
| 
 | 
 | ||||||
| 	/* Rewrite the file */ | 	/* Rewrite the file */ | ||||||
| 	if (SetFilePointer(f_handle, 0, NULL, FILE_BEGIN) != 0 || | 	if (SetFilePointer(f_handle, 0, NULL, FILE_BEGIN) != 0 || | ||||||
| 		!WriteFile(f_handle, syslinux_ldlinux, syslinux_ldlinux_len, | 		!WriteFile(f_handle, syslinux_ldlinux[0], syslinux_ldlinux_len[0], | ||||||
| 			   &bytes_written, NULL) | 			   &bytes_written, NULL) | ||||||
| 		|| bytes_written != syslinux_ldlinux_len) { | 		|| bytes_written != syslinux_ldlinux_len[0]) { | ||||||
| 		uprintf("Could not write '%s': %s\n", ldlinux_sys, WindowsErrorString()); | 		uprintf("Could not write '%s': %s\n", &path[3], WindowsErrorString()); | ||||||
| 		goto out; | 		goto out; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -216,16 +237,19 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter) | ||||||
| 	uprintf("Successfully wrote Syslinux boot record\n"); | 	uprintf("Successfully wrote Syslinux boot record\n"); | ||||||
| 
 | 
 | ||||||
| 	if (dt == DT_SYSLINUX_V5) { | 	if (dt == DT_SYSLINUX_V5) { | ||||||
| 		fd = fopen(ldlinux_c32, "rb"); | 		_chdirU(app_dir); | ||||||
|  | 		static_sprintf(path, "%s/%s-%s", FILES_DIR, syslinux, &embedded_sl_version_str[1][1]); | ||||||
|  | 		_chdir(path); | ||||||
|  | 		static_sprintf(path, "%C:\\%s.%s", drive_letter, ldlinux, ldlinux_ext[2]); | ||||||
|  | 		fd = fopen(&path[3], "rb"); | ||||||
| 		if (fd == NULL) { | 		if (fd == NULL) { | ||||||
| 			uprintf("Caution: No '%s' was provided. The target will be missing a required Syslinux file!\n", ldlinux_c32); | 			uprintf("Caution: No '%s' was provided. The target will be missing a required Syslinux file!\n", &path[3]); | ||||||
| 		} else { | 		} else { | ||||||
| 			fclose(fd); | 			fclose(fd); | ||||||
| 			ldlinux_path[11] = 'c'; ldlinux_path[12] = '3'; ldlinux_path[13] = '2'; | 			if (CopyFileA(&path[3], path, TRUE)) { | ||||||
| 			if (CopyFileA(ldlinux_c32, ldlinux_path, TRUE)) { | 				uprintf("Created '%s' (from '%s/%s-%s/%s')", path, FILES_DIR, syslinux, &embedded_sl_version_str[1][1], &path[3]); | ||||||
| 				uprintf("Created '%s' (from local copy)", ldlinux_path); |  | ||||||
| 			} else { | 			} else { | ||||||
| 				uprintf("Failed to create '%s': %s\n", ldlinux_path, WindowsErrorString()); | 				uprintf("Failed to create '%s': %s\n", path, WindowsErrorString()); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} else if (IS_REACTOS(iso_report)) { | 	} else if (IS_REACTOS(iso_report)) { | ||||||
|  | @ -236,7 +260,7 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter) | ||||||
| 			goto out; | 			goto out; | ||||||
| 		} | 		} | ||||||
| 		/* Create mboot.c32 file */ | 		/* Create mboot.c32 file */ | ||||||
| 		safe_sprintf(path, sizeof(path), "%c:\\%s", drive_letter, mboot_c32); | 		static_sprintf(path, "%C:\\%s", drive_letter, mboot_c32); | ||||||
| 		f_handle = CreateFileA(path, GENERIC_READ | GENERIC_WRITE, | 		f_handle = CreateFileA(path, GENERIC_READ | GENERIC_WRITE, | ||||||
| 				  FILE_SHARE_READ | FILE_SHARE_WRITE, | 				  FILE_SHARE_READ | FILE_SHARE_WRITE, | ||||||
| 				  NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); | 				  NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); | ||||||
|  | @ -251,7 +275,7 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter) | ||||||
| 			goto out; | 			goto out; | ||||||
| 		} | 		} | ||||||
| 		safe_closehandle(f_handle); | 		safe_closehandle(f_handle); | ||||||
| 		safe_sprintf(path, sizeof(path), "%c:\\syslinux.cfg", drive_letter); | 		static_sprintf(path, "%C:\\syslinux.cfg", drive_letter); | ||||||
| 		fd = fopen(path, "w"); | 		fd = fopen(path, "w"); | ||||||
| 		if (fd == NULL) { | 		if (fd == NULL) { | ||||||
| 			uprintf("Could not create ReactOS 'syslinux.cfg'\n"); | 			uprintf("Could not create ReactOS 'syslinux.cfg'\n"); | ||||||
|  | @ -269,8 +293,8 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter) | ||||||
| 	r = TRUE; | 	r = TRUE; | ||||||
| 
 | 
 | ||||||
| out: | out: | ||||||
| 	safe_free(syslinux_ldlinux); | 	safe_free(syslinux_ldlinux[0]); | ||||||
| 	safe_free(syslinux_bootsect); | 	safe_free(syslinux_ldlinux[1]); | ||||||
| 	safe_free(sectors); | 	safe_free(sectors); | ||||||
| 	safe_closehandle(d_handle); | 	safe_closehandle(d_handle); | ||||||
| 	safe_closehandle(f_handle); | 	safe_closehandle(f_handle); | ||||||
|  |  | ||||||
|  | @ -19,18 +19,14 @@ | ||||||
| #include "setadv.h" | #include "setadv.h" | ||||||
| 
 | 
 | ||||||
| /* The standard boot sector and ldlinux image */ | /* The standard boot sector and ldlinux image */ | ||||||
| extern unsigned char* syslinux_bootsect; | extern unsigned char* syslinux_ldlinux[2]; | ||||||
| extern DWORD syslinux_bootsect_len; | extern DWORD syslinux_ldlinux_len[2]; | ||||||
| extern const int syslinux_bootsect_mtime; | extern const int syslinux_ldlinux_mtime[2]; | ||||||
| 
 | 
 | ||||||
| extern unsigned char* syslinux_ldlinux; | #define boot_sector	syslinux_ldlinux[1] | ||||||
| extern DWORD syslinux_ldlinux_len; | #define boot_sector_len syslinux_ldlinux_len[1] | ||||||
| extern const int syslinux_ldlinux_mtime; | #define boot_image	syslinux_ldlinux[0] | ||||||
| 
 | #define boot_image_len	syslinux_ldlinux_len[0] | ||||||
| #define boot_sector	syslinux_bootsect |  | ||||||
| #define boot_sector_len syslinux_bootsect_len |  | ||||||
| #define boot_image	syslinux_ldlinux |  | ||||||
| #define boot_image_len	syslinux_ldlinux_len |  | ||||||
| 
 | 
 | ||||||
| extern unsigned char syslinux_mbr[]; | extern unsigned char syslinux_mbr[]; | ||||||
| extern const unsigned int syslinux_mbr_len; | extern const unsigned int syslinux_mbr_len; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue