diff --git a/xorriso/base_obj.c b/xorriso/base_obj.c index 4a4851d8..16b8d700 100644 --- a/xorriso/base_obj.c +++ b/xorriso/base_obj.c @@ -268,6 +268,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag) m->appended_part_types[i]= 0; } m->ascii_disc_label[0]= 0; + m->grub2_sparc_core[0]= 0; memset(m->hfsp_serial_number, 0, 8); m->hfsp_block_size= 0; m->apm_block_size= 0; diff --git a/xorriso/iso_img.c b/xorriso/iso_img.c index 207ca272..b7169ce5 100644 --- a/xorriso/iso_img.c +++ b/xorriso/iso_img.c @@ -499,6 +499,10 @@ int Xorriso_boot_status_non_mbr(struct XorrisO *xorriso, IsoImage *image, Text_shellsafe(xorriso->ascii_disc_label, line, 1); strcat(line, "\n"); Xorriso_status_result(xorriso, filter, fp, flag & 2); + sprintf(line, "-boot_image grub grub2_sparc_core="); + Text_shellsafe(xorriso->grub2_sparc_core, line, 1); + strcat(line, "\n"); + Xorriso_status_result(xorriso, filter, fp, flag & 2); return(0); } if(sa_type != 1 && sa_type != 2) diff --git a/xorriso/opts_a_c.c b/xorriso/opts_a_c.c index 64375778..f5171212 100644 --- a/xorriso/opts_a_c.c +++ b/xorriso/opts_a_c.c @@ -852,7 +852,7 @@ treatment_patch:; Xorriso_add_mips_boot_file(xorriso, "", 1); /* give up MIPS boot files */ } else if(strncmp(treatpt, "sparc_label=", 12) == 0) { - sprintf(eff_path, "-boot_image %s sparc_path=", formpt); + sprintf(eff_path, "-boot_image %s sparc_label=", formpt); ret= Xorriso_coordinate_system_area(xorriso, 3, 0, eff_path, 0); if(ret <= 0) goto ex; @@ -860,6 +860,12 @@ treatment_patch:; Xorriso_disc_label_sizE - 1); xorriso->ascii_disc_label[Xorriso_disc_label_sizE - 1] = 0; + } else if(strncmp(treatpt, "grub2_sparc_core=", 17) == 0) { + ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, treatpt + 17, + xorriso->grub2_sparc_core, 2); + if(ret <= 0) + goto ex; + } else if(strncmp(treatpt, "boot_info_table=", 16)==0) { if(strcmp(treatpt + 16, "off") == 0) xorriso->patch_isolinux_image= (xorriso->patch_isolinux_image & ~3) | 0; diff --git a/xorriso/write_run.c b/xorriso/write_run.c index 0830aaa8..e3db9c60 100644 --- a/xorriso/write_run.c +++ b/xorriso/write_run.c @@ -311,9 +311,37 @@ int Xorriso_set_system_area(struct XorrisO *xorriso, struct burn_drive *drive, unsigned char *ub; ElToritoBootImage *bootimg; IsoFile *bootimg_node; + IsoNode *sparc_core_node; uint32_t offst; enum burn_disc_status state; + if(xorriso->grub2_sparc_core[0]) { + ret= Xorriso_node_from_path(xorriso, img, xorriso->grub2_sparc_core, + &sparc_core_node, 1); + if(ret <= 0) { + sprintf(xorriso->info_text, + "Cannot find in ISO image: -boot_image grub grub2_sparc_core="); + Text_shellsafe(xorriso->grub2_sparc_core, xorriso->info_text, 1); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); + {ret= 0; goto ex;} + } + if(!ISO_NODE_IS_FILE(sparc_core_node)) { + sprintf(xorriso->info_text, + "Not a data file: -boot_image grub grub2_sparc_core="); + Text_shellsafe(xorriso->grub2_sparc_core, xorriso->info_text, 1); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); + {ret= 0; goto ex;} + } + ret = iso_image_set_sparc_core(img, (IsoFile *) sparc_core_node, 0); + if(ret < 0) { + Xorriso_process_msg_queues(xorriso,0); + Xorriso_report_iso_error(xorriso, "", ret, + "Error when setting up -boot_image grub grub2_sparc_core=", + 0, "FAILURE", 1); + {ret= 0; goto ex;} + } + } + Xorriso_alloc_meM(buf, char, 32768); system_area_options= xorriso->system_area_options; memset(buf, 0, 32768); diff --git a/xorriso/xorriso_private.h b/xorriso/xorriso_private.h index ddda11bb..e673f27b 100644 --- a/xorriso/xorriso_private.h +++ b/xorriso/xorriso_private.h @@ -443,6 +443,11 @@ struct XorrisO { /* the global context of xorriso */ */ char ascii_disc_label[Xorriso_disc_label_sizE]; + /* A data file of which the position and size shall be written after + a SUN Disk Label. + */ + char grub2_sparc_core[SfileadrL]; + /* HFS+ image serial number. 00...00 means that it shall be generated by libisofs. */ diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index f2a2b8f2..31dbf06b 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2013.04.13.144946" +#define Xorriso_timestamP "2013.04.13.205230"