New -zisofs option by_magic=on

This commit is contained in:
Thomas Schmitt 2009-04-14 09:23:06 +00:00
parent 572dfb1584
commit 1ee9e2a16f
5 changed files with 65 additions and 13 deletions

View File

@ -2,7 +2,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 "Apr 11, 2009" .TH XORRISO 1 "Apr 13, 2009"
.\" 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:
@ -1808,7 +1808,11 @@ Parameters are:
.br .br
"block_size="32k|64k|128k size of compression blocks "block_size="32k|64k|128k size of compression blocks
.br .br
"default" same as "level=6:block_size=32k" "by_magic=on" enables an expensive test at image generation time which checks
files from disk whether they already are zisofs compressed, e.g. by program
mkzftree.
.br
"default" same as "level=6:block_size=32k:by_magic=off"
.TP .TP
\fB\-speed\fR number[k|m|c|d|b] \fB\-speed\fR number[k|m|c|d|b]
Set the burn speed. Default is 0 = maximum speed. Set the burn speed. Default is 0 = maximum speed.
@ -2692,7 +2696,7 @@ Personality "\fBmkisofs\fR" accepts the options listed with:
-as mkisofs -help -- -as mkisofs -help --
.br .br
Among them: -R (always on), -J, -o, -M, -C, -path-list, -m, -exclude-list, Among them: -R (always on), -J, -o, -M, -C, -path-list, -m, -exclude-list,
-f, -print-size, -pad, -no-pad, -V, -v, -version, -graft-points, -f, -print-size, -pad, -no-pad, -V, -v, -version, -graft-points, -z,
-no-emul-boot, -b, -c, -boot-info-table, -boot-load-size, -input-charset, -no-emul-boot, -b, -c, -boot-info-table, -boot-load-size, -input-charset,
-output-charset, pathspecs as with xorriso -add. -output-charset, pathspecs as with xorriso -add.
A lot of options are not supported and lead to failure of the mkisofs A lot of options are not supported and lead to failure of the mkisofs

View File

