mirror of
				https://github.com/pbatard/rufus.git
				synced 2024-08-14 23:57:05 +00:00 
			
		
		
		
	[syslinux] update Syslinux to v6.03
* Also add experimental support for Syslinux/NTFS * Closes #391
This commit is contained in:
		
							parent
							
								
									37ffbabaaf
								
							
						
					
					
						commit
						6ca024ae3b
					
				
					 23 changed files with 747 additions and 140 deletions
				
			
		|  | @ -294,7 +294,7 @@ t MSG_112 "Formatting a large UDF volumes can take a lot of time. At USB 2.0 spe | ||||||
| 	"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%s but this application only includes the installation files for " | t MSG_114 "This image uses Syslinux %s%s but this application only includes the installation files for " | ||||||
| 	"Syslinux %s.\n\nAs new versions of Syslinux are not compatible with one another, and it wouldn't " | 	"Syslinux %s%s.\n\nAs new versions of Syslinux are not compatible with one another, and it wouldn't " | ||||||
| 	"be possible for Rufus to include them all, two additional files must be downloaded from the " | 	"be possible for Rufus to include them all, two additional files must be downloaded from the " | ||||||
| 	"Internet ('ldlinux.sys' and 'ldlinux.bss'):\n" | 	"Internet ('ldlinux.sys' and 'ldlinux.bss'):\n" | ||||||
| 	"- Select 'Yes' to connect to the Internet and download these files\n" | 	"- Select 'Yes' to connect to the Internet and download these files\n" | ||||||
|  | @ -686,7 +686,7 @@ t MSG_112 "فرمتة وحدات تخزين UDF كبيرة تستغرق وقتا | ||||||
| 	"للفرمتة هي: %d:%02d, خلالها شريط التقدّم سيظهر مجمّد. يرجى التحلّي بالصبر!" | 	"للفرمتة هي: %d:%02d, خلالها شريط التقدّم سيظهر مجمّد. يرجى التحلّي بالصبر!" | ||||||
| t MSG_113 "وحدة تخزين UDF كبيرة" | t MSG_113 "وحدة تخزين UDF كبيرة" | ||||||
| t MSG_114 "هذه الصورة (الإيميج) تستخدم Syslinux %s%s ولكن هذا التطبيق يشمل فقط ملفات التثبيت لـ " | t MSG_114 "هذه الصورة (الإيميج) تستخدم Syslinux %s%s ولكن هذا التطبيق يشمل فقط ملفات التثبيت لـ " | ||||||
| 	"Syslinux %s. \n\nفالإصدارات الجديدة من Syslinux لا تتلاءم مع بعضها البعض, وأنه " | 	"Syslinux %s%s. \n\nفالإصدارات الجديدة من Syslinux لا تتلاءم مع بعضها البعض, وأنه " | ||||||
| 	"من غير الممكن لروفوس إحتواء الكل, يجب تحميل ملفين إضافيين من " | 	"من غير الممكن لروفوس إحتواء الكل, يجب تحميل ملفين إضافيين من " | ||||||
| 	"الإنترنت('ldlinux.sys' و 'ldlinux.bss'):\n" | 	"الإنترنت('ldlinux.sys' و 'ldlinux.bss'):\n" | ||||||
| 	"- إختر ‘نعم’ للإتصال بالإنترنت وتحميل الملفات\n" | 	"- إختر ‘نعم’ للإتصال بالإنترنت وتحميل الملفات\n" | ||||||
|  | @ -1118,7 +1118,7 @@ t MSG_112 "Форматирането на голям UDF дял може да  | ||||||
| 	"време е  %d:%02d, при което процесната лента че изглежда не активна. Моля бъдете търпеливи!" | 	"време е  %d:%02d, при което процесната лента че изглежда не активна. Моля бъдете търпеливи!" | ||||||
| t MSG_113 "Голям UDF дял" | t MSG_113 "Голям UDF дял" | ||||||
| t MSG_114 "Този образ използва Syslinux %s%s но тази програма включва само инсталационни файлове за" | t MSG_114 "Този образ използва Syslinux %s%s но тази програма включва само инсталационни файлове за" | ||||||
| 	"Syslinux %s.\n\nТъй като новите версии на Syslinux не са съвместими една с друга, и няма да е  " | 	"Syslinux %s%s.\n\nТъй като новите версии на Syslinux не са съвместими една с друга, и няма да е  " | ||||||
| 	"възможно за Rufus да ги включи всичките, два допълнителни файлове трябва да бъдат изтеглени от " | 	"възможно за Rufus да ги включи всичките, два допълнителни файлове трябва да бъдат изтеглени от " | ||||||
| 	"Интернет ('ldlinux.sys' и 'ldlinux.bss'):\n" | 	"Интернет ('ldlinux.sys' и 'ldlinux.bss'):\n" | ||||||
| 	"- Изберете 'Yes' за да се свържете с интернет и да изтеглите тези файлове\n" | 	"- Изберете 'Yes' за да се свържете с интернет и да изтеглите тези файлове\n" | ||||||
|  | @ -1489,7 +1489,7 @@ t MSG_111 "不支持的簇大小" | ||||||
| t MSG_112 "格式化较大的 UDF 卷可能需要很长时间。过程中进度条可能会呈禁止状态,属于正常现象。" | t MSG_112 "格式化较大的 UDF 卷可能需要很长时间。过程中进度条可能会呈禁止状态,属于正常现象。" | ||||||
| 	"请耐心等待!\nUSB 2.0 设备预计剩余时间:%d:%02d" | 	"请耐心等待!\nUSB 2.0 设备预计剩余时间:%d:%02d" | ||||||
| t MSG_113 "大容量 UDF 卷" | t MSG_113 "大容量 UDF 卷" | ||||||
| t MSG_114 "此镜像使用的更新版本的 Syslinux %s%s,此程序内置的 Syslinux %s 不支持更新版本。\n\n" | t MSG_114 "此镜像使用的更新版本的 Syslinux %s%s,此程序内置的 Syslinux %s%s 不支持更新版本。\n\n" | ||||||
| 	"Rufus 需要下载两个文件:'ldlinux.sys' 和 'ldlinux.bss'\n" | 	"Rufus 需要下载两个文件:'ldlinux.sys' 和 'ldlinux.bss'\n" | ||||||
| 	"- 选择 '是' 连接网络下载文件\n" | 	"- 选择 '是' 连接网络下载文件\n" | ||||||
| 	"- 选择 '否' 取消此项操作\n\n" | 	"- 选择 '否' 取消此项操作\n\n" | ||||||
|  | @ -1859,7 +1859,7 @@ t MSG_111 "不相容的配置單元大小" | ||||||
| t MSG_112 "磁碟區較大的 UDF 格式化作業時間較久,過程中進度列表可能會呈現靜止狀態、乃屬正常現象,請耐心等候。" | t MSG_112 "磁碟區較大的 UDF 格式化作業時間較久,過程中進度列表可能會呈現靜止狀態、乃屬正常現象,請耐心等候。" | ||||||
| 	"估計剩餘時間: %d:%02d" | 	"估計剩餘時間: %d:%02d" | ||||||
| t MSG_113 "大 UDF 磁碟區" | t MSG_113 "大 UDF 磁碟區" | ||||||
| t MSG_114 "此映像檔使用到 Syslinux %s%s,但本軟體僅支援 Syslinux %s 安裝檔案。\n\n" | t MSG_114 "此映像檔使用到 Syslinux %s%s,但本軟體僅支援 Syslinux %s%s 安裝檔案。\n\n" | ||||||
| 	"由於不同版本的 Syslinux 互不相容,因此需額外下載以下擴充檔案: \n" | 	"由於不同版本的 Syslinux 互不相容,因此需額外下載以下擴充檔案: \n" | ||||||
| 	"'ldlinux.sys' 和 'ldlinux.bss'\n" | 	"'ldlinux.sys' 和 'ldlinux.bss'\n" | ||||||
| 	"如欲下載這份檔案,請選擇「是」,Rufus 將會自動上網下載。若要終止作業,請選擇「否」\n\n" | 	"如欲下載這份檔案,請選擇「是」,Rufus 將會自動上網下載。若要終止作業,請選擇「否」\n\n" | ||||||
|  | @ -2245,7 +2245,7 @@ t MSG_112 "Formatiranje velike UDF jedinice može potrajati. Pri USB 2.0 brzini, | ||||||
| 	" %d:%02d " | 	" %d:%02d " | ||||||
| t MSG_113 "Velika UDF jedinica" | t MSG_113 "Velika UDF jedinica" | ||||||
| t MSG_114 "Ova slika koristi Syslinux %s%s ali ova aplikacija samo uključuje datoteke za " | t MSG_114 "Ova slika koristi Syslinux %s%s ali ova aplikacija samo uključuje datoteke za " | ||||||
| 	"Syslinux %s.\n\nPošto nove ver. Syslinux nisu kompatibilne jedna s drugom, " | 	"Syslinux %s%s.\n\nPošto nove ver. Syslinux nisu kompatibilne jedna s drugom, " | ||||||
| 	"dvije dodatne datoteke se trebaju preuzeti sa" | 	"dvije dodatne datoteke se trebaju preuzeti sa" | ||||||
| 	"interneta: ('ldlinux.sys' i 'ldlinux.bss')\n" | 	"interneta: ('ldlinux.sys' i 'ldlinux.bss')\n" | ||||||
| 	"- Odaberite 'Da' kako bi se datoteke preuzele\n" | 	"- Odaberite 'Da' kako bi se datoteke preuzele\n" | ||||||
|  | @ -2646,7 +2646,7 @@ t MSG_112 "Formátování velkých UDF svazků může trvat delší čas. Při r | ||||||
| 	"formátování trvat přibližně %d:%02d, ukazatel průběhu operace je během formátování zdánlivě nefunkční. Buďte trpělivý! " | 	"formátování trvat přibližně %d:%02d, ukazatel průběhu operace je během formátování zdánlivě nefunkční. Buďte trpělivý! " | ||||||
| t MSG_113 "Velký UDF svazku" | t MSG_113 "Velký UDF svazku" | ||||||
| t MSG_114 "Tento obraz používá Syslinux %s%s, tato aplikace však obsahuje pouze instalační soubory pro " | t MSG_114 "Tento obraz používá Syslinux %s%s, tato aplikace však obsahuje pouze instalační soubory pro " | ||||||
| 	"Syslinux %s.\n\nJelikož nové verze Syslinux nejsou vzájemně kompatibilní a není možné v programu Rufus " | 	"Syslinux %s%s.\n\nJelikož nové verze Syslinux nejsou vzájemně kompatibilní a není možné v programu Rufus " | ||||||
| 	"zahrnout všechny verze, je nutné z Internetu stáhnout dodatečné dva soubory  " | 	"zahrnout všechny verze, je nutné z Internetu stáhnout dodatečné dva soubory  " | ||||||
| 	"(ldlinux.sys a ldlinux.bss):\n" | 	"(ldlinux.sys a ldlinux.bss):\n" | ||||||
| 	"- Zvolte 'Ano' pro stažení souborů z Internetu\n" | 	"- Zvolte 'Ano' pro stažení souborů z Internetu\n" | ||||||
|  | @ -3042,7 +3042,7 @@ t MSG_112 "Formatering af en stor UDF volume kan tage lang tid. Ved USB 2.0 hast | ||||||
| 	"formatering %d:%02d, hvorunder statuslinjen forekommer frosset. Vær tålmodig!" | 	"formatering %d:%02d, hvorunder statuslinjen forekommer frosset. Vær tålmodig!" | ||||||
| t MSG_113 "Stor UDF volume" | t MSG_113 "Stor UDF volume" | ||||||
| t MSG_114 "Dette image benytter Syslinux %s%s men denne applikation indeholder kun installationsfilerne til " | t MSG_114 "Dette image benytter Syslinux %s%s men denne applikation indeholder kun installationsfilerne til " | ||||||
| 	"Syslinux %s.\n\nDa nye versioner af Syslinux ikke er kompatible med hinanden, og det desuden ikke " | 	"Syslinux %s%s.\n\nDa nye versioner af Syslinux ikke er kompatible med hinanden, og det desuden ikke " | ||||||
| 	"ville være muligt for Rufus at inkludere dem alle, er det nødvendigt at hente to yderligere filer fra " | 	"ville være muligt for Rufus at inkludere dem alle, er det nødvendigt at hente to yderligere filer fra " | ||||||
| 	"nettet ('ldlinux.sys' and 'ldlinux.bss'):\n" | 	"nettet ('ldlinux.sys' and 'ldlinux.bss'):\n" | ||||||
| 	"- Vælg 'Ja' for at tilslutte internet og hente disse filer\n" | 	"- Vælg 'Ja' for at tilslutte internet og hente disse filer\n" | ||||||
|  | @ -3429,7 +3429,7 @@ t MSG_111 "Incompatibel Clustergrootte" | ||||||
| t MSG_112 "Het formatteren van grote UDF volumes kan een lange tijd duren..." | t MSG_112 "Het formatteren van grote UDF volumes kan een lange tijd duren..." | ||||||
| t MSG_113 "Grote UDF volume" | t MSG_113 "Grote UDF volume" | ||||||
| t MSG_114 "Deze image maakt gebruik van Syslinux %s%s maar de applicatie bevat alleen de installatiebestanden voor"  | t MSG_114 "Deze image maakt gebruik van Syslinux %s%s maar de applicatie bevat alleen de installatiebestanden voor"  | ||||||
| 	"Syslinux %s.\n\nOmdat oude en nieuwe versies van Syslinux niet compatibel zijn met elkaar, en het niet mogelijk is voor Rufus om alle versies te beheren," | 	"Syslinux %s%s.\n\nOmdat oude en nieuwe versies van Syslinux niet compatibel zijn met elkaar, en het niet mogelijk is voor Rufus om alle versies te beheren," | ||||||
| 	"moeten twee extra bestanden gedownload worden van het internet ('ldlinux.sys' en 'ldlinux.bss'):\n" | 	"moeten twee extra bestanden gedownload worden van het internet ('ldlinux.sys' en 'ldlinux.bss'):\n" | ||||||
| 	"- Klik op 'Ja' om via internet deze bestanden te downloaden\n"      | 	"- Klik op 'Ja' om via internet deze bestanden te downloaden\n"      | ||||||
| 	"- Klik op 'Nee' om de opdracht te annuleren\n\n" | 	"- Klik op 'Nee' om de opdracht te annuleren\n\n" | ||||||
|  | @ -3824,7 +3824,7 @@ t MSG_112 "Suurten UDF-asemien alustus voi kestää kauan. USB 2.0-nopeuksilla a | ||||||
| 	"kesto on %d:%02d, minkä aikana etenemispalkki vaikuttaa pysähtyneeltä. Ole kärsivällinen!" | 	"kesto on %d:%02d, minkä aikana etenemispalkki vaikuttaa pysähtyneeltä. Ole kärsivällinen!" | ||||||
| t MSG_113 "Suuri UDF-asema" | t MSG_113 "Suuri UDF-asema" | ||||||
| t MSG_114 "Tämä kuva käyttää Syslinuxia %s%s, mutta tämä sovellus sisältää asennustiedostot vain " | t MSG_114 "Tämä kuva käyttää Syslinuxia %s%s, mutta tämä sovellus sisältää asennustiedostot vain " | ||||||
| 	"Syslinuxille %s.\n\nKoska Syslinuxin uudet versiot eivät ole keskenään yhteensopivia, eikä Rufus  " | 	"Syslinuxille %s%s.\n\nKoska Syslinuxin uudet versiot eivät ole keskenään yhteensopivia, eikä Rufus  " | ||||||
| 	"voisi sisältää niitä kaikkia, on kaksi lisätiedostoa ladattava internetistä " | 	"voisi sisältää niitä kaikkia, on kaksi lisätiedostoa ladattava internetistä " | ||||||
| 	"('ldlinux.sys' ja 'ldlinux.bss'):\n" | 	"('ldlinux.sys' ja 'ldlinux.bss'):\n" | ||||||
| 	"- Valitse 'Kyllä' yhdistääksesi internetiin ja ladataksesi nämä tiedostot\n" | 	"- Valitse 'Kyllä' yhdistääksesi internetiin ja ladataksesi nämä tiedostot\n" | ||||||
|  | @ -4202,7 +4202,7 @@ t MSG_111 "Taille de clusters incompatible" | ||||||
| t MSG_112 "Le formatage d'un volume UDF de grande taille peut prendre beaucoup de temps. Aux vitesses USB 2.0, " | t MSG_112 "Le formatage d'un volume UDF de grande taille peut prendre beaucoup de temps. Aux vitesses USB 2.0, " | ||||||
| 	"la durée de formatage estimée est %d :%02d, pendant laquelle la barre de progrès semblera gelée. Veuillez être patient !" | 	"la durée de formatage 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%s mais l'application inclus seulement les fichiers d'installation pour Syslinux %s.\n\n" | t MSG_114 "Cette image utilise Syslinux %s%s mais l'application inclus seulement les fichiers d'installation pour Syslinux %s%s.\n\n" | ||||||
| 	"Comme les nouvelles versions de Syslinux sont incompatibles entre elles, et il n'est pas possible à Rufus de toutes " | 	"Comme les nouvelles versions de Syslinux sont incompatibles entre elles, et il n'est pas possible à Rufus de toutes " | ||||||
| 	"les inclure, deux fichiers supplémentaires ('ldlinux.sys' et 'ldlinux.bss') doivent être téléchargés :\n" | 	"les inclure, deux fichiers supplémentaires ('ldlinux.sys' et 'ldlinux.bss') doivent être téléchargés :\n" | ||||||
| 	"- Choisissez 'Oui' pour télécharger ces fichier depuis Internet\n" | 	"- Choisissez 'Oui' pour télécharger ces fichier depuis Internet\n" | ||||||
|  | @ -4582,7 +4582,7 @@ t MSG_110 "MS-DOS kann nicht von einem Laufwerk starten, das 64 Kilobyte große | ||||||
| t MSG_111 "Inkompatible Zuordnungseinheitengröße" | t MSG_111 "Inkompatible Zuordnungseinheitengröße" | ||||||
| t MSG_112 "Großes UDF-Laufwerke zu formatieren, kann viel Zeit benötigen..." | t MSG_112 "Großes UDF-Laufwerke zu formatieren, kann viel Zeit benötigen..." | ||||||
| t MSG_113 "Großes UDF-Laufwerk" | t MSG_113 "Großes UDF-Laufwerk" | ||||||
| t MSG_114 "Dieses Abbild benutzt Syslinux %s%s, aber diese Anwendung verfügt nur über Installationsdateien für Syslinux %s.\n\n" | t MSG_114 "Dieses Abbild benutzt Syslinux %s%s, aber diese Anwendung verfügt nur über Installationsdateien für Syslinux %s%s.\n\n" | ||||||
| 	"Neuere Syslinux-Versionen sind untereinander nicht kompatibel. Rufus kann nicht alle Versionen unterstützen. " | 	"Neuere Syslinux-Versionen sind untereinander nicht kompatibel. Rufus kann nicht alle Versionen unterstützen. " | ||||||
| 	"Zwei zusätzliche Dateien müssen vom Internet heruntergeladen werden ('ldlinux.sys' and 'ldlinux.bss'):\n" | 	"Zwei zusätzliche Dateien müssen vom Internet heruntergeladen werden ('ldlinux.sys' and 'ldlinux.bss'):\n" | ||||||
| 	"- Wählen Sie 'Ja', um dem Download zuzustimmen oder\n" | 	"- Wählen Sie 'Ja', um dem Download zuzustimmen oder\n" | ||||||
|  | @ -5011,7 +5011,7 @@ t MSG_112 "Η διαμόρφωση μεγάλων τόμων UDF ίσως δια | ||||||
| 	"είναι %d:%02d. Κατά την διάρκεια της διαμόρφωσης η μπάρα προόδου θα είναι στατική. Παρακαλώ περιμένετε!" | 	"είναι %d:%02d. Κατά την διάρκεια της διαμόρφωσης η μπάρα προόδου θα είναι στατική. Παρακαλώ περιμένετε!" | ||||||
| t MSG_113 "Mεγάλος τόμος UDF" | t MSG_113 "Mεγάλος τόμος UDF" | ||||||
| t MSG_114 "Αυτό το είδωλο χρησιμοποιεί το Syslinux %s%s παρόλα αυτά η εφαρμογή(Rufus) εμπεριέχει μόνο τα αρχεία εγκατάστασης του " | t MSG_114 "Αυτό το είδωλο χρησιμοποιεί το Syslinux %s%s παρόλα αυτά η εφαρμογή(Rufus) εμπεριέχει μόνο τα αρχεία εγκατάστασης του " | ||||||
| 	"Syslinux %s.\n\n Εφόσον οι νέες εκδόσεις του Syslinux δεν είναι συμβατές μεταξύ τους, δεν είναι δυνατό για το Rufus" | 	"Syslinux %s%s.\n\n Εφόσον οι νέες εκδόσεις του Syslinux δεν είναι συμβατές μεταξύ τους, δεν είναι δυνατό για το Rufus" | ||||||
| 	"να τις εμπεριέχει όλες. Επομένως, απαιτείται η λήψη δύο νέων αρχείων απο το διαδίκτυο ('ldlinux.sys' και 'ldlinux.bss'): \n" | 	"να τις εμπεριέχει όλες. Επομένως, απαιτείται η λήψη δύο νέων αρχείων απο το διαδίκτυο ('ldlinux.sys' και 'ldlinux.bss'): \n" | ||||||
| 	"- Επιλέξτε το 'Ναι' για να συνδεθείτε στο διαδίκτυο και να κάνετε λήψη των αρχείων\n" | 	"- Επιλέξτε το 'Ναι' για να συνδεθείτε στο διαδίκτυο και να κάνετε λήψη των αρχείων\n" | ||||||
| 	"- Επιλέξτε το 'Όχι' για να ακυρώσετε τη λειτουργία.\n" | 	"- Επιλέξτε το 'Όχι' για να ακυρώσετε τη λειτουργία.\n" | ||||||
|  | @ -6155,7 +6155,7 @@ t MSG_112 "La formattazione di un volume UDF di grandi dimensioni può richieder | ||||||
| 	"per la formattazione sarà di %d:%02d, durante il quale la barra di progresso non verrà aggiornata. Attendi il completamento dell'operazione!" | 	"per la formattazione sarà di %d:%02d, durante il quale la barra di progresso non verrà aggiornata. Attendi il completamento dell'operazione!" | ||||||
| t MSG_113 "Voume UDF di grandi dimensioni" | t MSG_113 "Voume UDF di grandi dimensioni" | ||||||
| t MSG_114 "Questa immagine usa Syslinux %s%s ma questa applicazione include solo i file di installazione per " | t MSG_114 "Questa immagine usa Syslinux %s%s ma questa applicazione include solo i file di installazione per " | ||||||
| 	"Syslinux %s.\n\nPoiché le nuove versioni di Syslinux non sono compatibili con le precedenti e " | 	"Syslinux %s%s.\n\nPoiché le nuove versioni di Syslinux non sono compatibili con le precedenti e " | ||||||
| 	"non sarebbe possibile per Rufus includerle tutte, devono essere scaricati da Internet due file aggiuntivi " | 	"non sarebbe possibile per Rufus includerle tutte, devono essere scaricati da Internet due file aggiuntivi " | ||||||
| 	"('ldlinux.sys' e 'ldlinux.bss'):\n" | 	"('ldlinux.sys' e 'ldlinux.bss'):\n" | ||||||
| 	"- Seleziona 'Sì' per collegarti a internet e scaricare questi due file\n" | 	"- Seleziona 'Sì' per collegarti a internet e scaricare questi due file\n" | ||||||
|  | @ -6559,7 +6559,7 @@ t MSG_111 "互換性がないクラスタサイズです。" | ||||||
| t MSG_112 "大きいUDFボリュームがフォーマットするは時間がかかれます。USB2.0スピードで、 " | t MSG_112 "大きいUDFボリュームがフォーマットするは時間がかかれます。USB2.0スピードで、 " | ||||||
| 	"フォーマットの推定持続は%d:%02d。この時間の間にプログレスバーは凍結用に見えます。こんな時間にちょっと待って下さい。" | 	"フォーマットの推定持続は%d:%02d。この時間の間にプログレスバーは凍結用に見えます。こんな時間にちょっと待って下さい。" | ||||||
| t MSG_113 "大きいUDFボリューム" | t MSG_113 "大きいUDFボリューム" | ||||||
| t MSG_114 "このイメージは Syslinux %s%s を使うが、このアプリケーションは Syslinux %s のインストール " | t MSG_114 "このイメージは Syslinux %s%s を使うが、このアプリケーションは Syslinux %s%s のインストール " | ||||||
| 	"ファイルだけあります。\n\nSyslinuxの新バージョンは互いに互換性のないから、RufusはSyslinkのすべて " | 	"ファイルだけあります。\n\nSyslinuxの新バージョンは互いに互換性のないから、RufusはSyslinkのすべて " | ||||||
| 	"を含めれません。インタネットから二つのファイルはダウンロードしなければならない。 " | 	"を含めれません。インタネットから二つのファイルはダウンロードしなければならない。 " | ||||||
| 	"('ldlinux.sys' and 'ldlinux.bss'):\n" | 	"('ldlinux.sys' and 'ldlinux.bss'):\n" | ||||||
|  | @ -6956,7 +6956,7 @@ t MSG_112 "큰 UDF 볼륨을 포맷하려면 시간이 많이 걸릴 수 있습 | ||||||
| 	"%d:%02d 입니다. 포맷 중 진행바가 멈춤상태로 있을 수도 있습니다. 기다려주십시오!" | 	"%d:%02d 입니다. 포맷 중 진행바가 멈춤상태로 있을 수도 있습니다. 기다려주십시오!" | ||||||
| t MSG_113 "큰 UDF 볼륨" | t MSG_113 "큰 UDF 볼륨" | ||||||
| t MSG_114 "이 이미지는 Syslinux를 하지만 %s%s 이 프로그램에는 Syslinux의 설치 파일만 포함되어 있습니다. " | t MSG_114 "이 이미지는 Syslinux를 하지만 %s%s 이 프로그램에는 Syslinux의 설치 파일만 포함되어 있습니다. " | ||||||
| 	"Syslinux %s.\n\nSyslinux의 새 버전은 서로 호환되지 않으며, Rufus가 새 버전 모두를 포함하는 것은 불가능합니다." | 	"Syslinux %s%s.\n\nSyslinux의 새 버전은 서로 호환되지 않으며, Rufus가 새 버전 모두를 포함하는 것은 불가능합니다." | ||||||
| 	"다음 두 개의 추가 파일을 인터넷에서 다운로드 하십시오." | 	"다음 두 개의 추가 파일을 인터넷에서 다운로드 하십시오." | ||||||
| 	"('ldlinux.sys' and 'ldlinux.bss'):\n" | 	"('ldlinux.sys' and 'ldlinux.bss'):\n" | ||||||
| 	"- '예'를 선택하면 인터넷에 연결하여 두 개의 파일을 다운로드합니다.\n" | 	"- '예'를 선택하면 인터넷에 연결하여 두 개의 파일을 다운로드합니다.\n" | ||||||
|  | @ -7376,7 +7376,7 @@ t MSG_112 "Large UDF disku formatēšana var aizņemt daudz laika. Izmantojot US | ||||||
| 	"ilgums ir %d:%02d, kura laikā izpildes līnija var apstāties. Esiet pacietīgi!" | 	"ilgums ir %d:%02d, kura laikā izpildes līnija var apstāties. Esiet pacietīgi!" | ||||||
| t MSG_113 "Large UDF disks" | t MSG_113 "Large UDF disks" | ||||||
| t MSG_114 "Šis imidžs izmanto Syslinux %s%s, bet aplikācija satur instalācijas failus " | t MSG_114 "Šis imidžs izmanto Syslinux %s%s, bet aplikācija satur instalācijas failus " | ||||||
| 	"Syslinux %s.\n\nTā kā jaunās Syslinux versijas nav savstarpēji atbalstāmas, nepieciešams " | 	"Syslinux %s%s.\n\nTā kā jaunās Syslinux versijas nav savstarpēji atbalstāmas, nepieciešams " | ||||||
| 	"no interneta ielādēt nepieciešamos failus ('ldlinux.sys' un 'ldlinux.bss'):\n" | 	"no interneta ielādēt nepieciešamos failus ('ldlinux.sys' un 'ldlinux.bss'):\n" | ||||||
| 	"- Izvēlieties 'Jā' lai pieslēgtos pie interneta un ielādētu šos failus\n" | 	"- Izvēlieties 'Jā' lai pieslēgtos pie interneta un ielādētu šos failus\n" | ||||||
| 	"- Izvēlieties 'Nē' lai atceltu šo operāciju\n\n" | 	"- Izvēlieties 'Nē' lai atceltu šo operāciju\n\n" | ||||||
|  | @ -7793,7 +7793,7 @@ t MSG_112 "Didelių UDF tomų formatavimas gali užimti daug laiko. USB 2.0 grei | ||||||
| 	"trukmė yra %d:%02d, tuo metu eigos juosta gali atrodyti sustingusi. Prašau kantrybės!" | 	"trukmė yra %d:%02d, tuo metu eigos juosta gali atrodyti sustingusi. Prašau kantrybės!" | ||||||
| t MSG_113 "Didelis UDF tomas" | t MSG_113 "Didelis UDF tomas" | ||||||
| t MSG_114 "Šis atvaizdas naudoja Syslinux %s%s, bet ši programa turi tik diegimo failus, skirtus " | t MSG_114 "Šis atvaizdas naudoja Syslinux %s%s, bet ši programa turi tik diegimo failus, skirtus " | ||||||
| 	"Syslinux %s.\n\nKadangi naujos Syslinux versijos tarpusavyje nesuderinamos, ir nėra galimybės " | 	"Syslinux %s%s.\n\nKadangi naujos Syslinux versijos tarpusavyje nesuderinamos, ir nėra galimybės " | ||||||
| 	"į Rufus įtraukti jas visas, du papildomi failai turi būti atsisiųsti iš " | 	"į Rufus įtraukti jas visas, du papildomi failai turi būti atsisiųsti iš " | ||||||
| 	"interneto ('ldlinux.sys' ir 'ldlinux.bss'):\n" | 	"interneto ('ldlinux.sys' ir 'ldlinux.bss'):\n" | ||||||
| 	"- Pasirinkite 'Taip' norėdami prisijungti prie interneto ir atsisiųsti šiuos failus\n" | 	"- Pasirinkite 'Taip' norėdami prisijungti prie interneto ir atsisiųsti šiuos failus\n" | ||||||
|  | @ -8217,7 +8217,7 @@ t MSG_112 "Pemformattan jilid UDF yang besar mengambil masa yang amat lama. Pada | ||||||
| 	"adalah %d:%02d, di mana bar kemajuan akan lihat seperti ia tidak bergerak. Tolong bersabar" | 	"adalah %d:%02d, di mana bar kemajuan akan lihat seperti ia tidak bergerak. Tolong bersabar" | ||||||
| t MSG_113 "Jilid UDF besar" | t MSG_113 "Jilid UDF besar" | ||||||
| t MSG_114 "Imej ini menggunakan Syslinux %s%s tetapi aplikasi ini hanya mempunyai fail pemasangan untuk" | t MSG_114 "Imej ini menggunakan Syslinux %s%s tetapi aplikasi ini hanya mempunyai fail pemasangan untuk" | ||||||
| 	"Syslinux %s.\n\nOleh kerana versi-versi baharu Syslinux tidak serasi dengan satu sama lain, maka tidak" | 	"Syslinux %s%s.\n\nOleh kerana versi-versi baharu Syslinux tidak serasi dengan satu sama lain, maka tidak" | ||||||
| 	"wajarlah Rufus menyediakan semuanya, dua fail tambahan perlu dimuat turun dari" | 	"wajarlah Rufus menyediakan semuanya, dua fail tambahan perlu dimuat turun dari" | ||||||
| 	"Internet ('ldlinux.sys' dan 'ldlinux.bss'):\n" | 	"Internet ('ldlinux.sys' dan 'ldlinux.bss'):\n" | ||||||
| 	"- Pilih 'Ya' untuk menyambung ke Internet dan memuat turun fail tersebut\n" | 	"- Pilih 'Ya' untuk menyambung ke Internet dan memuat turun fail tersebut\n" | ||||||
|  | @ -8638,7 +8638,7 @@ t MSG_112 "Formatowanie dużych woluminów UDF może zająć dużo czasu. Przy p | ||||||
| 	"formatowania wynosi %d:%02d, podczas którego pasek postępu będzie wysawał się być zamrożony. Proszę być cierpliwym!" | 	"formatowania wynosi %d:%02d, podczas którego pasek postępu będzie wysawał się być zamrożony. Proszę być cierpliwym!" | ||||||
| t MSG_113 "Duży wolumin UDF" | t MSG_113 "Duży wolumin UDF" | ||||||
| t MSG_114 "Ten obraz używa Syslinux %s%s lecz ta aplikacja dołącza pliki instalacyjne tylko dla " | t MSG_114 "Ten obraz używa Syslinux %s%s lecz ta aplikacja dołącza pliki instalacyjne tylko dla " | ||||||
| 	"Syslinux %s.\n\nPonieważ nowa wersja Syslinux nie jest kompatybilna z inną i nie jest " | 	"Syslinux %s%s.\n\nPonieważ nowa wersja Syslinux nie jest kompatybilna z inną i nie jest " | ||||||
| 	"możliwe dla Rufusa aby załączyć je wszystkie, dwa dodatkowe pliki muszą być pobrane " | 	"możliwe dla Rufusa aby załączyć je wszystkie, dwa dodatkowe pliki muszą być pobrane " | ||||||
| 	"z Internetu ('ldlinux.sys' oraz 'ldlinux.bss'):\n" | 	"z Internetu ('ldlinux.sys' oraz 'ldlinux.bss'):\n" | ||||||
| 	"- Wybierz 'Tak' aby połączyć z Internetem i pobrać te pliki\n" | 	"- Wybierz 'Tak' aby połączyć z Internetem i pobrać te pliki\n" | ||||||
|  | @ -8873,7 +8873,7 @@ t MSG_104 "Syslinux v5.0 ou posterior requer que esteja instalado um arquivo '%s | ||||||
| t MSG_110 "MS-DOS não inicia um disco com um tamanho de cluster de 64 kilobytes.\n" | t MSG_110 "MS-DOS não inicia um disco com um tamanho de cluster de 64 kilobytes.\n" | ||||||
| 	"Por favor altere o tamanho de cluster ou use FreeDOS." | 	"Por favor altere o tamanho de cluster ou use FreeDOS." | ||||||
| t MSG_114 "Esta imagem usa Syslinux %s%s, mas este aplicativo inclui somente os arquivos de instalação para " | t MSG_114 "Esta imagem usa Syslinux %s%s, mas este aplicativo inclui somente os arquivos de instalação para " | ||||||
| 	"Syslinux %s.\n\nComo novas versões de Syslinux não são compatíveis entre si, e que não " | 	"Syslinux %s%s.\n\nComo novas versões de Syslinux não são compatíveis entre si, e que não " | ||||||
| 	"seja possível para Rufus incluí-los todos, dois arquivos adicionais devem ser baixados a partir da " | 	"seja possível para Rufus incluí-los todos, dois arquivos adicionais devem ser baixados a partir da " | ||||||
| 	"Internet ('ldlinux.sys' and 'ldlinux.bss'):\n" | 	"Internet ('ldlinux.sys' and 'ldlinux.bss'):\n" | ||||||
| 	"- Selecione 'Sim' para se conectar à Internet e baixar esses arquivos\n" | 	"- Selecione 'Sim' para se conectar à Internet e baixar esses arquivos\n" | ||||||
|  | @ -9608,8 +9608,8 @@ t MSG_111 "Dimensiune Cluster incompatibilă" | ||||||
| t MSG_112 "Formatarea volumului mare UDF, poate dura ceva timp. Viteza formatării USB 2.0, estimează " | t MSG_112 "Formatarea volumului mare UDF, poate dura ceva timp. Viteza formatării USB 2.0, estimează " | ||||||
| 	"durata este %d:%02d, în care va apărea pe bara de progres. Vă rugăm să aveţi răbdare!" | 	"durata este %d:%02d, în care va apărea pe bara de progres. Vă rugăm să aveţi răbdare!" | ||||||
| t MSG_113 "Volumul UDF mare" | t MSG_113 "Volumul UDF mare" | ||||||
| t MSG_114 "Această imagine foloseste Syslinux %s%s, dar această aplicație include doar fișierele de instalare pentru Syslinux %s. " | t MSG_114 "Această imagine foloseste Syslinux %s%s, dar această aplicație include doar fișierele de instalare pentru " | ||||||
| 	"Syslinux %s.\n\nNoile versiuni ale syslinux, nu sunt compatibile cu altele, și nu ar fi " | 	"Syslinux %s%s.\n\nNoile versiuni ale syslinux, nu sunt compatibile cu altele, și nu ar fi " | ||||||
| 	"este posibil ca Rufus să le includă, două fișiere suplimentare, ele trebuie să fi descărcate de pe " | 	"este posibil ca Rufus să le includă, două fișiere suplimentare, ele trebuie să fi descărcate de pe " | ||||||
| 	"Internet ('ldlinux.sys' şi 'ldlinux.bss'):\n" | 	"Internet ('ldlinux.sys' şi 'ldlinux.bss'):\n" | ||||||
| 	"- Selectați 'Da' pentru a vă conecta la Internet și de a descărca aceste fișiere\n" | 	"- Selectați 'Da' pentru a vă conecta la Internet și de a descărca aceste fișiere\n" | ||||||
|  | @ -10007,7 +10007,7 @@ t MSG_111 "Несовместимый размер кластера" | ||||||
| t MSG_112 "Форматирование в Large UDF-тома занимает много времени..." | t MSG_112 "Форматирование в Large UDF-тома занимает много времени..." | ||||||
| t MSG_113 "Large UDF-том" | t MSG_113 "Large UDF-том" | ||||||
| t MSG_114 "Данный образ использует Syslinux %s%s, но данное приложение включает в себя только установочные файлы для " | t MSG_114 "Данный образ использует Syslinux %s%s, но данное приложение включает в себя только установочные файлы для " | ||||||
| 	"Syslinux %s.\n\nТак как новые версии Syslinux не совместимы друг с другом, необходимо, чтобы дополнительные" | 	"Syslinux %s%s.\n\nТак как новые версии Syslinux не совместимы друг с другом, необходимо, чтобы дополнительные" | ||||||
| 	"файлы ('ldlinux.sys' and 'ldlinux.bss') были загружены из интернета:\n" | 	"файлы ('ldlinux.sys' and 'ldlinux.bss') были загружены из интернета:\n" | ||||||
| 	"- Выберите 'Да', чтобы скачать файлы из интернета\n" | 	"- Выберите 'Да', чтобы скачать файлы из интернета\n" | ||||||
| 	"- Выберите 'Нет', чтобы отменить операцию\n\n" | 	"- Выберите 'Нет', чтобы отменить операцию\n\n" | ||||||
|  | @ -10398,7 +10398,7 @@ t MSG_112 "Formátovanie veľkých UDF zväzkov môže trvať dlhý čas. Rýchl | ||||||
| 	"trvanie formátovania (približne %d:%02d), počas procesu sa vám môže zdať, že aplikácia zamrzla. Budte trpezlivý! " | 	"trvanie formátovania (približne %d:%02d), počas procesu sa vám môže zdať, že aplikácia zamrzla. Budte trpezlivý! " | ||||||
| t MSG_113 "Veľkosť UDF zväzku" | t MSG_113 "Veľkosť UDF zväzku" | ||||||
| t MSG_114 "Tento obraz používa Syslinux %s%s ale tento program obsahuje inštaláciu pre " | t MSG_114 "Tento obraz používa Syslinux %s%s ale tento program obsahuje inštaláciu pre " | ||||||
| 	"Syslinux %s.\n\nAk nová verzia Syslinuxu nie je kompaktibilná s ďalším obrazom,  " | 	"Syslinux %s%s.\n\nAk nová verzia Syslinuxu nie je kompaktibilná s ďalším obrazom,  " | ||||||
| 	"je možné, že program Rufus neobsahuje dva doplnkové súbory, ktoré budú musieť byť stiahnuté " | 	"je možné, že program Rufus neobsahuje dva doplnkové súbory, ktoré budú musieť byť stiahnuté " | ||||||
| 	"z internetu (ldlinux.sys a ldlinux.bss):\n" | 	"z internetu (ldlinux.sys a ldlinux.bss):\n" | ||||||
| 	"- Stlačte 'Áno' pre stiahnutie týchto súborov z internetu\n" | 	"- Stlačte 'Áno' pre stiahnutie týchto súborov z internetu\n" | ||||||
|  | @ -10805,7 +10805,7 @@ t MSG_112 "Formatiranje velikih nosilcev UDF lahko traja veliko časa. Pri hitro | ||||||
| 	"trajanje formatiranja %d:%02d, med čimer se kazalnik poteka ne bo premaknil. Prosim, bodite potrpežljivi!" | 	"trajanje formatiranja %d:%02d, med čimer se kazalnik poteka ne bo premaknil. Prosim, bodite potrpežljivi!" | ||||||
| t MSG_113 "Velik nosilec UDF" | t MSG_113 "Velik nosilec UDF" | ||||||
| t MSG_114 "Ta slika uporablja Syslinux %s%s, toda ta aplikacija vsebuje le namestitvene datoteke za " | t MSG_114 "Ta slika uporablja Syslinux %s%s, toda ta aplikacija vsebuje le namestitvene datoteke za " | ||||||
| 	"Syslinux %s.\n\nKer novejše verzije Syslinuxa niso združljive in Rufus ne more vsebovati vseh, " | 	"Syslinux %s%s.\n\nKer novejše verzije Syslinuxa niso združljive in Rufus ne more vsebovati vseh, " | ||||||
| 	"morata biti prenešeni še dve dodatni datoteki (ldlinux.sys in ldlinux.bss):\n" | 	"morata biti prenešeni še dve dodatni datoteki (ldlinux.sys in ldlinux.bss):\n" | ||||||
| 	"- Izberite \"Da\", da se povežete na internet in prenesete ti dve datoteki.\n" | 	"- Izberite \"Da\", da se povežete na internet in prenesete ti dve datoteki.\n" | ||||||
| 	"- Izberite \"Ne\", da prekinete dejanje.\n\n" | 	"- Izberite \"Ne\", da prekinete dejanje.\n\n" | ||||||
|  | @ -11604,7 +11604,7 @@ t MSG_112 "Att formatera en stor UDF-volum kan ta lång tid. Vid USB 2.0-hastigh | ||||||
| 	"tiden runt %d:%02d, och under tiden kan förloppsindikatorn se ut att stå stilla." | 	"tiden runt %d:%02d, och under tiden kan förloppsindikatorn se ut att stå stilla." | ||||||
| t MSG_113 "Stor UDF-volum" | t MSG_113 "Stor UDF-volum" | ||||||
| t MSG_114 "Denna avbild använder Syslinux %s%s men detta programmet innehåller endast installationsfiler för " | t MSG_114 "Denna avbild använder Syslinux %s%s men detta programmet innehåller endast installationsfiler för " | ||||||
| 	"Syslinux %s.\n\nEftersom nya versioner av Syslinux inte är kompatibla med varandra, skulle det vara " | 	"Syslinux %s%s.\n\nEftersom nya versioner av Syslinux inte är kompatibla med varandra, skulle det vara " | ||||||
| 	"omöjligt att alla fanns med i Rufus, så därför måste två filer laddas ned från " | 	"omöjligt att alla fanns med i Rufus, så därför måste två filer laddas ned från " | ||||||
| 	"internet ('ldlinux.sys' och 'ldlinux.bss'):\n" | 	"internet ('ldlinux.sys' och 'ldlinux.bss'):\n" | ||||||
| 	"- Välj 'Ja' för att ansluta till internet och ladda ned filerna\n" | 	"- Välj 'Ja' för att ansluta till internet och ladda ned filerna\n" | ||||||
|  | @ -12019,7 +12019,7 @@ t MSG_111 "Uyumsuz Ayırma Boyutu" | ||||||
| t MSG_112 "Geniş bir UDF Biriminin biçimlendirilmesi çok uzun bir süre alabilir. USB 2.0 hızında, Tahmini biçimlendirme " | t MSG_112 "Geniş bir UDF Biriminin biçimlendirilmesi çok uzun bir süre alabilir. USB 2.0 hızında, Tahmini biçimlendirme " | ||||||
| 	"süresi %d:%02d, İlerleme çubuğu donmuş görünüyorken. Lütfen sabırlı olun!" | 	"süresi %d:%02d, İlerleme çubuğu donmuş görünüyorken. Lütfen sabırlı olun!" | ||||||
| t MSG_113 "Geniş UDF Birimi" | t MSG_113 "Geniş UDF Birimi" | ||||||
| t MSG_114 "Bu yansıma Syslinux %s%s kullanıyor fakat bu uygulama yalnız Syslinux %s için yükleme dosyalarını " | t MSG_114 "Bu yansıma Syslinux %s%s kullanıyor fakat bu uygulama yalnız Syslinux %s%s için yükleme dosyalarını " | ||||||
| 	"içeriyor.\n\nSyslinux'un yeni sürümleri bir başkasıyla uyumlu olmadığından ve Rufus'un bunların" | 	"içeriyor.\n\nSyslinux'un yeni sürümleri bir başkasıyla uyumlu olmadığından ve Rufus'un bunların" | ||||||
| 	"tamamını içermesi mümkün olmadığından, iki ek dosyanın('ldlinux.sys' ve 'ldlinux.bss') internet üzerinden " | 	"tamamını içermesi mümkün olmadığından, iki ek dosyanın('ldlinux.sys' ve 'ldlinux.bss') internet üzerinden " | ||||||
| 	"indirilmesi gerekli:\n" | 	"indirilmesi gerekli:\n" | ||||||
|  | @ -12441,7 +12441,7 @@ t MSG_111 "Несумісний розмір кластера" | ||||||
| t MSG_112 "Форматування в Large UDF-тома займає багато часу..." | t MSG_112 "Форматування в Large UDF-тома займає багато часу..." | ||||||
| t MSG_113 "Large UDF-том" | t MSG_113 "Large UDF-том" | ||||||
| t MSG_114 "Даний образ використовує Syslinux %s%s, проте даний додаток включає в себе тільки установочні файли для " | t MSG_114 "Даний образ використовує Syslinux %s%s, проте даний додаток включає в себе тільки установочні файли для " | ||||||
| 	"Syslinux %s.\n\nТак як нові версії Syslinux несумісні одна з одною, необхідно, щоб додаткові" | 	"Syslinux %s%s.\n\nТак як нові версії Syslinux несумісні одна з одною, необхідно, щоб додаткові" | ||||||
| 	"файли ('ldlinux.sys' та 'ldlinux.bss') були завантажені з інтернету:\n" | 	"файли ('ldlinux.sys' та 'ldlinux.bss') були завантажені з інтернету:\n" | ||||||
| 	"- Оберіть 'Так', щоб завантажити файли з інтернету\n" | 	"- Оберіть 'Так', щоб завантажити файли з інтернету\n" | ||||||
| 	"- Оберіть 'Ні', щоб відмінити операцію\n\n" | 	"- Оберіть 'Ні', щоб відмінити операцію\n\n" | ||||||
|  |  | ||||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								res/syslinux/ldlinux_v6.sys
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								res/syslinux/ldlinux_v6.sys
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							|  | @ -1,4 +1,4 @@ | ||||||
| o ldlinux_v4.[bss|sys] have been renamed from ldlinux.[bss|sys] found in syslinux-4.07/core/ | o ldlinux_v4.[bss|sys] have been renamed from ldlinux.[bss|sys] found in syslinux-4.07/core/ | ||||||
| o ldlinux_v5.[bss|sys] have been renamed from ldlinux.[bss|sys] found in syslinux-5.10/core/ | o ldlinux_v6.[bss|sys] have been renamed from ldlinux.[bss|sys] found in syslinux-6.03/bios/core/ | ||||||
| o mboot.c32 comes from syslinux-4.07/com32/mboot | o mboot.c32 comes from syslinux-4.07/com32/mboot | ||||||
|   http://www.kernel.org/pub/linux/utils/boot/syslinux/ |   http://www.kernel.org/pub/linux/utils/boot/syslinux/ | ||||||
|  | @ -1554,7 +1554,7 @@ DWORD WINAPI FormatThread(void* param) | ||||||
| 			// We must close and unlock the volume to write files to it
 | 			// We must close and unlock the volume to write files to it
 | ||||||
