diff --git a/xorriso/emulators.c b/xorriso/emulators.c index 71d1eaa4..6388ccca 100644 --- a/xorriso/emulators.c +++ b/xorriso/emulators.c @@ -1455,9 +1455,6 @@ problem_handler_2:; xorriso->patch_isolinux_image= 1; } else if(strcmp(argv[i], "-b") == 0 || strcmp(argv[i], "-eltorito-boot") == 0 || -#ifndef Xorriso_mips_boot_file_pathS - strcmp(argv[i], "-mips-boot") == 0 || -#endif strcmp(argv[i], "--efi-boot") == 0 || strcmp(argv[i], "-e") == 0) { i++; @@ -1472,17 +1469,6 @@ problem_handler_2:; xorriso->boot_efi_default= 1; emul_boot= xorriso->boot_image_emul= 0; -#ifndef Xorriso_mips_boot_file_pathS - - } else if(strcmp(argv[i - 1], "-mips-boot") == 0) { - boot_path= xorriso->boot_image_bin_path; - option_b= 0; - - /* >>> Preliminary : this should be adjustable per boot image */ - xorriso->system_area_options= 1 << 2; /* system area type 1 */ - -#endif /* ! Xorriso_mips_boot_file_pathS */ - } else { boot_path= xorriso->boot_image_bin_path; if(strcmp(argv[i - 1], "-e") == 0) @@ -1566,8 +1552,6 @@ problem_handler_2:; if(ret <= 0) goto problem_handler_boot; -#ifdef Xorriso_mips_boot_file_pathS - } else if(strcmp(argv[i], "-mips-boot")==0) { if(i+1>=argc) goto not_enough_args; @@ -1581,8 +1565,6 @@ problem_handler_2:; if(ret <= 0) goto problem_handler_boot; -#endif /* Xorriso_mips_boot_file_pathS */ - } continue; /* regular bottom of loop */ problem_handler_boot:; diff --git a/xorriso/iso_img.c b/xorriso/iso_img.c index 6c83afc5..940cedb3 100644 --- a/xorriso/iso_img.c +++ b/xorriso/iso_img.c @@ -455,6 +455,28 @@ int Xorriso_boot_item_status(struct XorrisO *xorriso, char *cat_path, } +int Xorriso_boot_status_mips(struct XorrisO *xorriso, IsoImage *image, + char *filter, FILE *fp, int flag) +{ + int i, num_boots; + char *paths[15], *line; + + line= xorriso->result_line; + + num_boots= iso_image_get_mips_boot_files(image, paths, 0); + Xorriso_process_msg_queues(xorriso, 0); + if(num_boots <= 0) + return(num_boots); + for(i= 0; i < num_boots; i++) { + strcpy(line,"-boot_image any mips_path="); + Text_shellsafe(paths[i], line, 1); + strcat(line, "\n"); + Xorriso_status_result(xorriso, filter, fp, flag & 2); + } + return(num_boots); +} + + /* bit0= do only report non-default settings bit1= do only report to fp @@ -477,7 +499,21 @@ int Xorriso_boot_image_status(struct XorrisO *xorriso, char *filter, FILE *fp, line= xorriso->result_line; no_defaults= flag & 1; + ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive, + "on attempt to print boot info", 2 | 16); + if(ret<=0) + goto no_image; + image= isoburn_get_attached_image(drive); + Xorriso_process_msg_queues(xorriso,0); + if(image == NULL) + goto no_image; + + ret= Xorriso_boot_status_mips(xorriso, image, filter, fp, 0); + if(ret < 0) /* == 0 is normal */ + {ret= 0; goto ex;} + if(xorriso->boot_count == 0 && xorriso->boot_image_bin_path[0] == 0) { +no_image:; if(xorriso->patch_isolinux_image & 1) { sprintf(line, "-boot_image %s patch\n", xorriso->patch_isolinux_image & 2 ? "grub" : form); @@ -494,14 +530,6 @@ int Xorriso_boot_image_status(struct XorrisO *xorriso, char *filter, FILE *fp, ret= 1; goto ex; } - ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive, - "on attempt to print boot info", 16); - if(ret<=0) - {ret= 0; goto ex;} - image= isoburn_get_attached_image(drive); - Xorriso_process_msg_queues(xorriso,0); - if(image == NULL) - {ret= 0; goto ex;} if(xorriso->boot_image_bin_path[0] || xorriso->boot_count > 0) bin_path_in_use= 1; @@ -972,6 +1000,8 @@ ex:; } +/* @param flag bit0= give up all boot file paths +*/ int Xorriso_add_mips_boot_file(struct XorrisO *xorriso, char *path, int flag) { int ret; @@ -980,6 +1010,10 @@ int Xorriso_add_mips_boot_file(struct XorrisO *xorriso, char *path, int flag) ret= Xorriso_get_volume(xorriso, &image, 0); if(ret <= 0) return ret; + if(flag & 1) { + iso_image_give_up_mips_boot(image, 0); + return(1); + } ret = iso_image_add_mips_boot_file(image, path, 0); Xorriso_process_msg_queues(xorriso,0); if (ret < 0) { @@ -992,3 +1026,37 @@ int Xorriso_add_mips_boot_file(struct XorrisO *xorriso, char *path, int flag) } +int Xorriso_coordinate_system_area(struct XorrisO *xorriso, int sa_type, + int options, char *cmd, int flag) +{ + int old_type, old_options; + static char *type_names[2] = {"MBR", "MIPS Big Endian Volume Header"}; + + old_type= (xorriso->system_area_options & 0xfc) >> 2; + old_options= xorriso->system_area_options & ~0xfc; + if((old_type != 0 || old_options != 0) && + (old_type != sa_type || (old_options != 0 && old_options != options))) { + sprintf(xorriso->info_text, "%s : First sector already occupied by %s", + cmd, old_type < 2 ? type_names[old_type] : "other boot facility"); + if(old_type == 0 && old_options == 2) + strcat(xorriso->info_text, " for ISOLINUX isohybrid"); + if(old_type == 0 && old_options == 1) + strcat(xorriso->info_text, " for partition table"); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); + goto hint_revoke; + } + xorriso->system_area_options= ((sa_type << 2) & 0xfc) | (options & ~0xfc); + if(sa_type == 0) + xorriso->patch_system_area= xorriso->system_area_options; + return(1); + +hint_revoke:; + if(old_type == 0) + sprintf(xorriso->info_text, "Revokable by -boot_image any discard"); + else if(old_type == 1) + sprintf(xorriso->info_text, "Revokable by -boot_image any mips_discard"); + if(old_type < 2) + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "HINT", 0); + return(0); +} + diff --git a/xorriso/opts_a_c.c b/xorriso/opts_a_c.c index 6dac8065..a39fc549 100644 --- a/xorriso/opts_a_c.c +++ b/xorriso/opts_a_c.c @@ -614,7 +614,8 @@ treatment_patch:; xorriso->patch_isolinux_image= 0; xorriso->boot_image_bin_path[0]= 0; xorriso->patch_system_area= 0; - xorriso->system_area_options&= ~0xfc; /* system area type 0 */ + if((xorriso->system_area_options & 0xfc ) == 0) + xorriso->system_area_options= 0; /* Reset eventual type 0 flags */ if(xorriso->boot_count > 0) { ret= Xorriso_attach_boot_image(xorriso, 2); /* dispose boot images */ if(ret <= 0) @@ -731,19 +732,11 @@ treatment_patch:; xorriso->keep_boot_image= 0; xorriso->boot_efi_default= 1; - } else if(strcmp(treatpt, "mips_path=") == 0) { - xorriso->boot_image_bin_path[0] = 0; - xorriso->boot_efi_default= 0; - - /* >>> Preliminary : this should be adjustable per boot image */ - xorriso->system_area_options&= ~0xfc; /* system area type 0 */ - } else if(strncmp(treatpt, "mips_path=", 10) == 0) { - -#ifdef Xorriso_mips_boot_file_pathS - - /* >>> Check for contradicting xorriso->system_area_options */; - + sprintf(eff_path, "-boot_image %s mips_path=", formpt); + ret= Xorriso_coordinate_system_area(xorriso, 1, 0, eff_path, 0); + if(ret <= 0) + return(ret); ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, treatpt + 10, eff_path, 2); if(ret <= 0) @@ -751,21 +744,10 @@ treatment_patch:; ret= Xorriso_add_mips_boot_file(xorriso, eff_path, 0); if(ret <= 0) return(ret); - xorriso->system_area_options= 1 << 2; /* system area type 1 */ -#else /* Xorriso_mips_boot_file_pathS */ - - ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, treatpt + 10, - xorriso->boot_image_bin_path, 2); - if(ret <= 0) - return(ret); - xorriso->keep_boot_image= 0; - xorriso->boot_efi_default= 0; - - /* >>> Preliminary : this should be adjustable per boot image */ - xorriso->system_area_options&= 1 << 2; /* system area type 1 */ - -#endif /* ! Xorriso_mips_boot_file_pathS */ + } else if(strcmp(treatpt, "mips_discard") == 0) { + xorriso->system_area_options&= ~0xfc; /* system area type 0 */ + Xorriso_add_mips_boot_file(xorriso, "", 1); /* give up MIPS boot files */ } else if(strncmp(treatpt, "boot_info_table=", 16)==0) { if(strcmp(treatpt + 16, "off") == 0) @@ -808,23 +790,27 @@ treatment_patch:; } } else if(strncmp(treatpt, "system_area=", 12) == 0) { + if(strcmp(formpt, "isolinux")==0) { + ret= Xorriso_coordinate_system_area(xorriso, 0, 2, + "-boot_image isolinux system_area=", 0); + if(ret <= 0) + return(ret); + } ret= Xorriso_set_system_area_path(xorriso, treatpt + 12, 0); if(ret <= 0) return(ret); - if(strcmp(formpt, "isolinux")==0) - xorriso->system_area_options= (xorriso->system_area_options & ~3) | 2; } else if(strncmp(treatpt, "partition_table=", 16)==0) { if(strcmp(treatpt + 16, "off") == 0) { xorriso->system_area_options&= ~3; - xorriso->patch_system_area= xorriso->system_area_options; } else if(strcmp(treatpt + 16, "on") == 0) { - xorriso->system_area_options&= ~3; + sprintf(eff_path, "-boot_image %s partition_table=", formpt); if(strcmp(formpt, "isolinux")==0) - xorriso->system_area_options|= 2; + ret= Xorriso_coordinate_system_area(xorriso, 0, 2, eff_path, 0); else - xorriso->system_area_options|= 1; - xorriso->patch_system_area= xorriso->system_area_options; + ret= Xorriso_coordinate_system_area(xorriso, 0, 1, eff_path, 0); + if(ret <= 0) + return(ret); } else was_ok= 0; diff --git a/xorriso/opts_d_h.c b/xorriso/opts_d_h.c index 8dd96e4a..f8387e6f 100644 --- a/xorriso/opts_d_h.c +++ b/xorriso/opts_d_h.c @@ -1390,6 +1390,7 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag) " |\"discard\"|\"keep\"|\"patch\"|\"dir=\"|\"bin_path=\"", " |\"cat_path=\"|\"cat_hidden=on|iso_rr|joliet|off\"", " |\"load_size=\"|\"system_area=\"|\"partition_table=on|off\"", +" |\"mips_path=\"|\"mips_discard\"|\"show_status\"", " Whether to discard or keep an exiting El Torito boot image.", " ISOLINUX can be made bootable by dir=/ or dir=/isolinux", " or dir=/boot/isolinux. Others, like GRUB, by bin_path=...", @@ -1398,6 +1399,8 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag) " ISO image by the usual commands like -map or -add.", " system_area= and partition_table= are for MBR based booting", " from USB stick. The system_area= file needs not to be added.", +" mips_path= adds Big Endian MIPS boot files. Combinable with", +" El Torito but not with MBR production.", "", " -uid uid User id to be used for the whole multi-session ISO image.", " -gid gid Group id for the same purpose.", diff --git a/xorriso/xorriso.1 b/xorriso/xorriso.1 index 8efc18bb..cde12832 100644 --- a/xorriso/xorriso.1 +++ b/xorriso/xorriso.1 @@ -9,7 +9,7 @@ .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) -.TH XORRISO 1 "Oct 07, 2010" +.TH XORRISO 1 "Oct 13, 2010" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -2409,6 +2409,15 @@ partition offset. 0 chooses a default value. \fBpartition_hd_cyl=\fRnumber gives the number of heads per cylinder for partition offset. 0 chooses a default value. .br +\fBmips_path=\fRiso_rr_path declares a data file in the image to be a +MIPS Big Endian boot file. Enable production of a MIPS Big Endian Volume +Header. This is mutually exclusive with any MBR production. It will overwrite +the first 512 bytes of any data eventually provided by system_area=. +Up to 15 boot files can be declared by mips_path=. +.br +\fBmips_discard\fR revokes any boot file declarations made by mips_path=. +This removes the ban on MBR production. +.br .TP .B Jigdo Template Extraction: .PP @@ -3403,6 +3412,8 @@ instead of -G to apply the effect of -boot_image isolinux partition_table=on. .br --boot-catalog-hide is -boot_image any cat_hidden=on. .br +-mips-boot is the same as -boot_image any mips_path= . +.br -partition_offset number is -boot_image any partition_offset=number. .br diff --git a/xorriso/xorriso.info b/xorriso/xorriso.info index 09b45f2a..0b767add 100644 --- a/xorriso/xorriso.info +++ b/xorriso/xorriso.info @@ -2144,6 +2144,14 @@ of the existing sessions, unless one can assume overwriteable media. partition offset. 0 chooses a default value. *partition_hd_cyl=*number gives the number of heads per cylinder for partition offset. 0 chooses a default value. + *mips_path=*iso_rr_path declares a data file in the image to be a + MIPS Big Endian boot file. Enable production of a MIPS Big Endian + Volume Header. This is mutually exclusive with any MBR production. + It will overwrite the first 512 bytes of any data eventually + provided by system_area=. Up to 15 boot files can be declared by + mips_path=. + *mips_discard* revokes any boot file declarations made by + mips_path=. This removes the ban on MBR production.  File: xorriso.info, Node: Jigdo, Next: Charset, Prev: Bootable, Up: Options @@ -3032,6 +3040,7 @@ programs trigger comparable actions. this instead of -G to apply the effect of -boot_image isolinux partition_table=on. --boot-catalog-hide is -boot_image any cat_hidden=on. + -mips-boot is the same as -boot_image any mips_path= . -partition_offset number is -boot_image any partition_offset=number. The options of genisoimage Jigdo Template Extraction are @@ -3958,7 +3967,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -out_charset sets output character set: SetWrite. (line 156) * -outdev aquires a drive for output: AqDrive. (line 29) * -overwrite enables overwriting in ISO: SetInsert. (line 127) -* -pacifier controls pacifier text form: Emulation. (line 126) +* -pacifier controls pacifier text form: Emulation. (line 127) * -padding sets amount of image padding: SetWrite. (line 239) * -page set terminal geometry: DialogCtl. (line 15) * -paste_in copies file into disk file: Restore. (line 117) @@ -3978,7 +3987,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -quoted_not_list sets exclusions: SetInsert. (line 72) * -quoted_path_list inserts paths from disk file: Insert. (line 80) * -read_mkisofsrc searches and reads .mkisofsrc file: Emulation. - (line 114) + (line 115) * -reassure enables confirmation question: DialogCtl. (line 28) * -report_about controls verbosity: Exception. (line 55) * -return_with controls exit value: Exception. (line 39) @@ -3988,7 +3997,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -rollback discards pending changes: Writing. (line 9) * -rollback_end ends program without writing: Scripting. (line 125) * -rom_toc_scan searches for sessions: Loading. (line 184) -* -scdbackup_tag enables scdbackup checksum tag: Emulation. (line 136) +* -scdbackup_tag enables scdbackup checksum tag: Emulation. (line 137) * -scsi_log reports SCSI commands: Scripting. (line 113) * -session_log logs written sessions: Scripting. (line 104) * -session_string composes session info line: Inquiry. (line 56) @@ -4044,11 +4053,11 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Backslash Interpretation, _definition: Processing. (line 49) * Backup, enable fast incremental, -disk_dev_ino: Loading. (line 163) * Backup, enable features, -for_backup: Loading. (line 158) -* Backup, scdbackup checksum tag, -scdbackup: Emulation. (line 136) +* Backup, scdbackup checksum tag, -scdbackup: Emulation. (line 137) * Blank media, _definition: Media. (line 29) * Blind growing, _definition: Methods. (line 40) * Bootability, control, -boot_image: Bootable. (line 20) -* cdrecord, Emulation: Emulation. (line 81) +* cdrecord, Emulation: Emulation. (line 82) * Character Set, _definition: Charset. (line 6) * Character Set, for input, -in_charset: Loading. (line 73) * Character Set, for input/output, -charset: Charset. (line 43) @@ -4083,10 +4092,10 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Drive, write and eject, -commit_eject: Writing. (line 40) * El Torito, _definiton: Extras. (line 19) * Emulation, -as: Emulation. (line 13) -* Emulation, .mkisofsrc, -read_mkisofsrc: Emulation. (line 114) -* Emulation, cdrecord, -as: Emulation. (line 81) +* Emulation, .mkisofsrc, -read_mkisofsrc: Emulation. (line 115) +* Emulation, cdrecord, -as: Emulation. (line 82) * Emulation, mkisofs, -as: Emulation. (line 16) -* Emulation, pacifier form, -pacifier: Emulation. (line 126) +* Emulation, pacifier form, -pacifier: Emulation. (line 127) * Examples: Examples. (line 6) * Filter, _definition: Filter. (line 6) * Filter, apply to file tree, -set_filter_r: Filter. (line 84) @@ -4149,6 +4158,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Media, erase, -blank: Writing. (line 45) * Media, format, -format: Writing. (line 69) * Media, list formats, -list_formats: Writing. (line 107) +* MIPS boot file, activation: Bootable. (line 156) * mkisofs, Emulation: Emulation. (line 16) * Modifying, _definition: Methods. (line 27) * Multi-session media, _definition: Media. (line 7) @@ -4287,38 +4297,38 @@ Node: Filter75440 Node: Writing79789 Node: SetWrite86078 Node: Bootable98029 -Node: Jigdo107119 -Node: Charset111377 -Node: Exception114128 -Node: DialogCtl118643 -Node: Inquiry120988 -Node: Navigate125118 -Node: Verify132716 -Node: Restore141136 -Node: Emulation147792 -Node: Scripting155792 -Node: Frontend161354 -Node: Examples162555 -Node: ExDevices163724 -Node: ExCreate164358 -Node: ExDialog165632 -Node: ExGrowing166894 -Node: ExModifying167696 -Node: ExBootable168197 -Node: ExCharset168744 -Node: ExPseudo169572 -Node: ExCdrecord170466 -Node: ExMkisofs170781 -Node: ExGrowisofs171784 -Node: ExException172908 -Node: ExTime173362 -Node: ExIncBackup173821 -Node: ExRestore177293 -Node: ExRecovery178262 -Node: Files178828 -Node: Seealso180056 -Node: Legal180580 -Node: CommandIdx181502 -Node: ConceptIdx195446 +Node: Jigdo107608 +Node: Charset111866 +Node: Exception114617 +Node: DialogCtl119132 +Node: Inquiry121477 +Node: Navigate125607 +Node: Verify133205 +Node: Restore141625 +Node: Emulation148281 +Node: Scripting156341 +Node: Frontend161903 +Node: Examples163104 +Node: ExDevices164273 +Node: ExCreate164907 +Node: ExDialog166181 +Node: ExGrowing167443 +Node: ExModifying168245 +Node: ExBootable168746 +Node: ExCharset169293 +Node: ExPseudo170121 +Node: ExCdrecord171015 +Node: ExMkisofs171330 +Node: ExGrowisofs172333 +Node: ExException173457 +Node: ExTime173911 +Node: ExIncBackup174370 +Node: ExRestore177842 +Node: ExRecovery178811 +Node: Files179377 +Node: Seealso180605 +Node: Legal181129 +Node: CommandIdx182051 +Node: ConceptIdx195995  End Tag Table diff --git a/xorriso/xorriso.texi b/xorriso/xorriso.texi index 8c5c0cee..60a2c01e 100644 --- a/xorriso/xorriso.texi +++ b/xorriso/xorriso.texi @@ -44,7 +44,7 @@ @c man .\" First parameter, NAME, should be all caps @c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection @c man .\" other parameters are allowed: see man(7), man(1) -@c man .TH XORRISO 1 "Oct 07, 2010" +@c man .TH XORRISO 1 "Oct 13, 2010" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -2879,6 +2879,16 @@ partition offset. 0 chooses a default value. @strong{partition_hd_cyl=}number gives the number of heads per cylinder for partition offset. 0 chooses a default value. @* +@cindex MIPS boot file, activation +@strong{mips_path=}iso_rr_path declares a data file in the image to be a +MIPS Big Endian boot file. Enable production of a MIPS Big Endian Volume +Header. This is mutually exclusive with MBR production. It will overwrite +the first 512 bytes of any data eventually provided by system_area=. +Up to 15 boot files can be declared by mips_path=. +@* +@strong{mips_discard} revokes any boot file declarations made by mips_path=. +This removes the ban on MBR production. +@* @end table @c man .TP @c man .B Jigdo Template Extraction: @@ -4049,6 +4059,8 @@ instead of -G to apply the effect of -boot_image isolinux partition_table=on. @* @minus{}@minus{}boot-catalog-hide is -boot_image any cat_hidden=on. @* +@minus{}mips-boot is the same as -boot_image any mips_path= . +@* @minus{}partition_offset number is @minus{}boot_image any partition_offset=number. @* diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 485f63f1..07abde08 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2010.10.12.183125" +#define Xorriso_timestamP "2010.10.13.170641"