mirror of the now-defunct rocklinux.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

225 lines
7.2 KiB

diff -ur cdrtools-2.00.3/mkisofs/mac_label.c cdrtools-2.00.3-local/mkisofs/mac_label.c
--- cdrtools-2.00.3/mkisofs/mac_label.c 2002-05-20 11:58:11.000000000 +0100
+++ cdrtools-2.00.3-local/mkisofs/mac_label.c 2003-07-30 21:23:28.000000000 +0100
@@ -64,16 +64,46 @@
struct directory_entry *de;
int i,
block,
- size;
+ size,
+ entry = 0;
MacLabel *mac_label = (MacLabel *) ml;
if (verbose > 1) {
fprintf(stderr, "Creating %d PReP boot partition(s)\n",
- use_prep_boot);
+ use_prep_boot + use_chrp_boot);
}
mac_label->fdiskMagic[0] = fdiskMagic0;
mac_label->fdiskMagic[1] = fdiskMagic1;
+ if (use_chrp_boot) {
+ fprintf(stderr, "CHRP boot partition 1\n");
+
+ mac_label->image[entry].boot = 0x80;
+
+ mac_label->image[entry].CHSstart[0] = 0xff;
+ mac_label->image[entry].CHSstart[1] = 0xff;
+ mac_label->image[entry].CHSstart[2] = 0xff;
+
+ mac_label->image[entry].type = chrpPartType; /* 0x96 */
+
+ mac_label->image[entry].CHSend[0] = 0xff;
+ mac_label->image[entry].CHSend[1] = 0xff;
+ mac_label->image[entry].CHSend[2] = 0xff;
+
+ mac_label->image[entry].startSect[0] = 0;
+ mac_label->image[entry].startSect[1] = 0;
+ mac_label->image[entry].startSect[2] = 0;
+ mac_label->image[entry].startSect[3] = 0;
+
+ size = (last_extent - session_start) * 2048 / 512;
+ mac_label->image[entry].size[0] = size & 0xff;
+ mac_label->image[entry].size[1] = (size >> 8) & 0xff;
+ mac_label->image[entry].size[2] = (size >> 16) & 0xff;
+ mac_label->image[entry].size[3] = (size >> 24) & 0xff;
+
+ ++entry;
+ }
+
for (i = 0; i < use_prep_boot; i++) {
de = search_tree_file(root, prep_boot_image[i]);
if (!de) {
@@ -88,18 +118,42 @@
fprintf(stderr, "PReP boot partition %d is \"%s\"\n",
i + 1, prep_boot_image[i]);
+ mac_label->image[entry].boot = 0x80;
+
+ mac_label->image[entry].CHSstart[0] = 0xff;
+ mac_label->image[entry].CHSstart[1] = 0xff;
+ mac_label->image[entry].CHSstart[2] = 0xff;
+
+ mac_label->image[entry].type = prepPartType; /* 0x41 */
+
+ mac_label->image[entry].CHSend[0] = 0xff;
+ mac_label->image[entry].CHSend[1] = 0xff;
+ mac_label->image[entry].CHSend[2] = 0xff;
+
/* deal with endianess */
- mac_label->image[i].type = prepPartType; /* 0x41 */
- mac_label->image[i].startSect[0] = block & 0xff;
- mac_label->image[i].startSect[1] = (block >> 8) & 0xff;
- mac_label->image[i].startSect[2] = (block >> 16) & 0xff;
- mac_label->image[i].startSect[3] = (block >> 24) & 0xff;
- mac_label->image[i].size[0] = size & 0xff;
- mac_label->image[i].size[1] = (size >> 8) & 0xff;
- mac_label->image[i].size[2] = (size >> 16) & 0xff;
- mac_label->image[i].size[3] = (size >> 24) & 0xff;
+ mac_label->image[entry].startSect[0] = block & 0xff;
+ mac_label->image[entry].startSect[1] = (block >> 8) & 0xff;
+ mac_label->image[entry].startSect[2] = (block >> 16) & 0xff;
+ mac_label->image[entry].startSect[3] = (block >> 24) & 0xff;
+
+ mac_label->image[entry].size[0] = size & 0xff;
+ mac_label->image[entry].size[1] = (size >> 8) & 0xff;
+ mac_label->image[entry].size[2] = (size >> 16) & 0xff;
+ mac_label->image[entry].size[3] = (size >> 24) & 0xff;
+
+ ++entry;
}
+ while (entry < 4) {
+ mac_label->image[entry].CHSstart[0] = 0xff;
+ mac_label->image[entry].CHSstart[1] = 0xff;
+ mac_label->image[entry].CHSstart[2] = 0xff;
+
+ mac_label->image[entry].CHSend[0] = 0xff;
+ mac_label->image[entry].CHSend[1] = 0xff;
+ mac_label->image[entry].CHSend[2] = 0xff;
+ ++entry;
+ }
}
#endif /* PREP_BOOT */
diff -ur cdrtools-2.00.3/mkisofs/mac_label.h cdrtools-2.00.3-local/mkisofs/mac_label.h
--- cdrtools-2.00.3/mkisofs/mac_label.h 2000-03-18 18:23:55.000000000 +0000
+++ cdrtools-2.00.3-local/mkisofs/mac_label.h 2003-07-23 12:49:59.000000000 +0100
@@ -37,6 +37,7 @@
#ifdef PREP_BOOT
struct fdiskPartition {
#define prepPartType 0x41
+#define chrpPartType 0x96
unsigned char boot; /* bootable flag; not used */
unsigned char CHSstart[3]; /* start CHS; not used */
unsigned char type; /* Partition type, = 0x41 (PReP bootable) */
diff -ur cdrtools-2.00.3/mkisofs/mkisofs.c cdrtools-2.00.3-local/mkisofs/mkisofs.c
--- cdrtools-2.00.3/mkisofs/mkisofs.c 2003-05-15 15:12:44.000000000 +0100
+++ cdrtools-2.00.3-local/mkisofs/mkisofs.c 2003-07-30 21:24:16.000000000 +0100
@@ -197,7 +197,7 @@
#ifdef PREP_BOOT
char *prep_boot_image[4];
int use_prep_boot = 0;
-
+int use_chrp_boot = 0;
#endif /* PREP_BOOT */
#endif /* APPLE_HYB */
@@ -401,6 +401,8 @@
#define OPTION_HFS_BLESS 2040
#define OPTION_HFS_PARMS 2041
+#define OPTION_CHRP_BOOT 2042
+
#endif /* APPLE_HYB */
static int save_pname = 0;
@@ -661,6 +663,8 @@
#ifdef PREP_BOOT
{{"prep-boot", required_argument, NULL, OPTION_PREP_BOOT},
'\0', "FILE", "PReP boot image file -- up to 4 are allowed", ONE_DASH},
+ {{"chrp-boot", no_argument, NULL, OPTION_CHRP_BOOT},
+ '\0', NULL, "Add CHRP boot header", ONE_DASH},
#endif /* PREP_BOOT */
{{"cap", no_argument, NULL, OPTION_CAP},
'\0', NULL, "Look for AUFS CAP Macintosh files", TWO_DASHES},
@@ -2073,13 +2077,13 @@
#ifdef PREP_BOOT
case OPTION_PREP_BOOT:
use_prep_boot++;
- if (use_prep_boot > 4) {
+ if (use_prep_boot > 4 - use_chrp_boot) {
#ifdef USE_LIBSCHILY
comerrno(EX_BAD,
- "Maximum of 4 PReP boot images are allowed\n");
+ "Maximum of 4 partition entries are allowed\n");
#else
fprintf(stderr,
- "Maximum of 4 PReP boot images are allowed\n");
+ "Maximum of 4 partition entries are allowed\n");
#endif
exit(1);
}
@@ -2096,6 +2100,21 @@
exit(1);
}
break;
+ case OPTION_CHRP_BOOT:
+ if (use_chrp_boot)
+ break; /* silently allow duplicates */
+ use_chrp_boot = 1;
+ if (use_prep_boot > 3) {
+#ifdef USE_LIBSCHILY
+ comerrno(EX_BAD,
+ "Maximum of 4 partition entries are allowed\n");
+#else
+ fprintf(stderr,
+ "Maximum of 4 partition entries are allowed\n");
+#endif
+ exit(1);
+ }
+ break;
#endif /* PREP_BOOT */
#endif /* APPLE_HYB */
default:
@@ -2957,7 +2976,7 @@
*/
#ifdef APPLE_HYB
#ifdef PREP_BOOT
- if (apple_hyb || use_prep_boot)
+ if (apple_hyb || use_prep_boot || use_chrp_boot)
#else /* PREP_BOOT */
if (apple_hyb)
#endif /* PREP_BOOT */
diff -ur cdrtools-2.00.3/mkisofs/mkisofs.h cdrtools-2.00.3-local/mkisofs/mkisofs.h
--- cdrtools-2.00.3/mkisofs/mkisofs.h 2002-12-07 19:59:42.000000000 +0000
+++ cdrtools-2.00.3-local/mkisofs/mkisofs.h 2003-07-23 12:54:29.000000000 +0100
@@ -393,6 +393,7 @@
#ifdef PREP_BOOT
extern char *prep_boot_image[4];
extern int use_prep_boot;
+extern int use_chrp_boot;
#endif /* PREP_BOOT */
#endif /* APPLE_HYB */
diff -ur cdrtools-2.00.3/mkisofs/write.c cdrtools-2.00.3-local/mkisofs/write.c
--- cdrtools-2.00.3/mkisofs/write.c 2002-12-23 14:16:45.000000000 +0000
+++ cdrtools-2.00.3-local/mkisofs/write.c 2003-07-30 21:17:53.000000000 +0100
@@ -2131,7 +2131,7 @@
if (apple_hyb)
hfs_file_gen(start_extent);
#ifdef PREP_BOOT
- else if (use_prep_boot)
+ else if (use_prep_boot || use_chrp_boot)
gen_prepboot();
#endif /* PREP_BOOT */
#endif /* APPLE_HYB */
@@ -2290,7 +2290,7 @@
/* reserve space for the label partition - if it is needed */
#ifdef PREP_BOOT
/* a PReP bootable partition needs the map.. */
- if (gen_pt || use_prep_boot)
+ if (gen_pt || use_prep_boot || use_chrp_boot)
#else
if (gen_pt)
#endif /* PREP_BOOT */