| 			safe_unlockclose(hLogicalVolume); | 			safe_unlockclose(hLogicalVolume); | ||||||
| 		} else if ( (dt == DT_SYSLINUX_V4) || (dt == DT_SYSLINUX_V5) || ((dt == DT_ISO) && ((fs == FS_FAT16) || (fs == FS_FAT32))) ) { | 		} else if ( (dt == DT_SYSLINUX_V4) || (dt == DT_SYSLINUX_V5) || ((dt == DT_ISO) && ((fs == FS_FAT16) || (fs == FS_FAT32))) ) { | ||||||
| 			if (!InstallSyslinux(DriveIndex, drive_name[0])) { | 			if (!InstallSyslinux(DriveIndex, drive_name[0], fs)) { | ||||||
| 				FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_INSTALL_FAILURE; | 				FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_INSTALL_FAILURE; | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | @ -50,8 +50,8 @@ | ||||||
| #define IDR_FD_EGA18_CPX                326 | #define IDR_FD_EGA18_CPX                326 | ||||||
| #define IDR_SL_LDLINUX_V4_BSS           400 | #define IDR_SL_LDLINUX_V4_BSS           400 | ||||||
| #define IDR_SL_LDLINUX_V4_SYS           401 | #define IDR_SL_LDLINUX_V4_SYS           401 | ||||||
| #define IDR_SL_LDLINUX_V5_BSS           402 | #define IDR_SL_LDLINUX_V6_BSS           402 | ||||||
| #define IDR_SL_LDLINUX_V5_SYS           403 | #define IDR_SL_LDLINUX_V6_SYS           403 | ||||||
| #define IDR_SL_MBOOT_C32                404 | #define IDR_SL_MBOOT_C32                404 | ||||||
| #define IDR_LC_RUFUS_LOC                500 | #define IDR_LC_RUFUS_LOC                500 | ||||||
| #define IDR_XT_HOGGER                   501 | #define IDR_XT_HOGGER                   501 | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								src/rufus.c
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								src/rufus.c
									
										
									
									
									
								
							|  | @ -1178,7 +1178,8 @@ static BOOL BootCheck(void) | ||||||
| 						} | 						} | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 			} else if (iso_report.sl_version != embedded_sl_version[1]) { | 			} else if ((iso_report.sl_version != embedded_sl_version[1]) || | ||||||
|  | 				(safe_strcmp(iso_report.sl_version_ext, embedded_sl_version_ext[1]) != 0)) { | ||||||
| 				// Unlike what was the case for v4 and earlier, Syslinux v5+ versions are INCOMPATIBLE with one another!
 | 				// Unlike what was the case for v4 and earlier, Syslinux v5+ versions are INCOMPATIBLE with one another!
 | ||||||
| 				IGNORE_RETVAL(_chdirU(app_dir)); | 				IGNORE_RETVAL(_chdirU(app_dir)); | ||||||
| 				IGNORE_RETVAL(_mkdir(FILES_DIR)); | 				IGNORE_RETVAL(_mkdir(FILES_DIR)); | ||||||
|  | @ -1200,7 +1201,7 @@ static BOOL BootCheck(void) | ||||||
| 						iso_report.sl_version_str, iso_report.sl_version_ext); | 						iso_report.sl_version_str, iso_report.sl_version_ext); | ||||||
| 				} else { | 				} else { | ||||||
| 					r = MessageBoxU(hMainDialog, lmprintf(MSG_114, iso_report.sl_version_str, iso_report.sl_version_ext, | 					r = MessageBoxU(hMainDialog, lmprintf(MSG_114, iso_report.sl_version_str, iso_report.sl_version_ext, | ||||||
| 						embedded_sl_version_str[1]), | 						embedded_sl_version_str[1], embedded_sl_version_ext[1]), | ||||||
| 						lmprintf(MSG_115), MB_YESNO|MB_ICONWARNING|MB_IS_RTL); | 						lmprintf(MSG_115), MB_YESNO|MB_ICONWARNING|MB_IS_RTL); | ||||||
| 					if (r != IDYES) | 					if (r != IDYES) | ||||||
| 						return FALSE; | 						return FALSE; | ||||||
|  | @ -1287,7 +1288,7 @@ void InitDialog(HWND hDlg) | ||||||
| 	HDC hDC; | 	HDC hDC; | ||||||
| 	int i, i16, s16; | 	int i, i16, s16; | ||||||
| 	char tmp[128], *token, *buf, *ext; | 	char tmp[128], *token, *buf, *ext; | ||||||
| 	static char* resource[2] = { MAKEINTRESOURCEA(IDR_SL_LDLINUX_V4_SYS), MAKEINTRESOURCEA(IDR_SL_LDLINUX_V5_SYS) }; | 	static char* resource[2] = { MAKEINTRESOURCEA(IDR_SL_LDLINUX_V4_SYS), MAKEINTRESOURCEA(IDR_SL_LDLINUX_V6_SYS) }; | ||||||
| 
 | 
 | ||||||
| #ifdef RUFUS_TEST | #ifdef RUFUS_TEST | ||||||
| 	ShowWindow(GetDlgItem(hDlg, IDC_TEST), SW_SHOW); | 	ShowWindow(GetDlgItem(hDlg, IDC_TEST), SW_SHOW); | ||||||
|  | @ -1505,9 +1506,9 @@ void SetBoot(int fs, int bt) | ||||||
| 	IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, lmprintf(MSG_036)), DT_ISO)); | 	IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, lmprintf(MSG_036)), DT_ISO)); | ||||||
| 	IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, lmprintf(MSG_095)), DT_IMG)); | 	IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, lmprintf(MSG_095)), DT_IMG)); | ||||||
| 	// If needed (advanced mode) also append a Syslinux option
 | 	// If needed (advanced mode) also append a Syslinux option
 | ||||||
