]>
Commit | Line | Data |
---|---|---|
8a960584 MT |
1 | diff --git a/doc/icedax/tracknames.pl b/doc/icedax/tracknames.pl |
2 | old mode 100755 | |
3 | new mode 100644 | |
4 | index 09f0fcf..801b89e | |
5 | --- a/doc/icedax/tracknames.pl | |
6 | +++ b/doc/icedax/tracknames.pl | |
7 | @@ -1,4 +1,4 @@ | |
8 | -#!/usr/local/bin/perl | |
9 | +#!/usr/bin/perl | |
10 | # A quick perl hack to get rename files pulled in with icedax. | |
11 | # by billo@billo.com | |
12 | # | |
13 | diff --git a/genisoimage/eltorito.c b/genisoimage/eltorito.c | |
14 | index b97bdf1..5d7c2d1 100644 | |
15 | --- a/genisoimage/eltorito.c | |
16 | +++ b/genisoimage/eltorito.c | |
17 | @@ -59,7 +59,7 @@ static void get_torito_desc(struct eltorito_boot_descriptor *boot_desc); | |
18 | static void fill_boot_desc(struct eltorito_defaultboot_entry *boot_desc_entry, | |
19 | struct eltorito_boot_entry_info *boot_entry); | |
20 | void get_boot_entry(void); | |
21 | -void new_boot_entry(void); | |
22 | +void new_boot_entry(); | |
23 | static int tvd_write(FILE *outfile); | |
24 | ||
25 | ||
26 | @@ -283,6 +283,7 @@ get_torito_desc(struct eltorito_boot_descriptor *boot_desc) | |
27 | int i; | |
28 | int offset; | |
29 | struct eltorito_defaultboot_entry boot_desc_record; | |
30 | + struct eltorito_sectionheader_entry section_header; | |
31 | ||
32 | memset(boot_desc, 0, sizeof (*boot_desc)); | |
33 | boot_desc->type[0] = 0; | |
34 | @@ -317,7 +318,7 @@ get_torito_desc(struct eltorito_boot_descriptor *boot_desc) | |
35 | */ | |
36 | memset(&valid_desc, 0, sizeof (valid_desc)); | |
37 | valid_desc.headerid[0] = 1; | |
38 | - valid_desc.arch[0] = EL_TORITO_ARCH_x86; | |
39 | + valid_desc.arch[0] = first_boot_entry->arch; | |
40 | ||
41 | /* | |
42 | * we'll shove start of publisher id into id field, | |
43 | @@ -347,10 +348,53 @@ get_torito_desc(struct eltorito_boot_descriptor *boot_desc) | |
44 | /* now write it to the virtual boot catalog */ | |
45 | memcpy(de2->table, &valid_desc, 32); | |
46 | ||
47 | - for (current_boot_entry = first_boot_entry, offset = sizeof (valid_desc); | |
48 | - current_boot_entry != NULL; | |
49 | - current_boot_entry = current_boot_entry->next, | |
50 | - offset += sizeof (boot_desc_record)) { | |
51 | + /* Fill the first entry, since it's special and already has the | |
52 | + * matching header via the validation header... */ | |
53 | + offset = sizeof (valid_desc); | |
54 | + current_boot_entry = first_boot_entry; | |
55 | + | |
56 | + if (offset >= SECTOR_SIZE) { | |
57 | +#ifdef USE_LIBSCHILY | |
58 | + comerrno(EX_BAD, "Too many El Torito boot entries\n"); | |
59 | +#else | |
60 | + fprintf(stderr, "Too many El Torito boot entries\n"); | |
61 | + exit(1); | |
62 | +#endif | |
63 | + } | |
64 | + fill_boot_desc(&boot_desc_record, current_boot_entry); | |
65 | + memcpy(de2->table + offset, &boot_desc_record, | |
66 | + sizeof (boot_desc_record)); | |
67 | + | |
68 | + offset += sizeof(boot_desc_record); | |
69 | + | |
70 | + for (current_boot_entry = current_boot_entry->next; | |
71 | + current_boot_entry != NULL; | |
72 | + current_boot_entry = current_boot_entry->next) { | |
73 | + struct eltorito_sectionheader_entry section_header; | |
74 | + | |
75 | + if (offset >= SECTOR_SIZE) { | |
76 | +#ifdef USE_LIBSCHILY | |
77 | + comerrno(EX_BAD, | |
78 | + "Too many El Torito boot entries\n"); | |
79 | +#else | |
80 | + fprintf(stderr, | |
81 | + "Too many El Torito boot entries\n"); | |
82 | + exit(1); | |
83 | +#endif | |
84 | + } | |
85 | + | |
86 | + memset(§ion_header, '\0', sizeof(section_header)); | |
87 | + if (current_boot_entry->next) | |
88 | + section_header.headerid[0] = EL_TORITO_SECTION_HEADER; | |
89 | + else | |
90 | + section_header.headerid[0] = EL_TORITO_LAST_SECTION_HEADER; | |
91 | + | |
92 | + section_header.arch[0] = current_boot_entry->arch; | |
93 | + set_721(section_header.num_entries, 1); | |
94 | + | |
95 | + memcpy(de2->table + offset, §ion_header, | |
96 | + sizeof(section_header)); | |
97 | + offset += sizeof(section_header); | |
98 | ||
99 | if (offset >= SECTOR_SIZE) { | |
100 | #ifdef USE_LIBSCHILY | |
101 | @@ -365,6 +409,8 @@ get_torito_desc(struct eltorito_boot_descriptor *boot_desc) | |
102 | fill_boot_desc(&boot_desc_record, current_boot_entry); | |
103 | memcpy(de2->table + offset, &boot_desc_record, | |
104 | sizeof (boot_desc_record)); | |
105 | + offset += sizeof (boot_desc_record); | |
106 | + | |
107 | } | |
108 | }/* get_torito_desc(... */ | |
109 | ||
110 | diff --git a/genisoimage/genisoimage.c b/genisoimage/genisoimage.c | |
111 | index a5b0b46..8add1ac 100644 | |
112 | --- a/genisoimage/genisoimage.c | |
113 | +++ b/genisoimage/genisoimage.c | |
114 | @@ -47,6 +47,7 @@ | |
115 | ||
116 | #include <mconfig.h> | |
117 | #include "genisoimage.h" | |
118 | +#include "iso9660.h" | |
119 | #include <errno.h> | |
120 | #include <timedefs.h> | |
121 | #include <fctldefs.h> | |
122 | @@ -523,6 +524,8 @@ static const struct ld_option ld_options[] = | |
123 | '\0', NULL, "Set debug flag", ONE_DASH}, | |
124 | {{"eltorito-boot", required_argument, NULL, 'b'}, | |
125 | 'b', "FILE", "Set El Torito boot image name", ONE_DASH}, | |
126 | + {{"efi-boot", required_argument, NULL, 'e'}, | |
127 | + 'e', "FILE", "Set EFI boot image name", ONE_DASH}, | |
128 | {{"eltorito-alt-boot", no_argument, NULL, OPTION_ALT_BOOT}, | |
129 | '\0', NULL, "Start specifying alternative El Torito boot parameters", ONE_DASH}, | |
130 | {{"sparc-boot", required_argument, NULL, 'B'}, | |
131 | @@ -1502,6 +1505,7 @@ int main(int argc, char *argv[]) | |
132 | all_files = 0; | |
133 | break; | |
134 | case 'b': | |
135 | + case 'e': | |
136 | do_sort++; /* We sort bootcat/botimage */ | |
137 | use_eltorito++; | |
138 | boot_image = optarg; /* pathname of the boot image */ | |
139 | @@ -1517,6 +1521,10 @@ int main(int argc, char *argv[]) | |
140 | #endif | |
141 | } | |
142 | get_boot_entry(); | |
143 | + if (c == 'e') | |
144 | + current_boot_entry->arch = EL_TORITO_ARCH_EFI; | |
145 | + else | |
146 | + current_boot_entry->arch = EL_TORITO_ARCH_x86; | |
147 | current_boot_entry->boot_image = boot_image; | |
148 | break; | |
149 | case OPTION_ALT_BOOT: | |
150 | diff --git a/genisoimage/genisoimage.h b/genisoimage/genisoimage.h | |
151 | index bbedfb0..76e5e21 100644 | |
152 | --- a/genisoimage/genisoimage.h | |
153 | +++ b/genisoimage/genisoimage.h | |
154 | @@ -293,6 +293,7 @@ struct deferred_write { | |
155 | struct eltorito_boot_entry_info { | |
156 | struct eltorito_boot_entry_info *next; | |
157 | char *boot_image; | |
158 | + char arch; | |
159 | int not_bootable; | |
160 | int no_emul_boot; | |
161 | int hard_disk_boot; | |
162 | diff --git a/genisoimage/iso9660.h b/genisoimage/iso9660.h | |
163 | index c74c2a9..c8b7a05 100644 | |
164 | --- a/genisoimage/iso9660.h | |
165 | +++ b/genisoimage/iso9660.h | |
166 | @@ -62,10 +62,14 @@ struct iso_volume_descriptor { | |
167 | #define EL_TORITO_ARCH_x86 0 | |
168 | #define EL_TORITO_ARCH_PPC 1 | |
169 | #define EL_TORITO_ARCH_MAC 2 | |
170 | +#define EL_TORITO_ARCH_EFI 0xef | |
171 | ||
172 | #define EL_TORITO_BOOTABLE 0x88 | |
173 | #define EL_TORITO_NOT_BOOTABLE 0 | |
174 | ||
175 | +#define EL_TORITO_SECTION_HEADER 0x90 | |
176 | +#define EL_TORITO_LAST_SECTION_HEADER 0x91 | |
177 | + | |
178 | #define EL_TORITO_MEDIA_NOEMUL 0 | |
179 | #define EL_TORITO_MEDIA_12FLOP 1 | |
180 | #define EL_TORITO_MEDIA_144FLOP 2 | |
181 | @@ -173,7 +177,7 @@ struct eltorito_validation_entry { | |
182 | struct eltorito_defaultboot_entry { | |
183 | char boot_id [ISODCL(1, 1)]; /* 711 */ | |
184 | char boot_media [ISODCL(2, 2)]; | |
185 | - char loadseg [ISODCL(3, 4)]; /* 711 */ | |
186 | + char loadseg [ISODCL(3, 4)]; /* 712 */ | |
187 | char sys_type [ISODCL(5, 5)]; | |
188 | char pad1 [ISODCL(6, 6)]; | |
189 | char nsect [ISODCL(7, 8)]; | |
190 | @@ -181,6 +185,14 @@ struct eltorito_defaultboot_entry { | |
191 | char pad2 [ISODCL(13, 32)]; | |
192 | }; | |
193 | ||
194 | +/* El Torito Section Header Entry in boot catalog */ | |
195 | +struct eltorito_sectionheader_entry { | |
196 | + char headerid [ISODCL(1, 1)]; /* 711 */ | |
197 | + char arch [ISODCL(2, 2)]; | |
198 | + char num_entries [ISODCL(3, 4)]; /* 711 */ | |
199 | + char id [ISODCL(5, 32)]; | |
200 | +}; | |
201 | + | |
202 | /* | |
203 | * XXX JS: The next two structures have odd lengths! | |
204 | * Some compilers (e.g. on Sun3/mc68020) padd the structures to even length. |