# --- ROCK-COPYRIGHT-NOTE-BEGIN --- # # This copyright note is auto-generated by ./scripts/Create-CopyPatch. # Please add additional copyright information _after_ the line containing # the ROCK-COPYRIGHT-NOTE-END tag. Otherwise it might get removed by # the ./scripts/Create-CopyPatch script. Do not edit this copyright text! # # ROCK Linux: rock-src/package/base/cdrtools/chrp-boot.patch # ROCK Linux is Copyright (C) 1998 - 2004 Clifford Wolf # # This patch file is dual-licensed. It is available under the license the # patched project is licensed under, as long as it is an OpenSource license # as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms # of the GNU General Public License as published by the Free Software # Foundation; either version 2 of the License, or (at your option) any later # version. # # --- ROCK-COPYRIGHT-NOTE-END --- 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 */