| 	if ( (bt == BT_BIOS) && (((fs == FS_FAT16) || (fs == FS_FAT32)) && (advanced_mode)) ) { | 	if ( (bt == BT_BIOS) && (((fs == FS_FAT16) || (fs == FS_FAT32) || (fs == FS_NTFS)) && (advanced_mode)) ) { | ||||||
| 		IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, "Syslinux 4"), DT_SYSLINUX_V4)); | 		IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, "Syslinux 4"), DT_SYSLINUX_V4)); | ||||||
| 		IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, "Syslinux 5"), DT_SYSLINUX_V5)); | 		IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, "Syslinux 6"), DT_SYSLINUX_V5)); | ||||||
| 		IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, "ReactOS"), DT_REACTOS)); | 		IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, "ReactOS"), DT_REACTOS)); | ||||||
| 	} | 	} | ||||||
| 	if ((!advanced_mode) && (selection_default >= DT_SYSLINUX_V4)) { | 	if ((!advanced_mode) && (selection_default >= DT_SYSLINUX_V4)) { | ||||||
|  |  | ||||||
|  | @ -369,7 +369,7 @@ 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 int64_t ExtractISOFile(const char* iso, const char* iso_file, const char* dest_file, DWORD attributes); | extern int64_t ExtractISOFile(const char* iso, const char* iso_file, const char* dest_file, DWORD attributes); | ||||||
| extern BOOL InstallSyslinux(DWORD drive_index, char drive_letter); | extern BOOL InstallSyslinux(DWORD drive_index, char drive_letter, int fs); | ||||||
| extern uint16_t GetSyslinuxVersion(char* buf, size_t buf_size, char** ext); | extern uint16_t GetSyslinuxVersion(char* buf, size_t buf_size, char** ext); | ||||||
| extern BOOL CreateProgress(void); | extern BOOL CreateProgress(void); | ||||||
| extern BOOL SetAutorun(const char* path); | extern BOOL SetAutorun(const char* path); | ||||||
|  |  | ||||||
							
								
								
									
										20
									
								
								src/rufus.rc
									
										
									
									
									
								
							
							
						
						
									
										20
									
								
								src/rufus.rc
									
										
									
									
									
								
							|  | @ -32,7 +32,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_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||||
| CAPTION "Rufus 1.5.0.537" | CAPTION "Rufus 1.5.0.538" | ||||||
| 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 | ||||||
|  | @ -165,7 +165,7 @@ END | ||||||
| RTL_IDD_DIALOG DIALOGEX 12, 12, 206, 329 | RTL_IDD_DIALOG DIALOGEX 12, 12, 206, 329 | ||||||
| STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||||
| EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL | EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL | ||||||
| CAPTION "Rufus 1.5.0.537" | CAPTION "Rufus 1.5.0.538" | ||||||
| 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 | ||||||
|  | @ -336,8 +336,8 @@ BEGIN | ||||||
|     "#endif\r\n" |     "#endif\r\n" | ||||||
|     "IDR_SL_LDLINUX_V4_BSS   RCDATA                  ""../res/syslinux/ldlinux_v4.bss""\r\n" |     "IDR_SL_LDLINUX_V4_BSS   RCDATA                  ""../res/syslinux/ldlinux_v4.bss""\r\n" | ||||||
|     "IDR_SL_LDLINUX_V4_SYS   RCDATA                  ""../res/syslinux/ldlinux_v4.sys""\r\n" |     "IDR_SL_LDLINUX_V4_SYS   RCDATA                  ""../res/syslinux/ldlinux_v4.sys""\r\n" | ||||||
|     "IDR_SL_LDLINUX_V5_BSS   RCDATA                  ""../res/syslinux/ldlinux_v5.bss""\r\n" |     "IDR_SL_LDLINUX_V6_BSS   RCDATA                  ""../res/syslinux/ldlinux_v6.bss""\r\n" | ||||||
|     "IDR_SL_LDLINUX_V5_SYS   RCDATA                  ""../res/syslinux/ldlinux_v5.sys""\r\n" |     "IDR_SL_LDLINUX_V6_SYS   RCDATA                  ""../res/syslinux/ldlinux_v6.sys""\r\n" | ||||||
|     "IDR_SL_MBOOT_C32        RCDATA                  ""../res/syslinux/mboot.c32""\r\n" |     "IDR_SL_MBOOT_C32        RCDATA                  ""../res/syslinux/mboot.c32""\r\n" | ||||||
|     "IDR_FD_COMMAND_COM      RCDATA                  ""../res/freedos/COMMAND.COM""\r\n" |     "IDR_FD_COMMAND_COM      RCDATA                  ""../res/freedos/COMMAND.COM""\r\n" | ||||||
|     "IDR_FD_KERNEL_SYS       RCDATA                  ""../res/freedos/KERNEL.SYS""\r\n" |     "IDR_FD_KERNEL_SYS       RCDATA                  ""../res/freedos/KERNEL.SYS""\r\n" | ||||||
|  | @ -428,8 +428,8 @@ END | ||||||
| // | // | ||||||
| 
 | 
 | ||||||
| VS_VERSION_INFO VERSIONINFO | VS_VERSION_INFO VERSIONINFO | ||||||
|  FILEVERSION 1,5,0,537 |  FILEVERSION 1,5,0,538 | ||||||
|  PRODUCTVERSION 1,5,0,537 |  PRODUCTVERSION 1,5,0,538 | ||||||
|  FILEFLAGSMASK 0x3fL |  FILEFLAGSMASK 0x3fL | ||||||
| #ifdef _DEBUG | #ifdef _DEBUG | ||||||
|  FILEFLAGS 0x1L |  FILEFLAGS 0x1L | ||||||
|  | @ -446,13 +446,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.5.0.537" |             VALUE "FileVersion", "1.5.0.538" | ||||||
|             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.5.0.537" |             VALUE "ProductVersion", "1.5.0.538" | ||||||
|         END |         END | ||||||
|     END |     END | ||||||
|     BLOCK "VarFileInfo" |     BLOCK "VarFileInfo" | ||||||
|  | @ -490,8 +490,8 @@ IDR_LC_RUFUS_LOC        RCDATA                  "../res/localization/embedded.lo | ||||||
| #endif | #endif | ||||||
| IDR_SL_LDLINUX_V4_BSS   RCDATA                  "../res/syslinux/ldlinux_v4.bss" | IDR_SL_LDLINUX_V4_BSS   RCDATA                  "../res/syslinux/ldlinux_v4.bss" | ||||||
| IDR_SL_LDLINUX_V4_SYS   RCDATA                  "../res/syslinux/ldlinux_v4.sys" | IDR_SL_LDLINUX_V4_SYS   RCDATA                  "../res/syslinux/ldlinux_v4.sys" | ||||||
| IDR_SL_LDLINUX_V5_BSS   RCDATA                  "../res/syslinux/ldlinux_v5.bss" | IDR_SL_LDLINUX_V6_BSS   RCDATA                  "../res/syslinux/ldlinux_v6.bss" | ||||||
| IDR_SL_LDLINUX_V5_SYS   RCDATA                  "../res/syslinux/ldlinux_v5.sys" | IDR_SL_LDLINUX_V6_SYS   RCDATA                  "../res/syslinux/ldlinux_v6.sys" | ||||||
| IDR_SL_MBOOT_C32        RCDATA                  "../res/syslinux/mboot.c32" | IDR_SL_MBOOT_C32        RCDATA                  "../res/syslinux/mboot.c32" | ||||||
| IDR_FD_COMMAND_COM      RCDATA                  "../res/freedos/COMMAND.COM" | IDR_FD_COMMAND_COM      RCDATA                  "../res/freedos/COMMAND.COM" | ||||||
| IDR_FD_KERNEL_SYS       RCDATA                  "../res/freedos/KERNEL.SYS" | IDR_FD_KERNEL_SYS       RCDATA                  "../res/freedos/KERNEL.SYS" | ||||||
|  |  | ||||||
|  | @ -36,6 +36,7 @@ | ||||||
| #include "syslxfs.h" | #include "syslxfs.h" | ||||||
| #include "libfat.h" | #include "libfat.h" | ||||||
| #include "setadv.h" | #include "setadv.h" | ||||||
|  | #include "ntfssect.h" | ||||||
| 
 | 
 | ||||||
| unsigned char* syslinux_ldlinux[2] = { NULL, NULL }; | unsigned char* syslinux_ldlinux[2] = { NULL, NULL }; | ||||||
| DWORD syslinux_ldlinux_len[2]; | DWORD syslinux_ldlinux_len[2]; | ||||||
|  | @ -69,7 +70,7 @@ int libfat_readfile(intptr_t pp, void *buf, size_t secsize, | ||||||
|  * Extract the ldlinux.sys and ldlinux.bss from resources, |  * Extract the ldlinux.sys and ldlinux.bss from resources, | ||||||
|  * then patch and install them |  * then patch and install them | ||||||
|  */ |  */ | ||||||
| BOOL InstallSyslinux(DWORD drive_index, char drive_letter) | BOOL InstallSyslinux(DWORD drive_index, char drive_letter, int fs_type) | ||||||
| { | { | ||||||
| 	HANDLE f_handle = INVALID_HANDLE_VALUE; | 	HANDLE f_handle = INVALID_HANDLE_VALUE; | ||||||
| 	HANDLE d_handle = INVALID_HANDLE_VALUE; | 	HANDLE d_handle = INVALID_HANDLE_VALUE; | ||||||
|  | @ -77,12 +78,12 @@ 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; | 	size_t length; | ||||||
| 
 | 
 | ||||||
| 	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_V6_SYS), MAKEINTRESOURCEA(IDR_SL_LDLINUX_V6_BSS) } }; | ||||||
| 	const char* ldlinux = "ldlinux"; | 	const char* ldlinux = "ldlinux"; | ||||||
| 	const char* syslinux = "syslinux"; | 	const char* syslinux = "syslinux"; | ||||||
| 	const char* ldlinux_ext[3] = { "sys", "bss", "c32" }; | 	const char* ldlinux_ext[3] = { "sys", "bss", "c32" }; | ||||||
|  | @ -116,9 +117,9 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter) | ||||||
| 				uprintf("Could not open %s\n", path); | 				uprintf("Could not open %s\n", path); | ||||||
| 				goto out; | 				goto out; | ||||||
| 			} | 			} | ||||||
| 			len = fread(syslinux_ldlinux[i], 1, (size_t)syslinux_ldlinux_len[i], fd); | 			length = fread(syslinux_ldlinux[i], 1, (size_t)syslinux_ldlinux_len[i], fd); | ||||||
| 			fclose(fd); | 			fclose(fd); | ||||||
| 			if (len != (size_t)syslinux_ldlinux_len[i]) { | 			if (length != (size_t)syslinux_ldlinux_len[i]) { | ||||||
| 				uprintf("Could not read %s\n", path); | 				uprintf("Could not read %s\n", path); | ||||||
| 				goto out; | 				goto out; | ||||||
| 			} | 			} | ||||||
|  | @ -148,8 +149,8 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/* Write ldlinux.sys file */ | 	/* Write ldlinux.sys file */ | ||||||
| 	if (!WriteFile(f_handle, syslinux_ldlinux[0], syslinux_ldlinux_len[0], | 	if (!WriteFile(f_handle, (const char _force *)syslinux_ldlinux[0], | ||||||
| 		   &bytes_written, NULL) || | 		   syslinux_ldlinux_len[0], &bytes_written, NULL) || | ||||||
| 		bytes_written != syslinux_ldlinux_len[0]) { | 		bytes_written != syslinux_ldlinux_len[0]) { | ||||||
| 		uprintf("Could not write '%s'\n", &path[3]); | 		uprintf("Could not write '%s'\n", &path[3]); | ||||||
| 		goto out; | 		goto out; | ||||||
|  | @ -183,6 +184,39 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter) | ||||||
| 	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; | ||||||
|  | 	if (fs_type == FS_NTFS) { | ||||||
|  | 		DWORD err; | ||||||
|  | 		S_NTFSSECT_VOLINFO vol_info; | ||||||
|  | 		LARGE_INTEGER vcn, lba, len; | ||||||
|  | 		S_NTFSSECT_EXTENT extent; | ||||||
|  | 
 | ||||||
|  | 		static_sprintf(tmp, "%C:\\", drive_letter); | ||||||
|  | 		err = NtfsSectGetVolumeInfo(tmp, &vol_info); | ||||||
|  | 		if (err != ERROR_SUCCESS) { | ||||||
|  | 			uprintf("Could not fetch NTFS volume info"); | ||||||
|  | 			goto out; | ||||||
|  | 		} | ||||||
|  | 		secp = sectors; | ||||||
|  | 		nsectors = 0; | ||||||
|  | 		for (vcn.QuadPart = 0; | ||||||
|  | 			NtfsSectGetFileVcnExtent(f_handle, &vcn, &extent) == ERROR_SUCCESS; | ||||||
|  | 			vcn = extent.NextVcn) { | ||||||
|  | 				err = NtfsSectLcnToLba(&vol_info, &extent.FirstLcn, &lba); | ||||||
|  | 				if (err != ERROR_SUCCESS) { | ||||||
|  | 					uprintf("Could not translate LDLINUX.SYS LCN to disk LBA"); | ||||||
|  | 					goto out; | ||||||
|  | 				} | ||||||
|  | 				lba.QuadPart -= vol_info.PartitionLba.QuadPart; | ||||||
|  | 				len.QuadPart = ((extent.NextVcn.QuadPart - | ||||||
|  | 					extent.FirstVcn.QuadPart) * | ||||||
|  | 					vol_info.SectorsPerCluster); | ||||||
|  | 				while (len.QuadPart-- && nsectors < ldlinux_sectors) { | ||||||
|  | 					*secp++ = lba.QuadPart++; | ||||||
|  | 					nsectors++; | ||||||
|  | 				} | ||||||
|  | 		} | ||||||
|  | 		goto map_done; | ||||||
|  | 	} | ||||||
| 	fs = libfat_open(libfat_readfile, (intptr_t) d_handle); | 	fs = libfat_open(libfat_readfile, (intptr_t) d_handle); | ||||||
| 	if (fs == NULL) { | 	if (fs == NULL) { | ||||||
| 		uprintf("Syslinux FAT access error\n"); | 		uprintf("Syslinux FAT access error\n"); | ||||||
|  | @ -198,6 +232,7 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter) | ||||||
| 		s = libfat_nextsector(fs, s); | 		s = libfat_nextsector(fs, s); | ||||||
| 	} | 	} | ||||||
| 	libfat_close(fs); | 	libfat_close(fs); | ||||||
|  | map_done: | ||||||
| 
 | 
 | ||||||
