From f70287eaf8f32d9511c5ebb6b23eb5fe4a333d1b Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Sat, 9 May 2009 20:12:39 +0000 Subject: [PATCH] New API options isoburn_ropt_noino and isoburn_igopt_hardlinks --- libisoburn/isoburn.c | 20 ++++++++++++++++++-- libisoburn/isoburn.h | 10 ++++++++-- libisoburn/isofs_wrap.c | 12 +++++++----- libisoburn/libisoburn.h | 19 ++++++++++++++++++- xorriso/xorriso_timestamp.h | 2 +- 5 files changed, 52 insertions(+), 11 deletions(-) diff --git a/libisoburn/isoburn.c b/libisoburn/isoburn.c index 70bcd769..1499858d 100644 --- a/libisoburn/isoburn.c +++ b/libisoburn/isoburn.c @@ -408,6 +408,16 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d, iso_write_opts_set_rockridge(wopts, opts->rockridge); iso_write_opts_set_joliet(wopts, opts->joliet); iso_write_opts_set_iso1999(wopts, opts->iso1999); + + /* <<< #ifdef shall be removed when libisofs-0.6.20 is released */ +#ifdef Libisofs_hardlink_prooF + + iso_write_opts_set_hardlinks(wopts, opts->hardlinks); + if(opts->hardlinks) + iso_write_opts_set_rrip_1_10_px_ino(wopts, 1); + +#endif + iso_write_opts_set_aaip(wopts, opts->aaip); iso_write_opts_set_omit_version_numbers(wopts, opts->omit_version_numbers); iso_write_opts_set_allow_deep_paths(wopts, opts->allow_deep_paths); @@ -643,6 +653,7 @@ int isoburn_ropt_new(struct isoburn_read_opts **new_o, int flag) o->noaaip= 1; o->noacl= 1; o->noea= 1; + o->noino= 1; o->preferjoliet= 0; o->uid= geteuid(); o->gid= getegid(); @@ -679,6 +690,7 @@ int isoburn_ropt_set_extensions(struct isoburn_read_opts *o, int ext) o->noaaip= !!(ext & 32); o->noacl= !!(ext & 64); o->noea= !!(ext & 128); + o->noino= !!(ext & 256); return(1); } @@ -687,7 +699,8 @@ int isoburn_ropt_get_extensions(struct isoburn_read_opts *o, int *ext) { *ext= (!!o->norock) | ((!!o->nojoliet)<<1) | ((!!o->noiso1999)<<2) | ((!!o->preferjoliet)<<3) | ((!!o->pretend_blank)<<4) | - ((!!o->noaaip) << 5) | ((!!o->noacl) << 6) | ((!!o->noea) << 7); + ((!!o->noaaip) << 5) | ((!!o->noacl) << 6) | ((!!o->noea) << 7) | + ((!!o->noino) << 8); return(1); } @@ -800,6 +813,8 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag) o->rockridge= 1; o->joliet= 0; o->iso1999= 0; + o->hardlinks= 0; + o->aaip = 0; o->omit_version_numbers= 0; o->allow_deep_paths= 1; o->allow_longer_paths= 0; @@ -858,6 +873,7 @@ int isoburn_igopt_set_extensions(struct isoburn_imgen_opts *o, int ext) o->rockridge= !!(ext&1); o->joliet= !!(ext&2); o->iso1999= !!(ext&4); + o->hardlinks= !!(ext & 8); o->aaip= !!(ext & 32); return(1); } @@ -866,7 +882,7 @@ int isoburn_igopt_set_extensions(struct isoburn_imgen_opts *o, int ext) int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext) { *ext= (!!o->rockridge) | ((!!o->joliet)<<1) | ((!!o->iso1999)<<2) | - ((!!o->aaip) << 5); + ((!!o->hardlinks) << 3) | ((!!o->aaip) << 5); return(1); } diff --git a/libisoburn/isoburn.h b/libisoburn/isoburn.h index 7bee3bba..eb6e46e2 100644 --- a/libisoburn/isoburn.h +++ b/libisoburn/isoburn.h @@ -258,6 +258,9 @@ struct isoburn_read_opts { unsigned int noacl:1; /* Do not read ACL from external file objects */ unsigned int noea:1; /* Do not read XFS-style EA from externals */ + /* ts A90508 */ + unsigned int noino:1; /* Discard eventual PX inode numbers */ + 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. */ @@ -319,8 +322,11 @@ struct isoburn_imgen_opts { unsigned int joliet :1; unsigned int iso1999 :1; - /* ts A90121 */ - unsigned int aaip:1; /* Write eventual AAIP info containing ACL and EA */ + /* Whether to mark suitable IsoNode as hardlinks in RRIP PX */ + unsigned int hardlinks :1; + + /* Write eventual AAIP info containing ACL and EA */ + unsigned int aaip :1; /* relaxed constraints */ diff --git a/libisoburn/isofs_wrap.c b/libisoburn/isofs_wrap.c index aff58eee..0916ad0e 100644 --- a/libisoburn/isofs_wrap.c +++ b/libisoburn/isofs_wrap.c @@ -27,8 +27,6 @@ #endif /* Xorriso_standalonE */ -#define Libisoburn_with_aaiP yes - #include "isoburn.h" #include "libisoburn.h" @@ -202,10 +200,14 @@ create_blank_image:; /* Important: do not return until iso_read_opts_free() */ iso_read_opts_set_start_block(ropts, ms_block); iso_read_opts_set_no_rockridge(ropts, read_opts->norock); - -#ifdef Libisoburn_with_aaiP iso_read_opts_set_no_aaip(ropts, read_opts->noaaip); -#endif /* Libisoburn_with_aaiP */ + + /* <<< #ifdef shall be removed when libisofs-0.6.20 is released */ +#ifdef Libisofs_hardlink_prooF + + iso_read_opts_set_new_inos(ropts, read_opts->noino); + +#endif /* Libisofs_hardlink_prooF */ iso_read_opts_set_no_joliet(ropts, read_opts->nojoliet); iso_read_opts_set_no_iso1999(ropts, read_opts->noiso1999); diff --git a/libisoburn/libisoburn.h b/libisoburn/libisoburn.h index 497406a0..4d2eb847 100644 --- a/libisoburn/libisoburn.h +++ b/libisoburn/libisoburn.h @@ -730,6 +730,15 @@ int isoburn_ropt_destroy(struct isoburn_read_opts **o, int flag); @since 0.3.4 Do not obtain XFS-style Extended Attributes from external filesystem objects (e.g. local filesystem files). + bit8= noino + @since 0.4.0 + Do not load eventual inode numbers from RRIP entry PX, + but generate a new unique inode number for each imported + IsoNode object. + PX inode numbers allow to mark families of hardlinks by + giving all family members the same inode number. libisofs + keeps the PX inode numbers unaltered when IsoNode objects + get written into an ISO image. @return 1 success, <=0 failure */ #define isoburn_ropt_norock 1 @@ -740,6 +749,7 @@ int isoburn_ropt_destroy(struct isoburn_read_opts **o, int flag); #define isoburn_ropt_noaaip 32 #define isoburn_ropt_noacl 64 #define isoburn_ropt_noea 128 +#define isoburn_ropt_noino 256 int isoburn_ropt_set_extensions(struct isoburn_read_opts *o, int ext); int isoburn_ropt_get_extensions(struct isoburn_read_opts *o, int *ext); @@ -904,6 +914,13 @@ int isoburn_igopt_get_level(struct isoburn_imgen_opts *o, int *level); Weaker than RockRidge, but also readable with Linux. bit2= iso1999 This is rather exotic. Better do not surprise the readers. + bit3= hardlinks + Enable hardlink consolidation. IsoNodes which refer to the + same source object and have the same properties will get + the same ISO image inode numbers. + If combined with isoburn_igopt_rrip_version_1_10 below, + then the PX entry layout of RRIP-1.12 will be used within + RRIP-1.10 (mkisofs does this without causing visible trouble). bit5= aaip The libisofs specific SUSP based extension of ECMA-119 which can encode ACL and XFS-style Extended Attributes. @@ -912,7 +929,7 @@ int isoburn_igopt_get_level(struct isoburn_imgen_opts *o, int *level); #define isoburn_igopt_rockridge 1 #define isoburn_igopt_joliet 2 #define isoburn_igopt_iso1999 4 -/* ts A90122 */ +#define isoburn_igopt_hardlinks 8 #define isoburn_igopt_aaip 32 int isoburn_igopt_set_extensions(struct isoburn_imgen_opts *o, int ext); int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext); diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 35ddd6ac..779980d3 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2009.05.08.073642" +#define Xorriso_timestamP "2009.05.09.201241"