New boot_image boot specs partition_offset, partition_hd_cyl, partition_sec_hd
This commit is contained in:
parent
0e755f48c9
commit
21bd5b5d42
@ -207,6 +207,9 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
|||||||
m->system_area_disk_path[0]= 0;
|
m->system_area_disk_path[0]= 0;
|
||||||
m->system_area_options= 0;
|
m->system_area_options= 0;
|
||||||
m->patch_system_area= 0;
|
m->patch_system_area= 0;
|
||||||
|
m->partition_offset= 0;
|
||||||
|
m->partition_secs_per_head= 0;
|
||||||
|
m->partition_heads_per_cyl= 0;
|
||||||
m->vol_creation_time= 0;
|
m->vol_creation_time= 0;
|
||||||
m->vol_modification_time= 0;
|
m->vol_modification_time= 0;
|
||||||
m->vol_expiration_time= 0;
|
m->vol_expiration_time= 0;
|
||||||
|
@ -791,6 +791,40 @@ treatment_patch:;
|
|||||||
} else
|
} else
|
||||||
was_ok= 0;
|
was_ok= 0;
|
||||||
|
|
||||||
|
} else if(strncmp(treatpt, "partition_offset=", 17)==0) {
|
||||||
|
u= 0;
|
||||||
|
sscanf(treatpt + 17, "%u", &u);
|
||||||
|
if(u > 0 && u < 16) {
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"-boot_image %s partition_offset= : Non-zero number too small (<16).",
|
||||||
|
formpt);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
xorriso->partition_offset= u;
|
||||||
|
|
||||||
|
} else if(strncmp(treatpt, "partition_hd_cyl=", 17)==0) {
|
||||||
|
u= 0;
|
||||||
|
sscanf(treatpt + 17, "%u", &u);
|
||||||
|
if(u > 255) {
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"-boot_image %s partition_hd_cyl= : Number too large (>255).", formpt);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
xorriso->partition_heads_per_cyl= u;
|
||||||
|
|
||||||
|
} else if(strncmp(treatpt, "partition_sec_hd=", 17)==0) {
|
||||||
|
u= 0;
|
||||||
|
sscanf(treatpt + 17, "%u", &u);
|
||||||
|
if(u > 63) {
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"-boot_image %s partition_sec_hd= : Number too large (>63).", formpt);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
xorriso->partition_secs_per_head= u;
|
||||||
|
|
||||||
} else if(strncmp(treatpt, "platform_id=", 12)==0) {
|
} else if(strncmp(treatpt, "platform_id=", 12)==0) {
|
||||||
if(strncmp(treatpt + 12, "0x", 2) == 0)
|
if(strncmp(treatpt + 12, "0x", 2) == 0)
|
||||||
sscanf(treatpt + 14, "%x", &u);
|
sscanf(treatpt + 14, "%x", &u);
|
||||||
|
@ -512,7 +512,7 @@ int Xorriso_write_to_channel(struct XorrisO *xorriso,
|
|||||||
bit15= with bit1 or bit2: close depicted log file
|
bit15= with bit1 or bit2: close depicted log file
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
char *rpt, *npt, *text;
|
char *rpt, *npt, *text= NULL;
|
||||||
int ret= 1, info_redirected= 0, result_redirected= 0;
|
int ret= 1, info_redirected= 0, result_redirected= 0;
|
||||||
char prefix[16];
|
char prefix[16];
|
||||||
FILE *logfile_fp, *pktlog_fp;
|
FILE *logfile_fp, *pktlog_fp;
|
||||||
@ -520,11 +520,11 @@ bit15= with bit1 or bit2: close depicted log file
|
|||||||
static int num_channels= 4;
|
static int num_channels= 4;
|
||||||
static char channel_prefixes[4][4]= {".","R","I","M"};
|
static char channel_prefixes[4][4]= {".","R","I","M"};
|
||||||
|
|
||||||
|
text= in_text; /* might change due to backslash encoding */
|
||||||
|
|
||||||
if(channel_no<0 || channel_no>=num_channels)
|
if(channel_no<0 || channel_no>=num_channels)
|
||||||
{ret= -1; goto ex;}
|
{ret= -1; goto ex;}
|
||||||
|
|
||||||
text= in_text; /* might change due to backslash encoding */
|
|
||||||
|
|
||||||
/* Logfiles */
|
/* Logfiles */
|
||||||
logfile_fp= xorriso->logfile_fp[channel_no];
|
logfile_fp= xorriso->logfile_fp[channel_no];
|
||||||
pktlog_fp= xorriso->pktlog_fp;
|
pktlog_fp= xorriso->pktlog_fp;
|
||||||
@ -1278,7 +1278,25 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
|
|||||||
Text_shellsafe(xorriso->system_area_disk_path, sfe, 0));
|
Text_shellsafe(xorriso->system_area_disk_path, sfe, 0));
|
||||||
if(!(is_default && no_defaults))
|
if(!(is_default && no_defaults))
|
||||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||||
if(xorriso->system_area_disk_path[0] || !part_table_implicit) {
|
|
||||||
|
is_default= (xorriso->partition_offset == 0);
|
||||||
|
sprintf(line,"-boot_image any partition_offset=%lu\n",
|
||||||
|
(unsigned long int) xorriso->partition_offset);
|
||||||
|
if(!(is_default && no_defaults))
|
||||||
|
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||||
|
is_default= (xorriso->partition_secs_per_head == 0);
|
||||||
|
sprintf(line,"-boot_image any partition_sec_hd=%lu\n",
|
||||||
|
(unsigned long int) xorriso->partition_secs_per_head);
|
||||||
|
if(!(is_default && no_defaults))
|
||||||
|
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||||
|
is_default= (xorriso->partition_heads_per_cyl == 0);
|
||||||
|
sprintf(line,"-boot_image any partition_hd_cyl=%lu\n",
|
||||||
|
(unsigned long int) xorriso->partition_heads_per_cyl);
|
||||||
|
if(!(is_default && no_defaults))
|
||||||
|
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||||
|
|
||||||
|
if((xorriso->system_area_disk_path[0] || !part_table_implicit) &&
|
||||||
|
(xorriso->partition_offset == 0 || (xorriso->system_area_options & 2))) {
|
||||||
is_default= ((xorriso->system_area_options & 3) == 0);
|
is_default= ((xorriso->system_area_options & 3) == 0);
|
||||||
sprintf(line,"-boot_image %s partition_table=%s\n",
|
sprintf(line,"-boot_image %s partition_table=%s\n",
|
||||||
xorriso->system_area_options & 2 ? "isolinux" : "grub",
|
xorriso->system_area_options & 2 ? "isolinux" : "grub",
|
||||||
|
@ -308,6 +308,15 @@ do_set:;
|
|||||||
0, "FAILURE", 1);
|
0, "FAILURE", 1);
|
||||||
{ret= 0; goto ex;}
|
{ret= 0; goto ex;}
|
||||||
}
|
}
|
||||||
|
ret= isoburn_igopt_set_part_offset(sopts, xorriso->partition_offset,
|
||||||
|
xorriso->partition_secs_per_head,
|
||||||
|
xorriso->partition_heads_per_cyl);
|
||||||
|
if(ret != ISO_SUCCESS) {
|
||||||
|
Xorriso_process_msg_queues(xorriso,0);
|
||||||
|
Xorriso_report_iso_error(xorriso, "", ret,
|
||||||
|
"Error when setting partition offset", 0, "FAILURE", 1);
|
||||||
|
{ret= 0; goto ex;}
|
||||||
|
}
|
||||||
ret= 1;
|
ret= 1;
|
||||||
ex:;
|
ex:;
|
||||||
if(fp != NULL && fp != stdin)
|
if(fp != NULL && fp != stdin)
|
||||||
@ -522,6 +531,18 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
|||||||
"on attempt to write", 2);
|
"on attempt to write", 2);
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
return(0);
|
return(0);
|
||||||
|
|
||||||
|
/* <<< TWINTREE: preliminary */
|
||||||
|
if(xorriso->partition_offset > 0) {
|
||||||
|
s= isoburn_disc_get_status(drive);
|
||||||
|
if(s != BURN_DISC_BLANK) {
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"Output drive not blank with non-zero partition offset");
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
{ret= 0; goto ex;}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(xorriso->out_drive_handle == xorriso->in_drive_handle) {
|
if(xorriso->out_drive_handle == xorriso->in_drive_handle) {
|
||||||
source_drive= drive;
|
source_drive= drive;
|
||||||
} else {
|
} else {
|
||||||
@ -680,6 +701,11 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
|||||||
((!!(xorriso->do_md5 & 8)) * isoburn_igopt_file_stability);
|
((!!(xorriso->do_md5 & 8)) * isoburn_igopt_file_stability);
|
||||||
if(xorriso->no_emul_toc & 1)
|
if(xorriso->no_emul_toc & 1)
|
||||||
ext|= isoburn_igopt_no_emul_toc;
|
ext|= isoburn_igopt_no_emul_toc;
|
||||||
|
|
||||||
|
/* <<< TWINTREE: preliminary */
|
||||||
|
if(xorriso->partition_offset > 0)
|
||||||
|
ext|= isoburn_igopt_no_emul_toc;
|
||||||
|
|
||||||
isoburn_igopt_set_extensions(sopts, ext);
|
isoburn_igopt_set_extensions(sopts, ext);
|
||||||
isoburn_igopt_set_relaxed(sopts, relax);
|
isoburn_igopt_set_relaxed(sopts, relax);
|
||||||
isoburn_igopt_set_sort_files(sopts, 1);
|
isoburn_igopt_set_sort_files(sopts, 1);
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
.\" First parameter, NAME, should be all caps
|
.\" First parameter, NAME, should be all caps
|
||||||
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
||||||
.\" other parameters are allowed: see man(7), man(1)
|
.\" other parameters are allowed: see man(7), man(1)
|
||||||
.TH XORRISO 1 "Jul 30, 2010"
|
.TH XORRISO 1 "Sep 04, 2010"
|
||||||
.\" Please adjust this date whenever revising the manpage.
|
.\" Please adjust this date whenever revising the manpage.
|
||||||
.\"
|
.\"
|
||||||
.\" Some roff macros, for reference:
|
.\" Some roff macros, for reference:
|
||||||
@ -2393,6 +2393,22 @@ then those parameters get updated when the new System Area is written.
|
|||||||
Special "system_area=/dev/zero" causes 32k of NUL-bytes.
|
Special "system_area=/dev/zero" causes 32k of NUL-bytes.
|
||||||
Use this to discard an MBR which eventually was loaded with the ISO image.
|
Use this to discard an MBR which eventually was loaded with the ISO image.
|
||||||
.br
|
.br
|
||||||
|
\fBpartition_offset=\fR2kb_block_adr causes a partition table where the
|
||||||
|
first partition begins at the given block address. This is counted in 2 kB
|
||||||
|
blocks, not in 512 byte blocks. If the block address is non-zero then it must
|
||||||
|
be at least 16. A non-zero partition offset causes two susperblocks to be
|
||||||
|
generated and two sets of directory trees. The image is then mountable from its
|
||||||
|
absolute start as well as from the partition start.
|
||||||
|
.br
|
||||||
|
Preliminary restrictions: Non-zero offset works only with blank output media
|
||||||
|
and implies -compliance no_emul_toc.
|
||||||
|
.br
|
||||||
|
\fBpartition_sec_hd=\fRnumber gives the number of sectors per head for
|
||||||
|
partition offset. 0 chooses a default value.
|
||||||
|
.br
|
||||||
|
\fBpartition_hd_cyl=\fRnumber gives the number of heads per cylinder for
|
||||||
|
partition offset. 0 chooses a default value.
|
||||||
|
.br
|
||||||
.TP
|
.TP
|
||||||
.B Character sets:
|
.B Character sets:
|
||||||
.PP
|
.PP
|
||||||
|
@ -2129,6 +2129,19 @@ of the existing sessions, unless one can assume overwriteable media.
|
|||||||
when the new System Area is written.
|
when the new System Area is written.
|
||||||
Special "system_area=/dev/zero" causes 32k of NUL-bytes. Use this
|
Special "system_area=/dev/zero" causes 32k of NUL-bytes. Use this
|
||||||
to discard an MBR which eventually was loaded with the ISO image.
|
to discard an MBR which eventually was loaded with the ISO image.
|
||||||
|
*partition_offset=*2kb_block_adr causes a partition table where the
|
||||||
|
first partition begins at the given block address. This is counted
|
||||||
|
in 2 kB blocks, not in 512 byte blocks. If the block address is
|
||||||
|
non-zero then it must be at least 16. A non-zero partition offset
|
||||||
|
causes two susperblocks to be generated and two sets of directory
|
||||||
|
trees. The image is then mountable from its absolute start as well
|
||||||
|
as from the partition start.
|
||||||
|
Preliminary restrictions: Non-zero offset works only with blank
|
||||||
|
output media and implies -compliance no_emul_toc.
|
||||||
|
*partition_sec_hd=*number gives the number of sectors per head for
|
||||||
|
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.
|
||||||
|
|
||||||
|
|
||||||
File: xorriso.info, Node: Charset, Next: Exception, Prev: Bootable, Up: Options
|
File: xorriso.info, Node: Charset, Next: Exception, Prev: Bootable, Up: Options
|
||||||
@ -4071,6 +4084,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
|
|||||||
* Ownership, global in ISO image, -uid: SetWrite. (line 162)
|
* Ownership, global in ISO image, -uid: SetWrite. (line 162)
|
||||||
* Ownership, in ISO image, -chown: Manip. (line 42)
|
* Ownership, in ISO image, -chown: Manip. (line 42)
|
||||||
* Ownership, in ISO image, -chown_r: Manip. (line 47)
|
* Ownership, in ISO image, -chown_r: Manip. (line 47)
|
||||||
|
* Partition offset, _definiton: Bootable. (line 142)
|
||||||
* Partition table, _definiton: Bootable. (line 124)
|
* Partition table, _definiton: Bootable. (line 124)
|
||||||
* Pathspec, _definition: SetInsert. (line 120)
|
* Pathspec, _definition: SetInsert. (line 120)
|
||||||
* Pattern expansion, _definition: Processing. (line 22)
|
* Pattern expansion, _definition: Processing. (line 22)
|
||||||
@ -4183,37 +4197,37 @@ Node: Filter75390
|
|||||||
Node: Writing79739
|
Node: Writing79739
|
||||||
Node: SetWrite86028
|
Node: SetWrite86028
|
||||||
Node: Bootable97977
|
Node: Bootable97977
|
||||||
Node: Charset106184
|
Node: Charset107016
|
||||||
Node: Exception108938
|
Node: Exception109770
|
||||||
Node: DialogCtl113453
|
Node: DialogCtl114285
|
||||||
Node: Inquiry115798
|
Node: Inquiry116630
|
||||||
Node: Navigate119928
|
Node: Navigate120760
|
||||||
Node: Verify127526
|
Node: Verify128358
|
||||||
Node: Restore135946
|
Node: Restore136778
|
||||||
Node: Emulation142602
|
Node: Emulation143434
|
||||||
Node: Scripting150325
|
Node: Scripting151157
|
||||||
Node: Frontend155887
|
Node: Frontend156719
|
||||||
Node: Examples157088
|
Node: Examples157920
|
||||||
Node: ExDevices158257
|
Node: ExDevices159089
|
||||||
Node: ExCreate158891
|
Node: ExCreate159723
|
||||||
Node: ExDialog160165
|
Node: ExDialog160997
|
||||||
Node: ExGrowing161427
|
Node: ExGrowing162259
|
||||||
Node: ExModifying162229
|
Node: ExModifying163061
|
||||||
Node: ExBootable162730
|
Node: ExBootable163562
|
||||||
Node: ExCharset163277
|
Node: ExCharset164109
|
||||||
Node: ExPseudo164105
|
Node: ExPseudo164937
|
||||||
Node: ExCdrecord164999
|
Node: ExCdrecord165831
|
||||||
Node: ExMkisofs165314
|
Node: ExMkisofs166146
|
||||||
Node: ExGrowisofs166317
|
Node: ExGrowisofs167149
|
||||||
Node: ExException167441
|
Node: ExException168273
|
||||||
Node: ExTime167895
|
Node: ExTime168727
|
||||||
Node: ExIncBackup168354
|
Node: ExIncBackup169186
|
||||||
Node: ExRestore171826
|
Node: ExRestore172658
|
||||||
Node: ExRecovery172795
|
Node: ExRecovery173627
|
||||||
Node: Files173361
|
Node: Files174193
|
||||||
Node: Seealso174589
|
Node: Seealso175421
|
||||||
Node: Legal175113
|
Node: Legal175945
|
||||||
Node: CommandIdx176035
|
Node: CommandIdx176867
|
||||||
Node: ConceptIdx189841
|
Node: ConceptIdx190673
|
||||||
|
|
||||||
End Tag Table
|
End Tag Table
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
@c man .\" First parameter, NAME, should be all caps
|
@c man .\" First parameter, NAME, should be all caps
|
||||||
@c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
@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 .\" other parameters are allowed: see man(7), man(1)
|
||||||
@c man .TH XORRISO 1 "Jul 30, 2010"
|
@c man .TH XORRISO 1 "Sep 04, 2010"
|
||||||
@c man .\" Please adjust this date whenever revising the manpage.
|
@c man .\" Please adjust this date whenever revising the manpage.
|
||||||
@c man .\"
|
@c man .\"
|
||||||
@c man .\" Some roff macros, for reference:
|
@c man .\" Some roff macros, for reference:
|
||||||
@ -2861,6 +2861,23 @@ then those parameters get updated when the new System Area is written.
|
|||||||
Special "system_area=/dev/zero" causes 32k of NUL-bytes.
|
Special "system_area=/dev/zero" causes 32k of NUL-bytes.
|
||||||
Use this to discard an MBR which eventually was loaded with the ISO image.
|
Use this to discard an MBR which eventually was loaded with the ISO image.
|
||||||
@*
|
@*
|
||||||
|
@cindex Partition offset, _definiton
|
||||||
|
@strong{partition_offset=}2kb_block_adr causes a partition table where the
|
||||||
|
first partition begins at the given block address. This is counted in 2 kB
|
||||||
|
blocks, not in 512 byte blocks. If the block address is non-zero then it must
|
||||||
|
be at least 16. A non-zero partition offset causes two susperblocks to be
|
||||||
|
generated and two sets of directory trees. The image is then mountable from its
|
||||||
|
absolute start as well as from the partition start.
|
||||||
|
@*
|
||||||
|
Preliminary restrictions: Non-zero offset works only with blank output media
|
||||||
|
and implies -compliance no_emul_toc.
|
||||||
|
@*
|
||||||
|
@strong{partition_sec_hd=}number gives the number of sectors per head for
|
||||||
|
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.
|
||||||
|
@*
|
||||||
@end table
|
@end table
|
||||||
@c man .TP
|
@c man .TP
|
||||||
@c man .B Character sets:
|
@c man .B Character sets:
|
||||||
|
@ -19,6 +19,10 @@
|
|||||||
#define Xorriso_private_includeD yes
|
#define Xorriso_private_includeD yes
|
||||||
|
|
||||||
|
|
||||||
|
/* for uint32_t */
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
|
||||||
/** The source code release timestamp */
|
/** The source code release timestamp */
|
||||||
#include "xorriso_timestamp.h"
|
#include "xorriso_timestamp.h"
|
||||||
#ifndef Xorriso_timestamP
|
#ifndef Xorriso_timestamP
|
||||||
@ -302,6 +306,18 @@ struct XorrisO { /* the global context of xorriso */
|
|||||||
area of the image, if no
|
area of the image, if no
|
||||||
system_area_disk_path is set.
|
system_area_disk_path is set.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* TWINTREE: The number of unclaimed 2K blocks before
|
||||||
|
start of partition 1 as of the MBR in system area.
|
||||||
|
If not 0 this will cause double volume descriptor sets
|
||||||
|
and double tree.
|
||||||
|
*/
|
||||||
|
uint32_t partition_offset;
|
||||||
|
/* TWINTREE: Partition table parameter: 1 to 63, 0= disabled/default */
|
||||||
|
int partition_secs_per_head;
|
||||||
|
/* TWINTREE: 1 to 255, 0= disabled/default */
|
||||||
|
int partition_heads_per_cyl;
|
||||||
|
|
||||||
/* User settable PVD time stamps */
|
/* User settable PVD time stamps */
|
||||||
time_t vol_creation_time;
|
time_t vol_creation_time;
|
||||||
time_t vol_modification_time;
|
time_t vol_modification_time;
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2010.09.05.113621"
|
#define Xorriso_timestamP "2010.09.05.113655"
|
||||||
|
Loading…
Reference in New Issue
Block a user