| 	/* Patch ldlinux.sys and the boot sector */ | 	/* Patch ldlinux.sys and the boot sector */ | ||||||
| 	syslinux_patch(sectors, nsectors, 0, 0, NULL, NULL); | 	syslinux_patch(sectors, nsectors, 0, 0, NULL, NULL); | ||||||
|  | @ -224,7 +259,7 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/* Make the syslinux boot sector */ | 	/* Make the syslinux boot sector */ | ||||||
| 	syslinux_make_bootsect(sectbuf, VFAT); | 	syslinux_make_bootsect(sectbuf, (fs_type == FS_NTFS)?NTFS:VFAT); | ||||||
| 
 | 
 | ||||||
| 	/* Write boot sector back */ | 	/* Write boot sector back */ | ||||||
| 	if (SetFilePointer(d_handle, 0, NULL, FILE_BEGIN) != 0 || | 	if (SetFilePointer(d_handle, 0, NULL, FILE_BEGIN) != 0 || | ||||||
|  |  | ||||||
|  | @ -20,6 +20,7 @@ | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <ClInclude Include="..\advconst.h" /> |     <ClInclude Include="..\advconst.h" /> | ||||||
|  |     <ClInclude Include="..\ntfssect.h" /> | ||||||
|     <ClInclude Include="..\syslinux.h" /> |     <ClInclude Include="..\syslinux.h" /> | ||||||
|     <ClInclude Include="..\syslxcom.h" /> |     <ClInclude Include="..\syslxcom.h" /> | ||||||
|     <ClInclude Include="..\syslxfs.h" /> |     <ClInclude Include="..\syslxfs.h" /> | ||||||
|  | @ -27,6 +28,7 @@ | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <ClCompile Include="..\fs.c" /> |     <ClCompile Include="..\fs.c" /> | ||||||
|  |     <ClCompile Include="..\ntfssect.c" /> | ||||||
|     <ClCompile Include="..\setadv.c" /> |     <ClCompile Include="..\setadv.c" /> | ||||||
|     <ClCompile Include="..\syslxmod.c" /> |     <ClCompile Include="..\syslxmod.c" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|  |  | ||||||
|  | @ -26,6 +26,9 @@ | ||||||
|     <ClInclude Include="..\syslxcom.h"> |     <ClInclude Include="..\syslxcom.h"> | ||||||
|       <Filter>Header Files</Filter> |       <Filter>Header Files</Filter> | ||||||
|     </ClInclude> |     </ClInclude> | ||||||
|  |     <ClInclude Include="..\ntfssect.h"> | ||||||
|  |       <Filter>Header Files</Filter> | ||||||
|  |     </ClInclude> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <ClCompile Include="..\fs.c"> |     <ClCompile Include="..\fs.c"> | ||||||
|  | @ -37,5 +40,8 @@ | ||||||
|     <ClCompile Include="..\syslxmod.c"> |     <ClCompile Include="..\syslxmod.c"> | ||||||
|       <Filter>Source Files</Filter> |       <Filter>Source Files</Filter> | ||||||
|     </ClCompile> |     </ClCompile> | ||||||
|  |     <ClCompile Include="..\ntfssect.c"> | ||||||
|  |       <Filter>Source Files</Filter> | ||||||
|  |     </ClCompile> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
| </Project> | </Project> | ||||||
|  | @ -13,5 +13,6 @@ TARGETLIBS=$(SDK_LIB_PATH)\kernel32.lib \ | ||||||
|            $(SDK_LIB_PATH)\user32.lib |            $(SDK_LIB_PATH)\user32.lib | ||||||
| 
 | 
 | ||||||
| SOURCES=fs.c          \ | SOURCES=fs.c          \ | ||||||
|  |         ntfssect.c    \ | ||||||
|         setadv.c      \ |         setadv.c      \ | ||||||
|         syslxmod.c |         syslxmod.c | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| noinst_LIBRARIES = libinstaller.a | noinst_LIBRARIES = libinstaller.a | ||||||
| 
 | 
 | ||||||
| libinstaller_a_SOURCES = fs.c setadv.c syslxmod.c | libinstaller_a_SOURCES = fs.c ntfssect.c setadv.c syslxmod.c | ||||||
| libinstaller_a_CFLAGS = $(AM_CFLAGS) | libinstaller_a_CFLAGS = $(AM_CFLAGS) | ||||||
|  | @ -53,6 +53,7 @@ am__v_at_0 = @ | ||||||
| libinstaller_a_AR = $(AR) $(ARFLAGS) | libinstaller_a_AR = $(AR) $(ARFLAGS) | ||||||
| libinstaller_a_LIBADD = | libinstaller_a_LIBADD = | ||||||
| am_libinstaller_a_OBJECTS = libinstaller_a-fs.$(OBJEXT) \
 | am_libinstaller_a_OBJECTS = libinstaller_a-fs.$(OBJEXT) \
 | ||||||
|  | 	libinstaller_a-ntfssect.$(OBJEXT) \
 | ||||||
| 	libinstaller_a-setadv.$(OBJEXT) \
 | 	libinstaller_a-setadv.$(OBJEXT) \
 | ||||||
| 	libinstaller_a-syslxmod.$(OBJEXT) | 	libinstaller_a-syslxmod.$(OBJEXT) | ||||||
| libinstaller_a_OBJECTS = $(am_libinstaller_a_OBJECTS) | libinstaller_a_OBJECTS = $(am_libinstaller_a_OBJECTS) | ||||||
|  | @ -166,7 +167,7 @@ top_build_prefix = @top_build_prefix@ | ||||||
| top_builddir = @top_builddir@ | top_builddir = @top_builddir@ | ||||||
| top_srcdir = @top_srcdir@ | top_srcdir = @top_srcdir@ | ||||||
| noinst_LIBRARIES = libinstaller.a | noinst_LIBRARIES = libinstaller.a | ||||||
| libinstaller_a_SOURCES = fs.c setadv.c syslxmod.c | libinstaller_a_SOURCES = fs.c ntfssect.c setadv.c syslxmod.c | ||||||
| libinstaller_a_CFLAGS = $(AM_CFLAGS) | libinstaller_a_CFLAGS = $(AM_CFLAGS) | ||||||
| all: all-am | all: all-am | ||||||
| 
 | 
 | ||||||
|  | @ -232,6 +233,14 @@ libinstaller_a-fs.obj: fs.c | ||||||
| 	$(AM_V_CC) @AM_BACKSLASH@ | 	$(AM_V_CC) @AM_BACKSLASH@ | ||||||
| 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinstaller_a_CFLAGS) $(CFLAGS) -c -o libinstaller_a-fs.obj `if test -f 'fs.c'; then $(CYGPATH_W) 'fs.c'; else $(CYGPATH_W) '$(srcdir)/fs.c'; fi` | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinstaller_a_CFLAGS) $(CFLAGS) -c -o libinstaller_a-fs.obj `if test -f 'fs.c'; then $(CYGPATH_W) 'fs.c'; else $(CYGPATH_W) '$(srcdir)/fs.c'; fi` | ||||||
| 
 | 
 | ||||||
