New flag bit 11 "do not ignore Linux-like file attributes" with isoburn_drive_aquire(). New isoburn_read_opts extension isoburn_ropt_lfa_flags.

This commit is contained in:
Thomas Schmitt 2024-07-17 21:44:14 +02:00
parent 165a5fe608
commit dfd0a8cc81
6 changed files with 35 additions and 7 deletions

View File

@ -345,6 +345,7 @@ int isoburn_is_intermediate_dvd_rw(struct burn_drive *d, int flag)
and scan until end of medium. and scan until end of medium.
bit10= if not bit6: accept all xattr namespaces from external bit10= if not bit6: accept all xattr namespaces from external
filesystems, not only "user.". filesystems, not only "user.".
bit11= load lfa_flags (chattr) from external filesystems
*/ */
static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d, static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
int flag) int flag)
@ -389,7 +390,8 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
(*o)->msgs_submit_handle= libisoburn_default_msgs_submit_handle; (*o)->msgs_submit_handle= libisoburn_default_msgs_submit_handle;
(*o)->msgs_submit_flag= libisoburn_default_msgs_submit_flag; (*o)->msgs_submit_flag= libisoburn_default_msgs_submit_flag;
iso_image_set_ignore_aclea((*o)->image, iso_image_set_ignore_aclea((*o)->image,
((flag >> 5 ) & 3) | ((!!(flag & 1024)) << 3)); ((flag >> 5 ) & 3) | ((!!(flag & 1024)) << 3) |
((!!(flag & (1 << 11))) << 2));
#ifdef Hardcoded_cd_rW #ifdef Hardcoded_cd_rW
/* <<< A70929 : hardcoded CD-RW with fabricated -msinfo */ /* <<< A70929 : hardcoded CD-RW with fabricated -msinfo */
@ -541,6 +543,7 @@ ex:
and scan until end of medium. and scan until end of medium.
bit10= if not bit6: accept all xattr namespaces from external bit10= if not bit6: accept all xattr namespaces from external
filesystems, not only "user.". filesystems, not only "user.".
bit11= load lfa_flags (chattr) from external filesystems
*/ */
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[], int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
char *adr, int flag) char *adr, int flag)
@ -567,8 +570,8 @@ int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
goto ex; goto ex;
drive_grabbed= 1; drive_grabbed= 1;
ret= isoburn_welcome_media(&o, (*drive_infos)[0].drive, ret= isoburn_welcome_media(&o, (*drive_infos)[0].drive,
(flag & (8 | 16 | 32 | 64 | 128 | 512 | 1024)) | (flag & (8 | 16 | 32 | 64 | 128 | 512 | 1024 | (1 << 11))) |
!!(flag&2)); !!(flag & 2));
if(ret<=0) if(ret<=0)
goto ex; goto ex;

View File

@ -882,6 +882,7 @@ int isoburn_ropt_new(struct isoburn_read_opts **new_o, int flag)
o->noaaip= 1; o->noaaip= 1;
o->noacl= 1; o->noacl= 1;
o->noea= 1; o->noea= 1;
o->lfa_flags= 0;
o->noino= 1; o->noino= 1;
o->nomd5= 1; o->nomd5= 1;
o->preferjoliet= 0; o->preferjoliet= 0;
@ -983,6 +984,7 @@ int isoburn_ropt_set_extensions(struct isoburn_read_opts *o, int ext)
o->map_mode= (ext >> 12) & 3; o->map_mode= (ext >> 12) & 3;
o->do_joliet_map= !!(ext & 16384); o->do_joliet_map= !!(ext & 16384);
o->joliet_map_mode= !!(ext & 32768); o->joliet_map_mode= !!(ext & 32768);
o->lfa_flags= !!(ext & (1 << 16));
return(1); return(1);
} }

View File

@ -334,6 +334,9 @@ struct isoburn_read_opts {
unsigned int noacl:1; /* Do not read ACL from external file objects */ unsigned int noacl:1; /* Do not read ACL from external file objects */
unsigned int noea:1; /* Do not read XFS-style EA from externals */ unsigned int noea:1; /* Do not read XFS-style EA from externals */
/* ts C40716 */
unsigned int lfa_flags:1; /* Read Linux file attribute flags (chattr) */
/* ts A90508 */ /* ts A90508 */
unsigned int noino:1; /* Discard eventual PX inode numbers */ unsigned int noino:1; /* Discard eventual PX inode numbers */

View File

@ -353,6 +353,8 @@ create_blank_image:;
isoburn_msgs_submit(o, 0x00060000, msg, 0, "WARNING", 0); isoburn_msgs_submit(o, 0x00060000, msg, 0, "WARNING", 0);
goto create_blank_image; goto create_blank_image;
} }
iso_image_set_ignore_aclea(o->image, read_opts->noacl | (read_opts->noea << 1)
| (read_opts->lfa_flags << 2));
/* Important: do not return until iso_read_opts_free() */ /* Important: do not return until iso_read_opts_free() */