@ -4124,6 +4124,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
m->filter_list_closed= 0; m->filter_list_closed= 0;
m->zlib_level_default= m->zlib_level= 6; m->zlib_level_default= m->zlib_level= 6;
m->zisofs_block_size= m->zisofs_block_size_default= (1 << 15); m->zisofs_block_size= m->zisofs_block_size_default= (1 << 15);
m->zisofs_by_magic= 0;
m->do_overwrite= 2; m->do_overwrite= 2;
m->do_reassure= 0; m->do_reassure= 0;
m->drive_blacklist= NULL; m->drive_blacklist= NULL;
@ -9946,6 +9947,8 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
" -no-emul-boot Boot image is 'no emulation' image", " -no-emul-boot Boot image is 'no emulation' image",
" -boot-info-table Patch boot image with info table", " -boot-info-table Patch boot image with info table",
" isolinux_mbr=on|auto|off Control eventual isohybrid MBR generation", " isolinux_mbr=on|auto|off Control eventual isohybrid MBR generation",
" -z, -transparent-compression",
" Enable transparent compression of files",
" -v, -verbose Verbose", " -v, -verbose Verbose",
" -version Print the current version", " -version Print the current version",
"@End_of_helptexT@" "@End_of_helptexT@"
@ -10094,6 +10097,9 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
Xorriso_option_acl(xorriso, "on", 0); Xorriso_option_acl(xorriso, "on", 0);
} else if(strcmp(argv[i], "--xattr")==0) { } else if(strcmp(argv[i], "--xattr")==0) {
Xorriso_option_xattr(xorriso, "on", 0); Xorriso_option_xattr(xorriso, "on", 0);
} else if(strcmp(argv[i], "-z")==0 ||
strcmp(argv[i], "-transparent-compression")==0) {
Xorriso_option_zisofs(xorriso, "by_magic=on", 0);
} else } else
was_other_option= 1; was_other_option= 1;
@ -10302,6 +10308,9 @@ not_enough_args:;
/* was already handled in first argument scan */; /* was already handled in first argument scan */;
} else if(strcmp(argv[i], "--xattr")==0) { } else if(strcmp(argv[i], "--xattr")==0) {
/* was already handled in first argument scan */; /* was already handled in first argument scan */;
} else if(strcmp(argv[i], "-z")==0 ||
strcmp(argv[i], "-transparent-compression")==0) {
/* was already handled in first argument scan */;
} else if(argv[i][0]=='-' && argv[i][1]!=0) { } else if(argv[i][0]=='-' && argv[i][1]!=0) {
sprintf(xorriso->info_text, "-as %s: Unknown option %s", sprintf(xorriso->info_text, "-as %s: Unknown option %s",
whom, Text_shellsafe(argv[i], sfe, 0)); whom, Text_shellsafe(argv[i], sfe, 0));
@ -14321,7 +14330,7 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
"compressed content is detected with a file in the ISO image.", "compressed content is detected with a file in the ISO image.",
" -zisofs option[:options]", " -zisofs option[:options]",
" Set global zisofs parameters:", " Set global zisofs parameters:",
" level=0|...|9 , block_size=32k|64k|128k", " level=0|...|9 , block_size=32k|64k|128k , by_magic=on|off",
"", "",
"Write-to-media options:", "Write-to-media options:",
" -rollback Discard the manipulated ISO image and reload it.", " -rollback Discard the manipulated ISO image and reload it.",
@ -14464,13 +14473,14 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
"", "",
"Compatibility emulation (argument list may be ended by list delimiter --):", "Compatibility emulation (argument list may be ended by list delimiter --):",
" -as mkisofs [-help|-version|-o|-R|-J|-V|-P|-f|-m|-exclude-list|-no-pad|", " -as mkisofs [-help|-version|-o|-R|-J|-V|-P|-f|-m|-exclude-list|-no-pad|",
" -M|-C|-graft-points|-path-list|pathspecs|", " -M|-C|-graft-points|-path-list|pathspecs|-z|",
" -no-emul-boot|-b|-c|-boot-info-table|-boot-load-size]", " -no-emul-boot|-b|-c|-boot-info-table|-boot-load-size]",
" Perform some mkisofs gestures, understand pathspecs as mkisofs", " Perform some mkisofs gestures, understand pathspecs as mkisofs",
" does. Commit happens outside emulation at usual occasions.", " does. Commit happens outside emulation at usual occasions.",
" -as cdrecord [-help|-v|dev=|speed=|blank=|fs=|-eject|-atip|padsize=|path|-]", " -as cdrecord [-help|-v|dev=|speed=|blank=|fs=|-eject|-atip|padsize=|-multi]",
" path|-",
" Perform some cdrecord gestures, eventually write at most one", " Perform some cdrecord gestures, eventually write at most one",
" data track to blank or overwriteable media.", " data track to blank, appendable or overwriteable media.",
" -pacifier \"xorriso\"|\"cdrecord\"|\"mkisofs\"", " -pacifier \"xorriso\"|\"cdrecord\"|\"mkisofs\"",
" Choose format of UPDATE pacifier during write operations.", " Choose format of UPDATE pacifier during write operations.",
"", "",
@ -17094,9 +17104,16 @@ int Xorriso_option_zisofs(struct XorrisO *xorriso, char *mode, int flag)
} }
xorriso->zisofs_block_size= num; xorriso->zisofs_block_size= num;
} else if(strncmp(cpt, "by_magic=", 8)==0) {
if(strncmp(cpt + 9, "on", l - 9) == 0)
xorriso->zisofs_by_magic= 1;
else
xorriso->zisofs_by_magic= 0;
} else if(strncmp(cpt, "default", l)==0) { } else if(strncmp(cpt, "default", l)==0) {
xorriso->zlib_level= xorriso->zlib_level_default; xorriso->zlib_level= xorriso->zlib_level_default;
xorriso->zisofs_block_size= xorriso->zisofs_block_size_default; xorriso->zisofs_block_size= xorriso->zisofs_block_size_default;
xorriso->zisofs_by_magic= 0;
} else { } else {
unknown_mode:; unknown_mode:;

View File

@ -134,6 +134,7 @@ struct XorrisO { /* the global context of xorriso */
int zlib_level_default; int zlib_level_default;
int zisofs_block_size; int zisofs_block_size;
int zisofs_block_size_default; int zisofs_block_size_default;
int zisofs_by_magic;
int do_overwrite; /* 0=off, 1=on, 2=nondir */ int do_overwrite; /* 0=off, 1=on, 2=nondir */
int do_reassure; /* 0=off, 1=on, 2=tree */ int do_reassure; /* 0=off, 1=on, 2=tree */

View File

@ -1 +1 @@
#define Xorriso_timestamP "2009.04.11.172644" #define Xorriso_timestamP "2009.04.14.092306"

View File

@ -1140,7 +1140,7 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
struct burn_track **tracks; struct burn_track **tracks;
enum burn_disc_status s; enum burn_disc_status s;
IsoImage *image= NULL; IsoImage *image= NULL;
IsoNode *node; IsoNode *node, *root_node;
ElToritoBootImage *bootimg; ElToritoBootImage *bootimg;
enum eltorito_boot_media_type emul_type= ELTORITO_NO_EMUL; enum eltorito_boot_media_type emul_type= ELTORITO_NO_EMUL;
int profile_number; int profile_number;
@ -1403,11 +1403,36 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
if(ret<0) if(ret<0)
{ret= 0; goto ex;} {ret= 0; goto ex;}
if(xorriso->zisofs_by_magic) {
sprintf(xorriso->info_text,
"Checking disk file content for zisofs compression headers.");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "UPDATE", 0);
root_node= (IsoNode *) iso_image_get_root(image);
ret= iso_node_zf_by_magic(root_node,
(xorriso->out_drive_handle == xorriso->in_drive_handle) | 2 | 16);
if(ret<0) {
Xorriso_report_iso_error(xorriso, "", ret,
"Error when examining file content for zisofs headers",
0, "FAILURE", 1);
}
ret= Xorriso_eval_problem_status(xorriso, 1, 0);
if(ret<0)
{ret= 0; goto ex;}
sprintf(xorriso->info_text,
"Check for zisofs compression headers done.");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "UPDATE", 0);
}
/* >>> omit iso_image_update_sizes if the image was filled up very quickly */; /* >>> omit iso_image_update_sizes if the image was filled up very quickly */;
ret= iso_image_update_sizes(image); ret= iso_image_update_sizes(image);
if(ret < 0) { if(ret < 0) {
Xorriso_process_msg_queues(xorriso, 0); Xorriso_process_msg_queues(xorriso, 0);
if(ret<0) {
Xorriso_report_iso_error(xorriso, "", ret,
"Error when updating file sizes",
0, "FAILURE", 1);
}
ret= Xorriso_eval_problem_status(xorriso, 1, 0); ret= Xorriso_eval_problem_status(xorriso, 1, 0);
if(ret<0) if(ret<0)
{ret= 0; goto ex;} {ret= 0; goto ex;}
@ -10364,6 +10389,7 @@ int Xorriso_set_zisofs_params(struct XorrisO *xorriso, int flag)
int Xorriso_status_zisofs(struct XorrisO *xorriso, char *filter, FILE *fp, int Xorriso_status_zisofs(struct XorrisO *xorriso, char *filter, FILE *fp,
int flag) int flag)
/* /*
bit0= do only report non-default settings
bit1= do only report to fp bit1= do only report to fp
*/ */
{ {
@ -10372,12 +10398,16 @@ int Xorriso_status_zisofs(struct XorrisO *xorriso, char *filter, FILE *fp,
iso_zisofs_get_refcounts(&ziso_count, &osiz_count, 0); iso_zisofs_get_refcounts(&ziso_count, &osiz_count, 0);
if((flag & 1) && xorriso->zlib_level == xorriso->zlib_level_default && if((flag & 1) && xorriso->zlib_level == xorriso->zlib_level_default &&
xorriso->zisofs_block_size == xorriso->zisofs_block_size_default && xorriso->zisofs_block_size == xorriso->zisofs_block_size_default &&
ziso_count == 0 && osiz_count == 0) xorriso->zisofs_by_magic == 0 &&
ziso_count == 0 && osiz_count == 0 &&
filter[0] == 0)
return 2; return 2;
sprintf(xorriso->result_line, sprintf(xorriso->result_line,
"-zisofs level=%d:block_size=%dk:ziso_used=%.f:osiz_used=%.f\n", "-zisofs level=%d:block_size=%dk:by_magic=%s:ziso_used=%.f:osiz_used=%.f\n",
xorriso->zlib_level, xorriso->zisofs_block_size / 1024, xorriso->zlib_level, xorriso->zisofs_block_size / 1024,
(double) ziso_count, (double) osiz_count); xorriso->zisofs_by_magic ? "on" : "off",
(double) ziso_count, (double) osiz_count);
Xorriso_status_result(xorriso, filter, fp, flag&2); Xorriso_status_result(xorriso, filter, fp, flag&2);
return(1); return(1);
} }