|  | libinstaller_a-ntfssect.o: ntfssect.c | ||||||
|  | 	$(AM_V_CC) @AM_BACKSLASH@ | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinstaller_a_CFLAGS) $(CFLAGS) -c -o libinstaller_a-ntfssect.o `test -f 'ntfssect.c' || echo '$(srcdir)/'`ntfssect.c | ||||||
|  | 
 | ||||||
|  | libinstaller_a-ntfssect.obj: ntfssect.c | ||||||
|  | 	$(AM_V_CC) @AM_BACKSLASH@ | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinstaller_a_CFLAGS) $(CFLAGS) -c -o libinstaller_a-ntfssect.obj `if test -f 'ntfssect.c'; then $(CYGPATH_W) 'ntfssect.c'; else $(CYGPATH_W) '$(srcdir)/ntfssect.c'; fi` | ||||||
|  | 
 | ||||||
| libinstaller_a-setadv.o: setadv.c | libinstaller_a-setadv.o: setadv.c | ||||||
| 	$(AM_V_CC) @AM_BACKSLASH@ | 	$(AM_V_CC) @AM_BACKSLASH@ | ||||||
| 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinstaller_a_CFLAGS) $(CFLAGS) -c -o libinstaller_a-setadv.o `test -f 'setadv.c' || echo '$(srcdir)/'`setadv.c | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinstaller_a_CFLAGS) $(CFLAGS) -c -o libinstaller_a-setadv.o `test -f 'setadv.c' || echo '$(srcdir)/'`setadv.c | ||||||
|  |  | ||||||
|  | @ -18,6 +18,8 @@ | ||||||
| 
 | 
 | ||||||
| #define _XOPEN_SOURCE 500	/* Required on glibc 2.x */ | #define _XOPEN_SOURCE 500	/* Required on glibc 2.x */ | ||||||
| #define _BSD_SOURCE | #define _BSD_SOURCE | ||||||
|  | /* glibc 2.20 deprecates _BSD_SOURCE in favour of _DEFAULT_SOURCE */ | ||||||
|  | #define _DEFAULT_SOURCE 1 | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <inttypes.h> | #include <inttypes.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
|  |  | ||||||
							
								
								
									
										359
									
								
								src/syslinux/libinstaller/ntfssect.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										359
									
								
								src/syslinux/libinstaller/ntfssect.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,359 @@ | ||||||
|  | /* -------------------------------------------------------------------------- *
 | ||||||
|  |  * | ||||||
|  |  *   Copyright 2011 Shao Miller - All Rights Reserved | ||||||
|  |  * | ||||||
|  |  *   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 | ||||||
|  |  *   the Free Software Foundation, Inc., 53 Temple Place Ste 330, | ||||||
|  |  *   Boston MA 02111-1307, USA; either version 2 of the License, or | ||||||
|  |  *   (at your option) any later version; incorporated herein by reference. | ||||||
|  |  * | ||||||
|  |  * ------------------------------------------------------------------------- */ | ||||||
|  | 
 | ||||||
|  | /****
 | ||||||
|  |  * ntfssect.c | ||||||
|  |  * | ||||||
|  |  * Fetch NTFS file cluster & sector information via Windows | ||||||
|  |  * | ||||||
|  |  * With special thanks to Mark Roddy for his article: | ||||||
|  |  *   http://www.wd-3.com/archive/luserland.htm
 | ||||||
|  |  */ | ||||||
|  | #if defined(_MSC_VER) | ||||||
|  | #pragma warning(disable:4996) | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #include <windows.h> | ||||||
|  | #include <winioctl.h> | ||||||
|  | #include <stddef.h> | ||||||
|  | #include <string.h> | ||||||
|  | 
 | ||||||
|  | #include "ntfssect.h" | ||||||
|  | 
 | ||||||
|  | /*** Macros */ | ||||||
|  | #define M_ERR(msg) (NtfsSectLastErrorMessage = (msg)) | ||||||
|  | 
 | ||||||
|  | /*** Function declarations */ | ||||||
|  | static DWORD NtfsSectGetVolumeHandle( | ||||||
|  |     CHAR * VolumeName, | ||||||
|  |     S_NTFSSECT_VOLINFO * VolumeInfo | ||||||
|  |   ); | ||||||
|  | static DWORD NtfsSectGetVolumePartitionLba(S_NTFSSECT_VOLINFO * VolumeInfo); | ||||||
|  | 
 | ||||||
|  | /*** Objects */ | ||||||
|  | CHAR * NtfsSectLastErrorMessage; | ||||||
|  | 
 | ||||||