View File

@ -438,9 +438,13 @@ int isoburn_drive_scan_and_grab(struct burn_drive_info *drive_infos[],
(depending on media type and drive this might (depending on media type and drive this might
help or it might make the resulting toc even worse) help or it might make the resulting toc even worse)
bit4= do not emulate table of content on overwritable media bit4= do not emulate table of content on overwritable media
bit5= ignore ACL from external filesystems bit5= ignore ACL from external filesystems.
This can later be overriden by isoburn_read_image()
according to its isoburn_read_opts.
bit6= ignore POSIX Extended Attributes from external bit6= ignore POSIX Extended Attributes from external
filesystems (xattr) filesystems (xattr)
This can later be overriden by isoburn_read_image()
according to its isoburn_read_opts.
bit7= pretend read-only profile and scan for table of content bit7= pretend read-only profile and scan for table of content
bit8= re-assess already acquired (*drive_infos)[0] rather bit8= re-assess already acquired (*drive_infos)[0] rather
than acquiring adr than acquiring adr
@ -452,6 +456,12 @@ int isoburn_drive_scan_and_grab(struct burn_drive_info *drive_infos[],
bit10= if not bit6: accept all xattr namespaces from external bit10= if not bit6: accept all xattr namespaces from external
filesystems, not only "user.". filesystems, not only "user.".
@since 1.5.0 @since 1.5.0
bit11= do not ignore Linux-like file attributes (chattr) from
external filesystems. See occurences of "lfa_flags"
and "chattr" in libisofs.h.
This can later be overriden by isoburn_read_image()
according to its isoburn_read_opts.
@since 1.5.8
@return 1 = success , 0 = drive not found , <0 = other error @return 1 = success , 0 = drive not found , <0 = other error
Please excuse the typo "aquire" in the function name. Please excuse the typo "aquire" in the function name.
@ -941,10 +951,12 @@ int isoburn_ropt_get_data_cache(struct isoburn_read_opts *o,
@since 0.3.4 @since 0.3.4
Do not obtain ACL from external filesystem objects (e.g. Do not obtain ACL from external filesystem objects (e.g.
local filesystem files). local filesystem files).
This overrides the setting by isoburn_drive_aquire().
bit7= noea bit7= noea
@since 0.3.4 @since 0.3.4
Do not obtain XFS-style Extended Attributes from external Do not obtain XFS-style Extended Attributes (xattr) from
filesystem objects (e.g. local filesystem files). external filesystem objects (e.g. local filesystem files).
This overrides the setting by isoburn_drive_aquire().
bit8= noino bit8= noino
@since 0.4.0 @since 0.4.0
Do not load eventual inode numbers from RRIP entry PX, Do not load eventual inode numbers from RRIP entry PX,
@ -988,6 +1000,11 @@ int isoburn_ropt_get_data_cache(struct isoburn_read_opts *o,
record (not suitable for writing them to record (not suitable for writing them to
a new ISO filesystem) a new ISO filesystem)
1 = stripped: strip off trailing ";1" or ".;1" 1 = stripped: strip off trailing ";1" or ".;1"
bit16= lfa_flags
Obtain Linux file attribute flags (chattr) from
external filesystem objects (e.g. local filesystem files).
This overrides the setting by isoburn_drive_aquire().
@since 1.5.8
@return 1 success, <=0 failure @return 1 success, <=0 failure
*/ */
@ -1008,6 +1025,7 @@ int isoburn_ropt_get_data_cache(struct isoburn_read_opts *o,
#define isoburn_ropt_map_lowercase ( 2048 | 12288 ) #define isoburn_ropt_map_lowercase ( 2048 | 12288 )
#define isoburn_ropt_joliet_unmapped ( 16384 | 0) #define isoburn_ropt_joliet_unmapped ( 16384 | 0)
#define isoburn_ropt_joliet_stripped ( 16384 | 32768) #define isoburn_ropt_joliet_stripped ( 16384 | 32768)
#define isoburn_ropt_lfa_flags (1 << 16)
int isoburn_ropt_set_extensions(struct isoburn_read_opts *o, int ext); int isoburn_ropt_set_extensions(struct isoburn_read_opts *o, int ext);
int isoburn_ropt_get_extensions(struct isoburn_read_opts *o, int *ext); int isoburn_ropt_get_extensions(struct isoburn_read_opts *o, int *ext);

View File

@ -1 +1 @@
#define Xorriso_timestamP "2024.06.29.213042" #define Xorriso_timestamP "2024.07.17.194323"