diff --git a/ng_src/isoburn.c b/ng_src/isoburn.c index 5f718016..ef5f835b 100644 --- a/ng_src/isoburn.c +++ b/ng_src/isoburn.c @@ -256,14 +256,15 @@ int isoburn_prepare_disc_aux(struct burn_drive *d, struct burn_disc **disc, wopts.level = opts->level; wopts.rockridge = opts->rockridge; wopts.joliet = opts->joliet; + wopts.iso1999 = opts->iso1999; wopts.omit_version_numbers = opts->omit_version_numbers; wopts.allow_deep_paths = opts->allow_deep_paths; + wopts.allow_longer_paths = opts->allow_longer_paths; wopts.max_37_char_filenames = opts->max_37_char_filenames; wopts.no_force_dots = opts->no_force_dots; wopts.allow_lowercase = opts->allow_lowercase; wopts.allow_full_ascii = opts->allow_full_ascii; wopts.joliet_longer_paths = opts->joliet_longer_paths; - /* wopts.copy_eltorito = opts->copy_eltorito; */ wopts.sort_files = opts->sort_files; wopts.replace_dir_mode = opts->replace_dir_mode; wopts.replace_file_mode = opts->replace_file_mode; diff --git a/ng_src/isofs_wrap.c b/ng_src/isofs_wrap.c index 6cfa1eb8..c586220a 100644 --- a/ng_src/isofs_wrap.c +++ b/ng_src/isofs_wrap.c @@ -161,6 +161,7 @@ int isoburn_read_image(struct burn_drive *d, return -2; ropts.norock = read_opts->norock; ropts.nojoliet = read_opts->nojoliet; + ropts.noiso1999 = read_opts->noiso1999; ropts.preferjoliet = read_opts->preferjoliet; ropts.mode = read_opts->mode; ropts.uid = read_opts->uid; @@ -181,6 +182,8 @@ int isoburn_read_image(struct burn_drive *d, read_opts->hasRR = features.hasRR; read_opts->hasJoliet = features.hasJoliet; + read_opts->hasIso1999 = features.hasIso1999; + read_opts->hasElTorito = features.hasElTorito; read_opts->size = features.size; return 1; } diff --git a/ng_src/libisoburn.h b/ng_src/libisoburn.h index ae043868..619d60bf 100644 --- a/ng_src/libisoburn.h +++ b/ng_src/libisoburn.h @@ -90,6 +90,7 @@ void isoburn_disc_erase(struct burn_drive *drive, int fast); struct isoburn_read_opts { unsigned int norock:1; /*< Do not read Rock Ridge extensions */ unsigned int nojoliet:1; /*< Do not read Joliet extensions */ + unsigned int noiso1999:1; /*< Do not read ISO 9660:1999 enhanced tree */ unsigned int preferjoliet:1; /*< When both Joliet and RR extensions are present, the RR * tree is used. If you prefer using Joliet, set this to 1. */ @@ -107,6 +108,16 @@ struct isoburn_read_opts { to 0 if not. */ unsigned int hasJoliet:1; /*< It will be set to 1 if Joliet extensions are present, to 0 if not. */ + + /** + * It will be set to 1 if the image is an ISO 9660:1999, i.e. it has + * a version 2 Enhanced Volume Descriptor. + */ + unsigned int hasIso1999:1; + + /** It will be set to 1 if El-Torito boot record is present, to 0 if not.*/ + unsigned int hasElTorito:1; + uint32_t size; /**< Will be filled with the size (in 2048 byte block) of * the image, as reported in the PVM. */ unsigned int pretend_blank:1; /* always create empty image */ @@ -120,34 +131,70 @@ struct isoburn_source_opts { /* Options for image generation */ int level; /**< ISO level to write at. */ - int flags; /**< Which extensions to support. */ - int relaxed_constraints; /**< see ecma119_relaxed_constraints_flag */ /** Which extensions to support. */ unsigned int rockridge :1; unsigned int joliet :1; + unsigned int iso1999 :1; /* relaxed constraints */ + + /* + * Relaxed constraints. Setting any of these to 1 break the specifications, + * but it is supposed to work on most moderns systems. Use with caution. + */ + + /** + * Omit the version number (";1") at the end of the ISO-9660 identifiers. + * Version numbers are usually not used. + */ unsigned int omit_version_numbers :1; + + /** + * Allow ISO-9660 directory hierarchy to be deeper than 8 levels. + */ unsigned int allow_deep_paths :1; + + /** + * Allow path in the ISO-9660 tree to have more than 255 characters. + */ + unsigned int allow_longer_paths :1; + + /** + * Allow a single file or directory hierarchy to have up to 37 characters. + * This is larger than the 31 characters allowed by ISO level 2, and the + * extra space is taken from the version number, so this also forces + * omit_version_numbers. + */ unsigned int max_37_char_filenames :1; + + /** + * ISO-9660 forces filenames to have a ".", that separates file name from + * extension. libisofs adds it if original filename doesn't has one. Set + * this to 1 to prevent this behavior + */ unsigned int no_force_dots :1; + + /** + * Allow lowercase characters in ISO-9660 filenames. By default, only + * uppercase characters, numbers and a few other characters are allowed. + */ unsigned int allow_lowercase :1; + + /** + * Allow all ASCII characters to be appear on an ISO-9660 filename. Note + * that "/" and "\0" characters are never allowed, even in RR names. + */ unsigned int allow_full_ascii :1; + + /** + * Allow paths in the Joliet tree to have more than 240 characters. + */ unsigned int joliet_longer_paths :1; unsigned int sort_files:1; /**< If files should be sorted based on their weight. */ - unsigned int copy_eltorito:1; - /**< - * In multisession discs, select whether to copy el-torito catalog - * and boot image. Copy is needed for isolinux images, that need to - * be patched. However, it can lead to problems when the image is - * not present in the iso filesystem, because we can't figure out - * its size. In those cases, we only copy 1 block of data. - */ - /** * The following options set the default values for files and directory * permissions, gid and uid. All these take one of three values: 0, 1 or 2. diff --git a/test/compile_xorriso.sh b/test/compile_xorriso.sh index 19e11e46..b2b5683b 100755 --- a/test/compile_xorriso.sh +++ b/test/compile_xorriso.sh @@ -75,6 +75,7 @@ then libisofs="$libisofs $isofs"/fs_local.o libisofs="$libisofs $isofs"/fsource.o libisofs="$libisofs $isofs"/image.o + libisofs="$libisofs $isofs"/iso1999.o libisofs="$libisofs $isofs"/joliet.o libisofs="$libisofs $isofs"/libiso_msgs.o libisofs="$libisofs $isofs"/messages.o diff --git a/test/ng_xorrisoburn.c b/test/ng_xorrisoburn.c index b2ea8773..0c6b2250 100644 --- a/test/ng_xorrisoburn.c +++ b/test/ng_xorrisoburn.c @@ -355,6 +355,7 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag) memset(&ropts, sizeof(ropts), 0); ropts.norock= 0; ropts.nojoliet= 0; + ropts.noiso1999= 1; ropts.preferjoliet= 0; ropts.uid= 0; ropts.gid= 0; @@ -511,14 +512,15 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag) sopts.level= 2; sopts.rockridge= 1; sopts.joliet= !!xorriso->do_joliet; + sopts.iso1999= 0; sopts.omit_version_numbers= 0; sopts.allow_deep_paths= 1; + sopts.allow_longer_paths= 0; sopts.max_37_char_filenames= 0; sopts.no_force_dots= 0; sopts.allow_lowercase= 0; sopts.allow_full_ascii= 0; sopts.joliet_longer_paths= 0; - sopts.copy_eltorito= 1; sopts.sort_files= 1; sopts.replace_dir_mode= 2*!!xorriso->do_global_mode; sopts.dir_mode= xorriso->global_dir_mode; diff --git a/test/xorriso_makefile_am.txt b/test/xorriso_makefile_am.txt index b2fba74e..63f86940 100644 --- a/test/xorriso_makefile_am.txt +++ b/test/xorriso_makefile_am.txt @@ -47,6 +47,8 @@ xorriso_xorriso_SOURCES = \ libisofs/tree.c \ libisofs/image.h \ libisofs/image.c \ + libisofs/iso1999.h \ + libisofs/iso1999.c \ libisofs/fsource.h \ libisofs/fsource.c \ libisofs/fs_local.c \ diff --git a/test/xorriso_timestamp.h b/test/xorriso_timestamp.h index 053fec45..d14dedca 100644 --- a/test/xorriso_timestamp.h +++ b/test/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2008.01.18.101933" +#define Xorriso_timestamP "2008.01.19.090417"