|  | /*** Function definitions */ | ||||||
|  | DWORD M_NTFSSECT_API NtfsSectGetFileVcnExtent( | ||||||
|  |     HANDLE File, | ||||||
|  |     LARGE_INTEGER * Vcn, | ||||||
|  |     S_NTFSSECT_EXTENT * Extent | ||||||
|  |   ) { | ||||||
|  |     BOOL bad, ok; | ||||||
|  |     DWORD output_size, rc; | ||||||
|  |     STARTING_VCN_INPUT_BUFFER input; | ||||||
|  |     RETRIEVAL_POINTERS_BUFFER output; | ||||||
|  | 
 | ||||||
|  |     bad = ( | ||||||
|  |         File == INVALID_HANDLE_VALUE || | ||||||
|  |         !Vcn || | ||||||
|  |         Vcn->QuadPart < 0 || | ||||||
|  |         !Extent | ||||||
|  |       ); | ||||||
|  |     if (bad) | ||||||
|  |       return ERROR_INVALID_PARAMETER; | ||||||
|  | 
 | ||||||
|  |     input.StartingVcn = *Vcn; | ||||||
|  |     ok = DeviceIoControl( | ||||||
|  |         File, | ||||||
|  |         FSCTL_GET_RETRIEVAL_POINTERS, | ||||||
|  |         &input, | ||||||
|  |         sizeof input, | ||||||
|  |         &output, | ||||||
|  |         sizeof output, | ||||||
|  |         &output_size, | ||||||
|  |         NULL | ||||||
|  |       ); | ||||||
|  |     ok = ok; | ||||||
|  |     rc = GetLastError(); | ||||||
|  |     switch (rc) { | ||||||
|  |         case NO_ERROR: | ||||||
|  |         case ERROR_MORE_DATA: | ||||||
|  |           Extent->FirstVcn = output.StartingVcn; | ||||||
|  |           Extent->NextVcn = output.Extents[0].NextVcn; | ||||||
|  |           Extent->FirstLcn = output.Extents[0].Lcn; | ||||||
|  |           return ERROR_SUCCESS; | ||||||
|  | 
 | ||||||
|  |         case ERROR_HANDLE_EOF: | ||||||
|  |           break; | ||||||
|  | 
 | ||||||
|  |         default: | ||||||
|  |           M_ERR("NtfsSectGetFileVcnExtent(): Unknown status!"); | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |     return rc; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | /* Internal use only */ | ||||||
|  | static DWORD NtfsSectGetVolumeHandle( | ||||||
|  |     CHAR * VolumeName, | ||||||
|  |     S_NTFSSECT_VOLINFO * VolumeInfo | ||||||
|  |   ) { | ||||||
|  |     #define M_VOL_PREFIX "\\\\.\\" | ||||||
|  |     CHAR volname[sizeof M_VOL_PREFIX - 1 + MAX_PATH + 1] = M_VOL_PREFIX; | ||||||
|  |     CHAR * const volname_short = volname + sizeof M_VOL_PREFIX - 1; | ||||||
|  |     CHAR * c; | ||||||
|  |     DWORD rc; | ||||||
|  | 
 | ||||||
|  |     /* Prefix "\\.\" onto the passed volume name */ | ||||||
|  |     strcpy(volname + sizeof M_VOL_PREFIX - 1, VolumeName); | ||||||
|  | 
 | ||||||
|  |     /* Find the last non-null character */ | ||||||
|  |     for (c = volname_short; *c; ++c) | ||||||
|  |       ; | ||||||
|  | 
 | ||||||
|  |     /* Remove trailing back-slash */ | ||||||
|  |     if (c[-1] == '\\') | ||||||
|  |       c[-1] = 0; | ||||||
|  | 
 | ||||||
|  |     /* Open the volume */ | ||||||
|  |     VolumeInfo->Handle = CreateFileA( | ||||||
|  |         volname, | ||||||
|  |         GENERIC_READ, | ||||||
|  |         FILE_SHARE_READ | FILE_SHARE_WRITE, | ||||||
|  |         NULL, | ||||||
|  |         OPEN_EXISTING, | ||||||
|  |         0, | ||||||
|  |         NULL | ||||||
|  |       ); | ||||||
|  |     rc = GetLastError(); | ||||||
|  |     if (VolumeInfo->Handle == INVALID_HANDLE_VALUE) { | ||||||
|  |         M_ERR("Unable to open volume handle!"); | ||||||
|  |         goto err_handle; | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |     return ERROR_SUCCESS; | ||||||
|  | 
 | ||||||
|  |     CloseHandle(VolumeInfo->Handle); | ||||||
|  |     err_handle: | ||||||
|  | 
 | ||||||
|  |     return rc; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | DWORD M_NTFSSECT_API NtfsSectGetVolumeInfo( | ||||||
|  |     CHAR * VolumeName, | ||||||
|  |     S_NTFSSECT_VOLINFO * VolumeInfo | ||||||
|  |   ) { | ||||||
|  |     S_NTFSSECT_XPFUNCS xp_funcs; | ||||||
|  |     DWORD rc, free_clusts, total_clusts; | ||||||
|  |     BOOL ok; | ||||||
|  | 
 | ||||||
|  |     if (!VolumeName || !VolumeInfo) | ||||||
|  |       return ERROR_INVALID_PARAMETER; | ||||||
|  | 
 | ||||||
|  |     rc = NtfsSectGetVolumeHandle(VolumeName, VolumeInfo); | ||||||
|  |     if (rc != ERROR_SUCCESS) | ||||||
|  |       goto err_handle; | ||||||
|  | 
 | ||||||
|  |     rc = NtfsSectLoadXpFuncs(&xp_funcs); | ||||||
|  |     if (rc != ERROR_SUCCESS) | ||||||
|  |       goto err_xp_funcs; | ||||||
|  | 
 | ||||||
|  |     ok = xp_funcs.GetDiskFreeSpace( | ||||||
|  |         VolumeName, | ||||||
|  |         &VolumeInfo->SectorsPerCluster, | ||||||
|  |         &VolumeInfo->BytesPerSector, | ||||||
|  |         &free_clusts, | ||||||
|  |         &total_clusts | ||||||
|  |       ); | ||||||
|  |     rc = GetLastError(); | ||||||
|  |     if (!ok) { | ||||||
|  |         M_ERR("GetDiskFreeSpace() failed!"); | ||||||
|  |         goto err_freespace; | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |     rc = NtfsSectGetVolumePartitionLba(VolumeInfo); | ||||||
|  |     if (rc != ERROR_SUCCESS) | ||||||
|  |       goto err_lba; | ||||||
|  | 
 | ||||||
|  |     VolumeInfo->Size = sizeof *VolumeInfo; | ||||||
|  |     rc = ERROR_SUCCESS; | ||||||
|  | 
 | ||||||
|  |     err_lba: | ||||||
|  | 
 | ||||||
|  |     err_freespace: | ||||||
|  | 
 | ||||||
|  |     NtfsSectUnloadXpFuncs(&xp_funcs); | ||||||
|  |     err_xp_funcs: | ||||||
|  | 
 | ||||||
|  |     if (rc != ERROR_SUCCESS) { | ||||||
|  |         CloseHandle(VolumeInfo->Handle); | ||||||
|  |         VolumeInfo->Handle = INVALID_HANDLE_VALUE; | ||||||
|  |       } | ||||||
|  |     err_handle: | ||||||
|  | 
 | ||||||
|  |     return rc; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | DWORD M_NTFSSECT_API NtfsSectGetVolumeInfoFromFileName( | ||||||
|  |     CHAR * FileName, | ||||||
|  |     S_NTFSSECT_VOLINFO * VolumeInfo | ||||||
|  |   ) { | ||||||
|  |     S_NTFSSECT_XPFUNCS xp_funcs; | ||||||
|  |     DWORD rc; | ||||||
|  |     CHAR volname[MAX_PATH + 1]; | ||||||
|  |     BOOL ok; | ||||||
|  | 
 | ||||||
|  |     if (!FileName || !VolumeInfo) | ||||||
|  |       return ERROR_INVALID_PARAMETER; | ||||||
|  | 
 | ||||||
|  |     rc = NtfsSectLoadXpFuncs(&xp_funcs); | ||||||
|  |     if (rc != ERROR_SUCCESS) { | ||||||
|  |         goto err_xp_funcs; | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |     ok = xp_funcs.GetVolumePathName( | ||||||
|  |         FileName, | ||||||
|  |         volname, | ||||||
|  |         sizeof volname | ||||||
|  |       ); | ||||||
|  |     rc = GetLastError(); | ||||||
|  |     if (!ok) { | ||||||
|  |         M_ERR("GetVolumePathName() failed!"); | ||||||
|  |         goto err_volname; | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |     rc = NtfsSectGetVolumeInfo(volname, VolumeInfo); | ||||||
|  | 
 | ||||||
|  |     err_volname: | ||||||
|  | 
 | ||||||
|  |     NtfsSectUnloadXpFuncs(&xp_funcs); | ||||||
|  |     err_xp_funcs: | ||||||
|  | 
 | ||||||
|  |     return rc; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | /* Internal use only */ | ||||||
|  | static DWORD NtfsSectGetVolumePartitionLba(S_NTFSSECT_VOLINFO * VolumeInfo) { | ||||||
|  |     BOOL ok; | ||||||
|  |     VOLUME_DISK_EXTENTS vol_disk_extents; | ||||||
|  |     DWORD output_size, rc; | ||||||
|  | 
 | ||||||
|  |     ok = DeviceIoControl( | ||||||
|  |         VolumeInfo->Handle, | ||||||
|  |         IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, | ||||||
|  |         NULL, | ||||||
|  |         0, | ||||||
|  |         &vol_disk_extents, | ||||||
|  |         sizeof vol_disk_extents, | ||||||
|  |         &output_size, | ||||||
|  |         NULL | ||||||
|  |       ); | ||||||
|  |     rc = GetLastError(); | ||||||
|  |     if (!ok) { | ||||||
|  |         M_ERR("Couldn't fetch volume disk extent(s)!"); | ||||||
|  |         goto err_vol_disk_extents; | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |     if (vol_disk_extents.NumberOfDiskExtents != 1) { | ||||||
|  |         M_ERR("Unsupported number of volume disk extents!"); | ||||||
|  |         goto err_num_of_extents; | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |     VolumeInfo->PartitionLba.QuadPart = ( | ||||||
|  |         vol_disk_extents.Extents[0].StartingOffset.QuadPart / | ||||||
|  |         VolumeInfo->BytesPerSector | ||||||
|  |       ); | ||||||
|  | 
 | ||||||
|  |     return ERROR_SUCCESS; | ||||||
|  | 
 | ||||||
|  |     err_num_of_extents: | ||||||
|  | 
 | ||||||
|  |     err_vol_disk_extents: | ||||||
|  | 
 | ||||||
|  |     return rc; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | DWORD M_NTFSSECT_API NtfsSectLcnToLba( | ||||||
|  |     const S_NTFSSECT_VOLINFO * VolumeInfo, | ||||||
|  |     const LARGE_INTEGER * Lcn, | ||||||
|  |     LARGE_INTEGER * Lba | ||||||
|  |   ) { | ||||||
|  |     BOOL bad; | ||||||
|  |     bad = ( | ||||||
|  |         !VolumeInfo || | ||||||
|  |         !VolumeInfo->BytesPerSector || | ||||||
|  |         !VolumeInfo->SectorsPerCluster || | ||||||
|  |         !Lcn || | ||||||
|  |         Lcn->QuadPart < 0 || | ||||||
|  |         !Lba | ||||||
|  |       ); | ||||||
|  |     if (bad) | ||||||
|  |       return ERROR_INVALID_PARAMETER; | ||||||
|  | 
 | ||||||
|  |     Lba->QuadPart = ( | ||||||
|  |         VolumeInfo->PartitionLba.QuadPart + | ||||||
|  |         Lcn->QuadPart * | ||||||
|  |         VolumeInfo->SectorsPerCluster | ||||||
|  |       ); | ||||||
|  |     return ERROR_SUCCESS; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | DWORD M_NTFSSECT_API NtfsSectLoadXpFuncs(S_NTFSSECT_XPFUNCS * XpFuncs) { | ||||||
|  |     DWORD rc; | ||||||
|  | 
 | ||||||
|  |     if (!XpFuncs) | ||||||
|  |       return ERROR_INVALID_PARAMETER; | ||||||
|  | 
 | ||||||
|  |     XpFuncs->Size = sizeof *XpFuncs; | ||||||
|  | 
 | ||||||
|  |     XpFuncs->Kernel32 = LoadLibraryA("kernel32.dll"); | ||||||
|  |     rc = GetLastError(); | ||||||
|  |     if (!XpFuncs->Kernel32) { | ||||||
|  |         M_ERR("KERNEL32.DLL not found!"); | ||||||
|  |         goto err; | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |     XpFuncs->GetVolumePathName = (F_KERNEL32_GETVOLUMEPATHNAME *) ( | ||||||
|  |         GetProcAddress( | ||||||
|  |             XpFuncs->Kernel32, | ||||||
|  |             "GetVolumePathNameA" | ||||||
|  |           ) | ||||||
|  |       ); | ||||||
|  |     rc = GetLastError(); | ||||||
|  |     if (!XpFuncs->GetVolumePathName) { | ||||||
|  |         M_ERR("GetVolumePathName() not found in KERNEL32.DLL!"); | ||||||
|  |         goto err; | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |     XpFuncs->GetDiskFreeSpace = (F_KERNEL32_GETDISKFREESPACE *) ( | ||||||
|  |         GetProcAddress( | ||||||
|  |             XpFuncs->Kernel32, | ||||||
|  |             "GetDiskFreeSpaceA" | ||||||
|  |           ) | ||||||
|  |       ); | ||||||
|  |     rc = GetLastError(); | ||||||
|  |     if (!XpFuncs->GetDiskFreeSpace) { | ||||||
|  |         M_ERR("GetDiskFreeSpace() not found in KERNEL32.DLL!"); | ||||||
|  |         goto err; | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |     return ERROR_SUCCESS; | ||||||
|  | 
 | ||||||
|  |     err: | ||||||
|  |     NtfsSectUnloadXpFuncs(XpFuncs); | ||||||
|  |     return rc; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | VOID M_NTFSSECT_API NtfsSectUnloadXpFuncs(S_NTFSSECT_XPFUNCS * XpFuncs) { | ||||||
|  |     if (!XpFuncs) | ||||||
|  |       return; | ||||||
|  | 
 | ||||||
|  |     XpFuncs->GetDiskFreeSpace = NULL; | ||||||
|  |     XpFuncs->GetVolumePathName = NULL; | ||||||
|  |     if (XpFuncs->Kernel32) | ||||||
|  |       FreeLibrary(XpFuncs->Kernel32); | ||||||
|  |     XpFuncs->Kernel32 = NULL; | ||||||
|  |     XpFuncs->Size = 0; | ||||||
|  |     return; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
							
								
								
									
										152
									
								
								src/syslinux/libinstaller/ntfssect.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								src/syslinux/libinstaller/ntfssect.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,152 @@ | ||||||
|  | /* -------------------------------------------------------------------------- *
 | ||||||
|  |  * | ||||||
|  |  *   Copyright 2011 Shao Miller - All Rights Reserved | ||||||
|  |  * | ||||||
|  |  *   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 | ||||||
|  |  *   the Free Software Foundation, Inc., 53 Temple Place Ste 330, | ||||||
|  |  *   Boston MA 02111-1307, USA; either version 2 of the License, or | ||||||
|  |  *   (at your option) any later version; incorporated herein by reference. | ||||||
|  |  * | ||||||
|  |  * ------------------------------------------------------------------------- */ | ||||||
|  | #ifndef M_NTFSSECT_H_ | ||||||
|  | 
 | ||||||
|  | /****
 | ||||||
|  |  * ntfssect.h | ||||||
|  |  * | ||||||
|  |  * Fetch NTFS file cluster & sector information via Windows | ||||||
|  |  * | ||||||
|  |  * With special thanks to Mark Roddy for his article: | ||||||
|  |  *   http://www.wd-3.com/archive/luserland.htm
 | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /*** Macros */ | ||||||
|  | #define M_NTFSSECT_H_ | ||||||
|  | #define M_NTFSSECT_API | ||||||
|  | 
 | ||||||
|  | /*** Object types */ | ||||||
|  | 
 | ||||||
|  | /* An "extent;" a contiguous range of file data */ | ||||||
|  | typedef struct S_NTFSSECT_EXTENT_ S_NTFSSECT_EXTENT; | ||||||
|  | 
 | ||||||
|  | /* Volume info relevant to file cluster & sector info */ | ||||||
|  | typedef struct S_NTFSSECT_VOLINFO_ S_NTFSSECT_VOLINFO; | ||||||
|  | 
 | ||||||
|  | /* Stores function pointers to some Windows functions */ | ||||||
|  | typedef struct S_NTFSSECT_XPFUNCS_ S_NTFSSECT_XPFUNCS; | ||||||
|  | 
 | ||||||
|  | /*** Function types */ | ||||||
|  | 
 | ||||||
|  | /* The function type for Kernel32.dll's GetDiskFreeSpace() */ | ||||||
|  | typedef BOOL WINAPI F_KERNEL32_GETDISKFREESPACE( | ||||||
|  |     LPCSTR, | ||||||
|  |     LPDWORD, | ||||||
|  |     LPDWORD, | ||||||
|  |     LPDWORD, | ||||||
|  |     LPDWORD | ||||||
|  |   ); | ||||||
|  | 
 | ||||||
|  | /* The function type for Kernel32.dll's GetVolumePathName() */ | ||||||
|  | typedef BOOL WINAPI F_KERNEL32_GETVOLUMEPATHNAME(LPCSTR, LPCSTR, DWORD); | ||||||
|  | 
 | ||||||
|  | /*** Function declarations */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Fetch the extent containing a particular VCN | ||||||
|  |  * | ||||||
|  |  * @v File | ||||||
|  |  * @v Vcn | ||||||
|  |  * @v Extent | ||||||
|  |  * @ret DWORD | ||||||
|  |  */ | ||||||
|  | DWORD M_NTFSSECT_API NtfsSectGetFileVcnExtent( | ||||||
|  |     HANDLE File, | ||||||
|  |     LARGE_INTEGER * Vcn, | ||||||
|  |     S_NTFSSECT_EXTENT * Extent | ||||||
|  |   ); | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Populate a volume info object | ||||||
|  |  * | ||||||
|  |  * @v VolumeName | ||||||
|  |  * @v VolumeInfo | ||||||
|  |  * @ret DWORD | ||||||
|  |  */ | ||||||
|  | DWORD M_NTFSSECT_API NtfsSectGetVolumeInfo( | ||||||
|  |     CHAR * VolumeName, | ||||||
|  |     S_NTFSSECT_VOLINFO * VolumeInfo | ||||||
|  |   ); | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Populate a volume info object | ||||||
|  |  * | ||||||
|  |  * @v FileName | ||||||
|  |  * @v VolumeInfo | ||||||
|  |  * @ret DWORD | ||||||
|  |  */ | ||||||
|  | DWORD M_NTFSSECT_API NtfsSectGetVolumeInfoFromFileName( | ||||||
|  |     CHAR * FileName, | ||||||
|  |     S_NTFSSECT_VOLINFO * VolumeInfo | ||||||
|  |   ); | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Convert a volume LCN to an absolute disk LBA | ||||||
|  |  * | ||||||
|  |  * @v VolumeInfo | ||||||
|  |  * @v Lcn | ||||||
|  |  * @v Lba | ||||||
|  |  * @ret DWORD | ||||||
|  |  */ | ||||||
|  | DWORD M_NTFSSECT_API NtfsSectLcnToLba( | ||||||
|  |     const S_NTFSSECT_VOLINFO * VolumeInfo, | ||||||
|  |     const LARGE_INTEGER * Lcn, | ||||||
|  |     LARGE_INTEGER * Lba | ||||||
|  |   ); | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Load some helper XP functions | ||||||
|  |  * | ||||||
|  |  * @v XpFuncs | ||||||
|  |  * @ret DWORD | ||||||
|  |  */ | ||||||
|  | DWORD M_NTFSSECT_API NtfsSectLoadXpFuncs(S_NTFSSECT_XPFUNCS * XpFuncs); | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Unload some helper XP functions | ||||||
|  |  * | ||||||
|  |  * @v XpFuncs | ||||||
|  |  * @ret DWORD | ||||||
|  |  */ | ||||||
|  | VOID M_NTFSSECT_API NtfsSectUnloadXpFuncs(S_NTFSSECT_XPFUNCS * XpFuncs); | ||||||
|  | 
 | ||||||
|  | /*** Object declarations */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * The last error message set by one of our functions. | ||||||
|  |  * Obviously not per-thread | ||||||
|  |  */ | ||||||
|  | extern CHAR * NtfsSectLastErrorMessage; | ||||||
|  | 
 | ||||||
|  | /*** Struct/union definitions */ | ||||||
|  | struct S_NTFSSECT_EXTENT_ { | ||||||
|  |     LARGE_INTEGER FirstVcn; | ||||||
|  |     LARGE_INTEGER NextVcn; | ||||||
|  |     LARGE_INTEGER FirstLcn; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  | struct S_NTFSSECT_VOLINFO_ { | ||||||
|  |     DWORD Size; | ||||||
|  |     HANDLE Handle; | ||||||
|  |     DWORD BytesPerSector; | ||||||
|  |     DWORD SectorsPerCluster; | ||||||
|  |     LARGE_INTEGER PartitionLba; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  | struct S_NTFSSECT_XPFUNCS_ { | ||||||
|  |     DWORD Size; | ||||||
|  |     HMODULE Kernel32; | ||||||
|  |     F_KERNEL32_GETVOLUMEPATHNAME * GetVolumePathName; | ||||||
|  |     F_KERNEL32_GETDISKFREESPACE * GetDiskFreeSpace; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  | #endif /* M_NTFSSECT_H_ */ | ||||||
|  | @ -18,6 +18,14 @@ | ||||||
| #include "advconst.h" | #include "advconst.h" | ||||||
| #include "setadv.h" | #include "setadv.h" | ||||||
| 
 | 
 | ||||||
|  | #ifdef __CHECKER__ | ||||||
|  | # define _slimg __attribute__((noderef,address_space(1))) | ||||||
|  | # define _force __attribute__((force)) | ||||||
|  | #else | ||||||
|  | # define _slimg | ||||||
|  | # define _force | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| /* The standard boot sector and ldlinux image */ | /* The standard boot sector and ldlinux image */ | ||||||
| extern unsigned char* syslinux_ldlinux[2]; | extern unsigned char* syslinux_ldlinux[2]; | ||||||
| extern DWORD syslinux_ldlinux_len[2]; | extern DWORD syslinux_ldlinux_len[2]; | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /*
 | /*
 | ||||||
|  *   Copyright 2011 Paulo Alcantara <pcacjr@gmail.com> |  *   Copyright 2011-2012 Paulo Alcantara <pcacjr@zytor.com> | ||||||
|  * |  * | ||||||
|  *   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 | ||||||
|  | @ -12,13 +12,16 @@ | ||||||
| #ifndef _SYSLXFS_H_ | #ifndef _SYSLXFS_H_ | ||||||
| #define _SYSLXFS_H_ | #define _SYSLXFS_H_ | ||||||
| 
 | 
 | ||||||
| /* Global fs_type for handling fat, ntfs, ext2/3/4 and btrfs */ | /* Global fs_type for handling fat, ntfs, ext2/3/4, btrfs, xfs and ufs1/2 */ | ||||||
| enum filesystem { | enum filesystem { | ||||||
|     NONE, |     NONE, | ||||||
|     EXT2, |     EXT2, | ||||||
|     BTRFS, |     BTRFS, | ||||||
|     VFAT, |     VFAT, | ||||||
|     NTFS, |     NTFS, | ||||||
|  |     XFS, | ||||||
|  |     UFS1, | ||||||
|  |     UFS2, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| //extern int fs_type;
 | //extern int fs_type;
 | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| /* ----------------------------------------------------------------------- *
 | /* ----------------------------------------------------------------------- *
 | ||||||
|  * |  * | ||||||
|  *   Copyright 2007-2008 H. Peter Anvin - All Rights Reserved |  *   Copyright 2007-2008 H. Peter Anvin - All Rights Reserved | ||||||
|  *   Copyright 2009-2011 Intel Corporation; author: H. Peter Anvin |  *   Copyright 2009-2014 Intel Corporation; author: H. Peter Anvin | ||||||
|  *   Copyright 2011 Paulo Alcantara <pcacjr@gmail.com> |  *   Copyright 2011 Paulo Alcantara <pcacjr@gmail.com> | ||||||
|  * |  * | ||||||
|  *   This program is free software; you can redistribute it and/or modify |  *   This program is free software; you can redistribute it and/or modify | ||||||
|  | @ -26,16 +26,15 @@ | ||||||
| #ifdef __GNUC__ | #ifdef __GNUC__ | ||||||
| # ifdef __MINGW32__ | # ifdef __MINGW32__ | ||||||
|    /* gcc 4.7 miscompiles packed structures in MS-bitfield mode */ |    /* gcc 4.7 miscompiles packed structures in MS-bitfield mode */ | ||||||
| #  define GNUC_PACKED __attribute__((packed,gcc_struct)) | #  define PACKME | ||||||
|  | #  define PACKED __attribute__((packed,gcc_struct)) | ||||||
| # else | # else | ||||||
| #  define GNUC_PACKED __attribute__((packed)) | #  define PACKME | ||||||
|  | #  define PACKED __attribute__((packed)) | ||||||
| # endif | # endif | ||||||
| # define PRAGMA_BEGIN_PACKED |  | ||||||
| # define PRAGMA_END_PACKED |  | ||||||
| #elif defined(_MSC_VER) | #elif defined(_MSC_VER) | ||||||
| # define GNUC_PACKED | # define PACKME __pragma(pack(push, 1)) | ||||||
| # define PRAGMA_BEGIN_PACKED __pragma(pack(push, 1)) | # define PACKED __pragma(pack(pop)) | ||||||
| # define PRAGMA_END_PACKED   __pragma(pack(pop)) |  | ||||||
| #else | #else | ||||||
| # error "Need to define PACKED for this compiler" | # error "Need to define PACKED for this compiler" | ||||||
| #endif | #endif | ||||||
|  | @ -66,7 +65,7 @@ static inline uint32_t get_32(const uint32_t * p) | ||||||
|     return *p; |     return *p; | ||||||
| #else | #else | ||||||
|     const uint16_t *pp = (const uint16_t *)p; |     const uint16_t *pp = (const uint16_t *)p; | ||||||
|     return get_16(pp[0]) + (uint32_t)get_16(pp[1]); |     return get_16(&pp[0]) + ((uint32_t)get_16(&pp[1]) << 16); | ||||||
| #endif | #endif | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -77,7 +76,7 @@ static inline uint64_t get_64(const uint64_t * p) | ||||||
|     return *p; |     return *p; | ||||||
| #else | #else | ||||||
|     const uint32_t *pp = (const uint32_t *)p; |     const uint32_t *pp = (const uint32_t *)p; | ||||||
|     return get_32(pp[0]) + (uint64_t)get_32(pp[1]); |     return get_32(&pp[0]) + ((uint64_t)get_32(&pp[1]) << 32); | ||||||
| #endif | #endif | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -104,11 +103,9 @@ static inline void set_32(uint32_t *p, uint32_t v) | ||||||
|     /* Littleendian and unaligned-capable */ |     /* Littleendian and unaligned-capable */ | ||||||
|     *p = v; |     *p = v; | ||||||
| #else | #else | ||||||
|     uint8_t *pp = (uint8_t *) p; |     uint16_t *pp = (uint16_t *) p; | ||||||
|     pp[0] = (v & 0xff); |     set_16(&pp[0], v); | ||||||
|     pp[1] = ((v >> 8) & 0xff); |     set_16(&pp[1], v >> 16); | ||||||
|     pp[2] = ((v >> 16) & 0xff); |  | ||||||
|     pp[3] = ((v >> 24) & 0xff); |  | ||||||
| #endif | #endif | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -119,8 +116,8 @@ static inline void set_64(uint64_t *p, uint64_t v) | ||||||
|     *p = v; |     *p = v; | ||||||
| #else | #else | ||||||
|     uint32_t *pp = (uint32_t *) p; |     uint32_t *pp = (uint32_t *) p; | ||||||
|     set_32(pp[0], v); |     set_32(&pp[0], v); | ||||||
|     set_32(pp[1], v >> 32); |     set_32(&pp[1], v >> 32); | ||||||
| #endif | #endif | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -130,47 +127,65 @@ static inline void set_64(uint64_t *p, uint64_t v) | ||||||
|  */ |  */ | ||||||
| #ifdef __MSDOS__ | #ifdef __MSDOS__ | ||||||
| 
 | 
 | ||||||
| static inline __attribute__ ((const)) | uint8_t get_8_sl(const uint8_t _slimg * p); | ||||||
| uint16_t ds(void) | uint16_t get_16_sl(const uint16_t _slimg * p); | ||||||
| { | uint32_t get_32_sl(const uint32_t _slimg * p); | ||||||
|     uint16_t v; | uint64_t get_64_sl(const uint64_t _slimg * p); | ||||||
|     asm("movw %%ds,%0":"=rm"(v)); | void set_8_sl(uint8_t _slimg * p, uint8_t v); | ||||||
|     return v; | void set_16_sl(uint16_t _slimg * p, uint16_t v); | ||||||
| } | void set_32_sl(uint32_t _slimg * p, uint32_t v); | ||||||
| 
 | void set_64_sl(uint64_t _slimg * p, uint64_t v); | ||||||
| static inline void *set_fs(const void *p) | void memcpy_to_sl(void _slimg *dst, const void *src, size_t len); | ||||||
| { | void memcpy_from_sl(void *dst, const void _slimg *src, size_t len); | ||||||
|     uint16_t seg; | void memset_sl(void _slimg *dst, int c, size_t len); | ||||||
| 
 |  | ||||||
|     seg = ds() + ((size_t) p >> 4); |  | ||||||
|     asm volatile ("movw %0,%%fs"::"rm" (seg)); |  | ||||||
|     return (void *)((size_t) p & 0xf); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| uint8_t get_8_sl(const uint8_t * p); |  | ||||||
| uint16_t get_16_sl(const uint16_t * p); |  | ||||||
| uint32_t get_32_sl(const uint32_t * p); |  | ||||||
| uint64_t get_64_sl(const uint64_t * p); |  | ||||||
| void set_8_sl(uint8_t * p, uint8_t v); |  | ||||||
| void set_16_sl(uint16_t * p, uint16_t v); |  | ||||||
| void set_32_sl(uint32_t * p, uint32_t v); |  | ||||||
| void set_64_sl(uint64_t * p, uint64_t v); |  | ||||||
| void memcpy_to_sl(void *dst, const void *src, size_t len); |  | ||||||
| void memcpy_from_sl(void *dst, const void *src, size_t len); |  | ||||||
| 
 | 
 | ||||||
| #else | #else | ||||||
| 
 | 
 | ||||||
| /* Sane system ... */ | /* Sane system ... */ | ||||||
| #define get_8_sl(x)    		get_8(x) | static inline uint8_t get_8_sl(const uint8_t _slimg * p) | ||||||
| #define get_16_sl(x)   		get_16(x) | { | ||||||
| #define get_32_sl(x)   		get_32(x) |     return get_8((const uint8_t _force *)p); | ||||||
| #define get_64_sl(x)   		get_64(x) | } | ||||||
| #define set_8_sl(x,y)  		set_8(x,y) | static inline uint16_t get_16_sl(const uint16_t _slimg * p) | ||||||
| #define set_16_sl(x,y) 		set_16(x,y) | { | ||||||
| #define set_32_sl(x,y) 		set_32(x,y) |     return get_16((const uint16_t _force *)p); | ||||||
| #define set_64_sl(x,y) 		set_64(x,y) | } | ||||||
| #define memcpy_to_sl(d,s,l)	memcpy(d,s,l) | static inline uint32_t get_32_sl(const uint32_t _slimg * p) | ||||||
| #define memcpy_from_sl(d,s,l)	memcpy(d,s,l) | { | ||||||
|  |     return get_32((const uint32_t _force *)p); | ||||||
|  | } | ||||||
|  | static inline uint64_t get_64_sl(const uint64_t _slimg * p) | ||||||
|  | { | ||||||
|  |     return get_64((const uint64_t _force *)p); | ||||||
|  | } | ||||||
|  | static inline void set_8_sl(uint8_t _slimg * p, uint8_t v) | ||||||
|  | { | ||||||
|  |     set_8((uint8_t _force *)p, v); | ||||||
|  | } | ||||||
|  | static inline void set_16_sl(uint16_t _slimg * p, uint16_t v) | ||||||
|  | { | ||||||
|  |     set_16((uint16_t _force *)p, v); | ||||||
|  | } | ||||||
|  | static inline void set_32_sl(uint32_t _slimg * p, uint32_t v) | ||||||
|  | { | ||||||
|  |     set_32((uint32_t _force *)p, v); | ||||||
|  | } | ||||||
|  | static inline void set_64_sl(uint64_t _slimg * p, uint64_t v) | ||||||
|  | { | ||||||
|  |     set_64((uint64_t _force *)p, v); | ||||||
|  | } | ||||||
|  | static inline void memcpy_to_sl(void _slimg *dst, const void *src, size_t len) | ||||||
|  | { | ||||||
|  |     memcpy((void _force *)dst, src, len); | ||||||
|  | } | ||||||
|  | static inline void memcpy_from_sl(void *dst, const void _slimg *src, size_t len) | ||||||
|  | { | ||||||
|  |     memcpy(dst, (const void _force *)src, len); | ||||||
|  | } | ||||||
|  | static inline void memset_sl(void _slimg *dst, int c, size_t len) | ||||||
|  | { | ||||||
|  |     memset((void _force *)dst, c, len); | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | @ -204,13 +219,14 @@ struct ext_patch_area { | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /* Sector extent */ | /* Sector extent */ | ||||||
| PRAGMA_BEGIN_PACKED | PACKME | ||||||
| struct syslinux_extent { | struct syslinux_extent { | ||||||
|     uint64_t lba; |     uint64_t lba; | ||||||
|     uint16_t len; |     uint16_t len; | ||||||
| } GNUC_PACKED; | } PACKED; | ||||||
| 
 | 
 | ||||||
| /* FAT bootsector format, also used by other disk-based derivatives */ | /* FAT bootsector format, also used by other disk-based derivatives */ | ||||||
|  | PACKME | ||||||
| struct fat_boot_sector { | struct fat_boot_sector { | ||||||
|     uint8_t bsJump[3]; |     uint8_t bsJump[3]; | ||||||
|     char bsOemName[8]; |     char bsOemName[8]; | ||||||
|  | @ -227,7 +243,9 @@ struct fat_boot_sector { | ||||||
|     uint32_t bsHiddenSecs; |     uint32_t bsHiddenSecs; | ||||||
|     uint32_t bsHugeSectors; |     uint32_t bsHugeSectors; | ||||||
| 
 | 
 | ||||||
|  |     PACKME | ||||||
|     union { |     union { | ||||||
|  | 	PACKME | ||||||
| 	struct { | 	struct { | ||||||
| 	    uint8_t DriveNumber; | 	    uint8_t DriveNumber; | ||||||
| 	    uint8_t Reserved1; | 	    uint8_t Reserved1; | ||||||
|  | @ -236,7 +254,8 @@ struct fat_boot_sector { | ||||||
| 	    char VolumeLabel[11]; | 	    char VolumeLabel[11]; | ||||||
| 	    char FileSysType[8]; | 	    char FileSysType[8]; | ||||||
| 	    uint8_t Code[442]; | 	    uint8_t Code[442]; | ||||||
| 	} GNUC_PACKED bs16; | 	} PACKED bs16; | ||||||
|  | 	PACKME | ||||||
| 	struct { | 	struct { | ||||||
| 	    uint32_t FATSz32; | 	    uint32_t FATSz32; | ||||||
| 	    uint16_t ExtFlags; | 	    uint16_t ExtFlags; | ||||||
|  | @ -252,15 +271,16 @@ struct fat_boot_sector { | ||||||
| 	    char VolumeLabel[11]; | 	    char VolumeLabel[11]; | ||||||
| 	    char FileSysType[8]; | 	    char FileSysType[8]; | ||||||
| 	    uint8_t Code[414]; | 	    uint8_t Code[414]; | ||||||
| 	} GNUC_PACKED bs32; | 	} PACKED bs32; | ||||||
|     } GNUC_PACKED; |     } PACKED; | ||||||
| 
 | 
 | ||||||
|     uint32_t bsMagic; |     uint32_t bsMagic; | ||||||
|     uint16_t bsForwardPtr; |     uint16_t bsForwardPtr; | ||||||
|     uint16_t bsSignature; |     uint16_t bsSignature; | ||||||
| } GNUC_PACKED; | } PACKED; | ||||||
| 
 | 
 | ||||||
| /* NTFS bootsector format */ | /* NTFS bootsector format */ | ||||||
|  | PACKME | ||||||
| struct ntfs_boot_sector { | struct ntfs_boot_sector { | ||||||
|     uint8_t bsJump[3]; |     uint8_t bsJump[3]; | ||||||
|     char bsOemName[8]; |     char bsOemName[8]; | ||||||
|  | @ -291,8 +311,7 @@ struct ntfs_boot_sector { | ||||||
|     uint32_t bsMagic; |     uint32_t bsMagic; | ||||||
|     uint16_t bsForwardPtr; |     uint16_t bsForwardPtr; | ||||||
|     uint16_t bsSignature; |     uint16_t bsSignature; | ||||||
| } GNUC_PACKED; | } PACKED; | ||||||
| PRAGMA_END_PACKED |  | ||||||
| 
 | 
 | ||||||
| #define FAT_bsHead      bsJump | #define FAT_bsHead      bsJump | ||||||
| #define FAT_bsHeadLen   offsetof(struct fat_boot_sector, bsBytesPerSec) | #define FAT_bsHeadLen   offsetof(struct fat_boot_sector, bsBytesPerSec) | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| /* ----------------------------------------------------------------------- *
 | /* ----------------------------------------------------------------------- *
 | ||||||
|  * |  * | ||||||
|  *   Copyright 1998-2008 H. Peter Anvin - All Rights Reserved |  *   Copyright 1998-2008 H. Peter Anvin - All Rights Reserved | ||||||
|  *   Copyright 2009-2010 Intel Corporation; author H. Peter Anvin |  *   Copyright 2009-2014 Intel Corporation; author H. Peter Anvin | ||||||
|  * |  * | ||||||
|  *   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 | ||||||
|  | @ -17,6 +17,8 @@ | ||||||
| 
 | 
 | ||||||
| #define _XOPEN_SOURCE 500	/* Required on glibc 2.x */ | #define _XOPEN_SOURCE 500	/* Required on glibc 2.x */ | ||||||
| #define _BSD_SOURCE | #define _BSD_SOURCE | ||||||
|  | /* glibc 2.20 deprecates _BSD_SOURCE in favour of _DEFAULT_SOURCE */ | ||||||
|  | #define _DEFAULT_SOURCE 1 | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <inttypes.h> | #include <inttypes.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
|  | @ -30,7 +32,7 @@ | ||||||
| /*
 | /*
 | ||||||
|  * Generate sector extents |  * Generate sector extents | ||||||
|  */ |  */ | ||||||
| static void generate_extents(struct syslinux_extent *ex, int nptrs, | static void generate_extents(struct syslinux_extent _slimg *ex, int nptrs, | ||||||
| 			     const sector_t *sectp, int nsect) | 			     const sector_t *sectp, int nsect) | ||||||
| { | { | ||||||
|     uint32_t addr = 0x8000;	/* ldlinux.sys starts loading here */ |     uint32_t addr = 0x8000;	/* ldlinux.sys starts loading here */ | ||||||
|  | @ -42,7 +44,7 @@ static void generate_extents(struct syslinux_extent *ex, int nptrs, | ||||||
|     len = 0; |     len = 0; | ||||||
|     lba = 0; |     lba = 0; | ||||||
| 
 | 
 | ||||||
|     memset(ex, 0, nptrs * sizeof *ex); |     memset_sl(ex, 0, nptrs * sizeof *ex); | ||||||
| 
 | 
 | ||||||
|     while (nsect) { |     while (nsect) { | ||||||
| 	sect = *sectp++; | 	sect = *sectp++; | ||||||
|  | @ -81,10 +83,15 @@ static void generate_extents(struct syslinux_extent *ex, int nptrs, | ||||||
| /*
 | /*
 | ||||||
|  * Form a pointer based on a 16-bit patcharea/epa field |  * Form a pointer based on a 16-bit patcharea/epa field | ||||||
|  */ |  */ | ||||||
| static inline void *ptr(void *img, uint16_t *offset_p) | static inline void *ptr(void *img, const uint16_t _slimg *offset_p) | ||||||
| { | { | ||||||
|     return (char *)img + get_16_sl(offset_p); |     return (char *)img + get_16_sl(offset_p); | ||||||
| } | } | ||||||
|  | static inline void _slimg *slptr(void _slimg *img, | ||||||
|  | 				 const uint16_t _slimg *offset_p) | ||||||
|  | { | ||||||
|  |     return (char _slimg *)img + get_16_sl(offset_p); | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * This patches the boot sector and the beginning of ldlinux.sys |  * This patches the boot sector and the beginning of ldlinux.sys | ||||||
|  | @ -101,25 +108,26 @@ int syslinux_patch(const sector_t *sectp, int nsectors, | ||||||
| 		   int stupid, int raid_mode, | 		   int stupid, int raid_mode, | ||||||
| 		   const char *subdir, const char *subvol) | 		   const char *subdir, const char *subvol) | ||||||
| { | { | ||||||
|     struct patch_area *patcharea; |     struct patch_area _slimg *patcharea; | ||||||
|     struct ext_patch_area *epa; |     struct ext_patch_area _slimg *epa; | ||||||
|     struct syslinux_extent *ex; |     struct syslinux_extent _slimg *ex; | ||||||
|     uint32_t *wp; |     const uint32_t _slimg *wp; | ||||||
|     int nsect = ((boot_image_len + SECTOR_SIZE - 1) >> SECTOR_SHIFT) + 2; |     int nsect = ((boot_image_len + SECTOR_SIZE - 1) >> SECTOR_SHIFT) + 2; | ||||||
|     uint32_t csum; |     uint32_t csum; | ||||||
|     int i, dw, nptrs; |     int i, dw, nptrs; | ||||||
|     struct fat_boot_sector *sbs = (struct fat_boot_sector *)boot_sector; |     struct fat_boot_sector *sbs = (struct fat_boot_sector *)boot_sector; | ||||||
|     uint64_t *advptrs; |     uint64_t _slimg *advptrs; | ||||||
| 
 | 
 | ||||||
|     if (nsectors < nsect) |     if (nsectors < nsect) | ||||||
| 	return -1;		/* The actual file is too small for content */ | 	return -1;		/* The actual file is too small for content */ | ||||||
| 
 | 
 | ||||||
|     /* Search for LDLINUX_MAGIC to find the patch area */ |     /* Search for LDLINUX_MAGIC to find the patch area */ | ||||||
|     for (wp = (uint32_t *)boot_image; get_32_sl(wp) != LDLINUX_MAGIC; |     for (wp = (const uint32_t _slimg *)boot_image; | ||||||
|  | 	 get_32_sl(wp) != LDLINUX_MAGIC; | ||||||
| 	 wp++) | 	 wp++) | ||||||
| 	; | 	; | ||||||
|     patcharea = (struct patch_area *)wp; |     patcharea = (struct patch_area _slimg *)wp; | ||||||
|     epa = ptr(boot_image, &patcharea->epaoffset); |     epa = slptr(boot_image, &patcharea->epaoffset); | ||||||
| 
 | 
 | ||||||
|     /* First sector need pointer in boot sector */ |     /* First sector need pointer in boot sector */ | ||||||
|     set_32(ptr(sbs, &epa->sect1ptr0), (uint32_t) sectp[0]); |     set_32(ptr(sbs, &epa->sect1ptr0), (uint32_t) sectp[0]); | ||||||
|  | @ -145,20 +153,22 @@ int syslinux_patch(const sector_t *sectp, int nsectors, | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /* Set the sector extents */ |     /* Set the sector extents */ | ||||||
|     ex = ptr(boot_image, &epa->secptroffset); |     ex = slptr(boot_image, &epa->secptroffset); | ||||||
|     nptrs = get_16_sl(&epa->secptrcnt); |     nptrs = get_16_sl(&epa->secptrcnt); | ||||||
| 
 | 
 | ||||||
|  | #if 0 | ||||||
|     if (nsect > nptrs) { |     if (nsect > nptrs) { | ||||||
| 	/* Not necessarily an error in this case, but a general problem */ | 	/* Not necessarily an error in this case, but a general problem */ | ||||||
| 	fprintf(stderr, "Insufficient extent space, build error!\n"); | 	fprintf(stderr, "Insufficient extent space, build error!\n"); | ||||||
| 	exit(1); | 	exit(1); | ||||||
|     } |     } | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
|     /* -1 for the pointer in the boot sector, -2 for the two ADVs */ |     /* -1 for the pointer in the boot sector, -2 for the two ADVs */ | ||||||
|     generate_extents(ex, nptrs, sectp, nsect-1-2); |     generate_extents(ex, nptrs, sectp, nsect-1-2); | ||||||
| 
 | 
 | ||||||
|     /* ADV pointers */ |     /* ADV pointers */ | ||||||
|     advptrs = ptr(boot_image, &epa->advptroffset); |     advptrs = slptr(boot_image, &epa->advptroffset); | ||||||
|     set_64_sl(&advptrs[0], sectp[nsect-1-2]); |     set_64_sl(&advptrs[0], sectp[nsect-1-2]); | ||||||
|     set_64_sl(&advptrs[1], sectp[nsect-1-1]); |     set_64_sl(&advptrs[1], sectp[nsect-1-1]); | ||||||
| 
 | 
 | ||||||
|  | @ -169,7 +179,7 @@ int syslinux_patch(const sector_t *sectp, int nsectors, | ||||||
| 	    fprintf(stderr, "Subdirectory path too long... aborting install!\n"); | 	    fprintf(stderr, "Subdirectory path too long... aborting install!\n"); | ||||||
| 	    exit(1); | 	    exit(1); | ||||||
| 	} | 	} | ||||||
| 	memcpy_to_sl(ptr(boot_image, &epa->diroffset), subdir, sublen); | 	memcpy_to_sl(slptr(boot_image, &epa->diroffset), subdir, sublen); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /* Poke in the subvolume information */ |     /* Poke in the subvolume information */ | ||||||
|  | @ -179,14 +189,14 @@ int syslinux_patch(const sector_t *sectp, int nsectors, | ||||||
| 	    fprintf(stderr, "Subvol name too long... aborting install!\n"); | 	    fprintf(stderr, "Subvol name too long... aborting install!\n"); | ||||||
| 	    exit(1); | 	    exit(1); | ||||||
| 	} | 	} | ||||||
| 	memcpy_to_sl(ptr(boot_image, &epa->subvoloffset), subvol, sublen); | 	memcpy_to_sl(slptr(boot_image, &epa->subvoloffset), subvol, sublen); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /* Now produce a checksum */ |     /* Now produce a checksum */ | ||||||
|     set_32_sl(&patcharea->checksum, 0); |     set_32_sl(&patcharea->checksum, 0); | ||||||
| 
 | 
 | ||||||
|     csum = LDLINUX_MAGIC; |     csum = LDLINUX_MAGIC; | ||||||
|     for (i = 0, wp = (uint32_t *)boot_image; i < dw; i++, wp++) |     for (i = 0, wp = (const uint32_t _slimg *)boot_image; i < dw; i++, wp++) | ||||||
| 	csum -= get_32_sl(wp);	/* Negative checksum */ | 	csum -= get_32_sl(wp);	/* Negative checksum */ | ||||||
| 
 | 
 | ||||||
|     set_32_sl(&patcharea->checksum, csum); |     set_32_sl(&patcharea->checksum, csum); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue