Setting chattr "C" and "i" at their proper times during restoring to disk

This commit is contained in:
Thomas Schmitt 2024-08-06 21:32:41 +02:00
parent ce66b6a7e4
commit c0ec40c5d2
10 changed files with 417 additions and 174 deletions

View File

@ -42,6 +42,7 @@
#include "xorriso.h" #include "xorriso.h"
#include "xorriso_private.h" #include "xorriso_private.h"
#include "xorrisoburn.h"
/* ---------------------------- SplitparT ------------------------- */ /* ---------------------------- SplitparT ------------------------- */
@ -939,10 +940,16 @@ int Linkitem_get_link_count(struct LinkiteM *item, int flag)
struct PermiteM { struct PermiteM {
char *disk_path; char *disk_path;
struct stat stbuf; struct stat stbuf;
int immutable; /* bit0= set chattr immutable bit
bit1= only set immutable bit
*/
struct PermiteM *next; struct PermiteM *next;
}; };
/* @param flag bit0= Linux chattr immutable bit is set
bit1= when popping only set immutable bit
*/
int Permstack_push(struct PermiteM **o, char *disk_path, struct stat *stbuf, int Permstack_push(struct PermiteM **o, char *disk_path, struct stat *stbuf,
int flag) int flag)
{ {
@ -953,6 +960,7 @@ int Permstack_push(struct PermiteM **o, char *disk_path, struct stat *stbuf,
return(-1); return(-1);
m->disk_path= NULL; m->disk_path= NULL;
memcpy(&(m->stbuf), stbuf, sizeof(struct stat)); memcpy(&(m->stbuf), stbuf, sizeof(struct stat));
m->immutable= flag & 3;
m->next= *o; m->next= *o;
m->disk_path= strdup(disk_path); m->disk_path= strdup(disk_path);
@ -971,6 +979,7 @@ failed:;
/* @param flag bit0= minimal transfer: access permissions only /* @param flag bit0= minimal transfer: access permissions only
bit1= do not set timestamps bit1= do not set timestamps
bit2= do not set chattr flag i "immutable"
*/ */
int Permstack_pop(struct PermiteM **o, struct PermiteM *stopper, int Permstack_pop(struct PermiteM **o, struct PermiteM *stopper,
struct XorrisO *xorriso, int flag) struct XorrisO *xorriso, int flag)
@ -992,18 +1001,21 @@ int Permstack_pop(struct PermiteM **o, struct PermiteM *stopper,
} }
for(m= *o; m!=stopper; m= m_next) { for(m= *o; m!=stopper; m= m_next) {
ret= chmod(m->disk_path, m->stbuf.st_mode); if(!(m->immutable & 2)) {
if(ret==-1) { ret= chmod(m->disk_path, m->stbuf.st_mode);
if(xorriso!=NULL) { if(ret==-1) {
sprintf(xorriso->info_text, if(xorriso!=NULL) {
"Cannot change access permissions of disk directory: chmod %o ", sprintf(xorriso->info_text,
(unsigned int) (m->stbuf.st_mode & 07777)); "Cannot change access permissions of disk directory: chmod %o ",
Text_shellsafe(m->disk_path, xorriso->info_text, 1); (unsigned int) (m->stbuf.st_mode & 07777));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, "FAILURE", Text_shellsafe(m->disk_path, xorriso->info_text, 1);
0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, "FAILURE",
0);
}
} }
} }
if(!(flag&1)) {
if(!((flag & 1) || (m->immutable & 2))) {
ret= chown(m->disk_path, m->stbuf.st_uid, m->stbuf.st_gid); ret= chown(m->disk_path, m->stbuf.st_uid, m->stbuf.st_gid);
/* don't complain if it fails */ /* don't complain if it fails */
if(!(flag&2)) { if(!(flag&2)) {
@ -1019,6 +1031,10 @@ int Permstack_pop(struct PermiteM **o, struct PermiteM *stopper,
} }
} }
} }
if((m->immutable & 1) && !(flag & 4))
Xorriso_set_local_chattr_i(xorriso, m->disk_path, 0);
m_next= m->next; m_next= m->next;
free(m->disk_path); free(m->disk_path);
free((char *) m); free((char *) m);

View File

@ -107,7 +107,7 @@ int Xorriso_transfer_properties(struct XorrisO *xorriso, struct stat *stbuf,
"Error when obtaining file attribute flags", "Error when obtaining file attribute flags",
os_errno, "FAILURE", 1 | 2); os_errno, "FAILURE", 1 | 2);
ret= 0; goto ex; ret= 0; goto ex;
} else if(ret > 0) { } else if(ret == 1 || ret == 2) {
ret= iso_node_set_lfa_flags(node, lfa_flags, 0); ret= iso_node_set_lfa_flags(node, lfa_flags, 0);
if(ret < 0) { if(ret < 0) {
Xorriso_process_msg_queues(xorriso, 0); Xorriso_process_msg_queues(xorriso, 0);

View File

@ -2919,7 +2919,9 @@ int Xorriso_warn_if_not_bootcat(struct XorrisO *xorriso, char *prefix,
@param in_node if not NULL and not flag bit1: omit path resolution @param in_node if not NULL and not flag bit1: omit path resolution
@param flag bit1= path is disk_path @param flag bit1= path is disk_path
bit5= in case of symbolic link on disk: inquire link target bit5= in case of symbolic link on disk: inquire link target
@return <0 = ok , 0= no lfa_flags at node , <0 = libisofs error @return >0 = ok ,
0 = no lfa_flags at node or disk file,
<0 = libisofs error
*/ */
int Xorriso_get_lfa_flags(struct XorrisO *xorriso, void *in_node, char *path, int Xorriso_get_lfa_flags(struct XorrisO *xorriso, void *in_node, char *path,
uint64_t *lfa_flags, int *max_bit, int flag) uint64_t *lfa_flags, int *max_bit, int flag)
@ -2959,6 +2961,8 @@ from_disk:;
os_errno, "WARNING", 1); os_errno, "WARNING", 1);
return(-1); return(-1);
} }
return(1); if(ret == 1 || ret == 2)
return(1);
return(0);
} }

View File

@ -448,6 +448,8 @@ int Xorriso_report_iso_error(struct XorrisO *xorriso, char *victim,
Xorriso_alloc_meM(sfe, char, 6 * SfileadrL); Xorriso_alloc_meM(sfe, char, 6 * SfileadrL);
Xorriso_process_msg_queues(xorriso, 0);
if(sorry_sev<0) if(sorry_sev<0)
Xorriso__text_to_sev("SORRY", &sorry_sev, 0); Xorriso__text_to_sev("SORRY", &sorry_sev, 0);

View File

@ -303,6 +303,105 @@ ex:;
} }
int Xorriso_report_chattr_outcome(struct XorrisO *xorriso, char *disk_path,
uint64_t lfa_flags, uint64_t lfa_mask,
int iso_ret, int os_errno, int flag)
{
int ret;
char msg[101], *lfa_text= NULL;
if(iso_ret == 1)
{ret= 1; goto ex;}
ret= iso_util_encode_lfa_flags(lfa_flags & lfa_mask, &lfa_text, 0);
if(lfa_text == NULL)
lfa_text= strdup("-unknown-attributes-");
if(iso_ret < 0) {
strcpy(msg, "Could not set chattr '");
if(lfa_text != NULL)
strcat(msg, lfa_text);
strcat(msg, "'");
Xorriso_report_iso_error(xorriso, disk_path, iso_ret, msg, os_errno,
"FAILURE", 2);
ret= 0; goto ex;
} else if(iso_ret == 2) {
sprintf(xorriso->info_text,
"Could not map all of chattr '%s' to local file attributes of ",
lfa_text);
} else if(iso_ret == 3) {
sprintf(xorriso->info_text, "Will not apply chattr '%s' to symbolic link ",
lfa_text);
} else {
sprintf(xorriso->info_text,
"Unknown return value %d from iso_local_set_lfa_flags() with chattr '%s' to ",
iso_ret, lfa_text);
}
Text_shellsafe(disk_path, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, "FAILURE", 0);
ret= 0;
ex:;
if(lfa_text != NULL)
free(lfa_text);
return(ret);
}
uint64_t Xorriso__lfa_bits(char *lfa_text)
{
int ret;
uint64_t lfa_bits;
ret= iso_util_decode_lfa_flags(lfa_text, &lfa_bits, 0);
if(ret < 0)
lfa_bits= 0;
return(lfa_bits);
}
int Xorriso_set_local_chattr_i(struct XorrisO *xorriso, char *disk_path,
int flag)
{
int ret, max_bit= 31, os_errno;
static uint64_t lfa_i= 0xffffffff;
if(lfa_i == 0xffffffff)
lfa_i= Xorriso__lfa_bits("i");
ret= iso_local_set_lfa_flags(disk_path, lfa_i, max_bit, lfa_i, &os_errno, 0);
ret= Xorriso_report_chattr_outcome(xorriso, disk_path, lfa_i, lfa_i,
ret, os_errno, 0);
if(ret <= 0)
return(ret);
return(1);
}
/* If present and enabled: restore chattr i */
int Xorriso_restore_chattr_i(struct XorrisO *xorriso, IsoNode *node,
char *disk_path, int flag)
{
int ret, max_bit;
uint64_t lfa_flags;
static uint64_t lfa_i= 0xffffffff;
if(lfa_i == 0xffffffff)
lfa_i= Xorriso__lfa_bits("i");
if((xorriso->do_aaip & (1 << 12)) && !(xorriso->do_aaip & (1 << 13))) {
ret= iso_node_get_lfa_flags(node, &lfa_flags, &max_bit, 0);
if(ret > 0) {
if(lfa_flags & lfa_i & xorriso->lfa_restore_mask) {
ret= Xorriso_set_local_chattr_i(xorriso, disk_path, 0);
if(ret <= 0)
return(ret);
return(1);
}
}
}
return(2);
}
/* @param flag bit0= minimal transfer: access permissions only /* @param flag bit0= minimal transfer: access permissions only
bit1= keep directory open: keep owner, allow rwx for owner bit1= keep directory open: keep owner, allow rwx for owner
and push directory onto xorriso->perm_stack and push directory onto xorriso->perm_stack
@ -319,8 +418,14 @@ int Xorriso_restore_properties(struct XorrisO *xorriso, char *disk_path,
size_t num_attrs= 0, *value_lengths= NULL; size_t num_attrs= 0, *value_lengths= NULL;
char **names= NULL, **values= NULL; char **names= NULL, **values= NULL;
int *errnos= NULL; int *errnos= NULL;
uint64_t lfa_flags; uint64_t lfa_flags, mask;
int max_bit, os_errno; int max_bit, os_errno;
static uint64_t lfa_C= 0xffffffff, lfa_i= 0xffffffff;
if(lfa_C == 0xffffffff) {
lfa_C= Xorriso__lfa_bits("C");
lfa_i= Xorriso__lfa_bits("i");
}
ret= lstat(disk_path, &stbuf); ret= lstat(disk_path, &stbuf);
if(ret==-1) { if(ret==-1) {
@ -474,16 +579,25 @@ cannot_set_perm:;
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
{ret= 0; goto ex;} {ret= 0; goto ex;}
} else if(ret > 0) { } else if(ret > 0) {
ret= iso_local_set_lfa_flags(disk_path, lfa_flags, max_bit, /* Do not set lfa_flag 'C' here. It would be too late. */
xorriso->lfa_restore_mask, &os_errno, mask= xorriso->lfa_restore_mask & ~lfa_C;
(!!(xorriso->do_aaip & (1 << 13))) | /* Do not set lfa_flag 'i' of a directory here. It would be too early. */
((!!(xorriso->do_aaip & (1 << 14))) << 1)); if(is_dir)
if(ret < 0) { mask&= ~lfa_i;
if(mask != 0) {
ret= iso_local_set_lfa_flags(disk_path, lfa_flags, max_bit, mask,
&os_errno,
(!!(xorriso->do_aaip & (1 << 13))) |
((!!(xorriso->do_aaip & (1 << 14))) << 1));
/* >>> Need adjustable graceful error handling */; /* >>> Need adjustable graceful error handling */;
Xorriso_process_msg_queues(xorriso, 0); ret= Xorriso_report_chattr_outcome(xorriso, disk_path,
{ret= 0; goto ex;} lfa_flags,
xorriso->lfa_restore_mask & ~lfa_C,
ret, os_errno, 0);
if(ret <= 0)
goto ex;
} }
} }
} }
@ -850,7 +964,7 @@ int Xorriso_tree_restore_node(struct XorrisO *xorriso, IsoNode *node,
int flag) int flag)
{ {
int ret= 0, write_fd= -1, wanted, wret, open_flags, l_errno= 0; int ret= 0, write_fd= -1, wanted, wret, open_flags, l_errno= 0;
int target_deleted= 0, buf_size= 32 * 1024; int target_deleted= 0, buf_size= 32 * 1024, new_empty= 0;
char *what= "[unknown filetype]"; char *what= "[unknown filetype]";
char *buf= NULL, type_text[5], *temp_path= NULL, *buf_pt, *reason; char *buf= NULL, type_text[5], *temp_path= NULL, *buf_pt, *reason;
char *link_target, *open_path_pt= NULL; char *link_target, *open_path_pt= NULL;
@ -867,12 +981,17 @@ int Xorriso_tree_restore_node(struct XorrisO *xorriso, IsoNode *node,
off_t catsize, iso_node_size, wanted_size, cap; off_t catsize, iso_node_size, wanted_size, cap;
char disk_md5[16], iso_md5[16]; char disk_md5[16], iso_md5[16];
void *ctx= NULL; void *ctx= NULL;
int use_md5= 0, i, sparse_ret= 3; int use_md5= 0, i, sparse_ret= 3, max_bit, os_errno;
struct Xorriso_sparse_statE *sparse_state= NULL; struct Xorriso_sparse_statE *sparse_state= NULL;
uint64_t lfa_flags;
static uint64_t lfa_C= 0xffffffff;
Xorriso_alloc_meM(buf, char, buf_size); Xorriso_alloc_meM(buf, char, buf_size);
Xorriso_alloc_meM(temp_path, char, SfileadrL); Xorriso_alloc_meM(temp_path, char, SfileadrL);
if(lfa_C == 0xffffffff)
lfa_C= Xorriso__lfa_bits("C");
if(!(flag & 2)) if(!(flag & 2))
img_offset= bytes= 0; img_offset= bytes= 0;
if(LIBISO_ISDIR(node)) { if(LIBISO_ISDIR(node)) {
@ -911,8 +1030,11 @@ int Xorriso_tree_restore_node(struct XorrisO *xorriso, IsoNode *node,
} }
open_path_pt= disk_path; open_path_pt= disk_path;
ret= stat(open_path_pt, &stbuf); ret= stat(open_path_pt, &stbuf);
if(ret == -1 && errno == EACCES && (flag & 128)) if(ret == -1) {
{ret= 4; goto ex;} if(errno == EACCES && (flag & 128))
{ret= 4; goto ex;}
new_empty= 1;
}
if(flag&2) { if(flag&2) {
if(ret != -1) { if(ret != -1) {
wanted_size= disk_offset + bytes; wanted_size= disk_offset + bytes;
@ -959,6 +1081,7 @@ int Xorriso_tree_restore_node(struct XorrisO *xorriso, IsoNode *node,
if(ret <= 0 || ret == 4) if(ret <= 0 || ret == 4)
goto ex; goto ex;
open_path_pt= temp_path; open_path_pt= temp_path;
new_empty= 1;
} }
} }
if(write_fd==-1) { if(write_fd==-1) {
@ -972,6 +1095,25 @@ int Xorriso_tree_restore_node(struct XorrisO *xorriso, IsoNode *node,
if(write_fd==-1) if(write_fd==-1)
goto cannot_restore; goto cannot_restore;
} }
if(new_empty) {
/* If chattr 'C' "no copy-on-write" is present on node and enabled for
restoring, then set it as long as the file is empty, because man chattr
says so for btrfs.
*/
ret= iso_node_get_lfa_flags(node, &lfa_flags, &max_bit, 0);
if(ret > 0) {
if(lfa_flags & lfa_C & xorriso->lfa_restore_mask) {
ret= iso_local_set_lfa_flags(open_path_pt, lfa_C, max_bit, lfa_C,
&os_errno, 0);
ret= Xorriso_report_chattr_outcome(xorriso, open_path_pt,
lfa_C, lfa_C, ret, os_errno, 0);
if(ret <= 0)
goto cannot_restore;
}
}
}
if(ISO_NODE_IS_BOOTCAT(node)) { if(ISO_NODE_IS_BOOTCAT(node)) {
ret= Xorriso_get_volume(xorriso, &volume, 0); ret= Xorriso_get_volume(xorriso, &volume, 0);
if(ret<=0) if(ret<=0)
@ -1479,6 +1621,8 @@ int Xorriso_restore_disk_object(struct XorrisO *xorriso,
goto restoring_failed; goto restoring_failed;
if(ret == 4) if(ret == 4)
goto ex; goto ex;
if(ret == 2)
{ret= 3; goto ex;}
} }
if(first_part_node != NULL && !no_props) if(first_part_node != NULL && !no_props)
Xorriso_restore_properties(xorriso, disk_path, first_part_node, Xorriso_restore_properties(xorriso, disk_path, first_part_node,
@ -1526,6 +1670,8 @@ int Xorriso_restore_disk_object(struct XorrisO *xorriso,
| (no_props << 3)); | (no_props << 3));
if(ret == 4) if(ret == 4)
goto ex; goto ex;
if(ret == 2)
{ret= 3; goto ex;}
if(ret > 0 && (flag & 8) && !no_props) if(ret > 0 && (flag & 8) && !no_props)
ret= Xorriso_restore_properties(xorriso, disk_path, node, 2 | !!(flag&64)); ret= Xorriso_restore_properties(xorriso, disk_path, node, 2 | !!(flag&64));
if(ret<=0) { if(ret<=0) {
@ -1537,8 +1683,6 @@ restoring_failed:;
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
{ret= 0; goto ex;} {ret= 0; goto ex;}
} }
if(ret==2)
{ret= 3; goto ex;}
if(record_hl_path) { /* Start of a disk hardlink family */ if(record_hl_path) { /* Start of a disk hardlink family */
ret= Xorriso_register_node_target(xorriso, node_idx, disk_path, 0); ret= Xorriso_register_node_target(xorriso, node_idx, disk_path, 0);
if(ret < 0) if(ret < 0)
@ -1659,7 +1803,7 @@ int Xorriso_restore_tree(struct XorrisO *xorriso, IsoDir *dir,
IsoDirIter *iter= NULL; IsoDirIter *iter= NULL;
IsoNode **node_array= NULL; IsoNode **node_array= NULL;
int node_count= 0, node_idx; int node_count= 0, node_idx;
int ret, source_is_dir, fret, was_failure= 0; int ret, source_is_dir, fret, was_failure= 0, sret;
int do_not_dive, source_is_split= 0, len_dp, len_ip, stbuf_ret, hflag, hret; int do_not_dive, source_is_split= 0, len_dp, len_ip, stbuf_ret, hflag, hret;
char *name, *disk_name, *leaf_name, *srcpt, *stbuf_src= ""; char *name, *disk_name, *leaf_name, *srcpt, *stbuf_src= "";
struct LinkiteM *own_link_stack; struct LinkiteM *own_link_stack;
@ -1667,8 +1811,9 @@ int Xorriso_restore_tree(struct XorrisO *xorriso, IsoDir *dir,
char *disk_path= NULL, *img_path= NULL, *link_target= NULL; char *disk_path= NULL, *img_path= NULL, *link_target= NULL;
off_t mem; off_t mem;
struct PermiteM *perm_stack_mem; struct PermiteM *perm_stack_mem;
struct stat stbuf; struct stat stbuf, disk_stbuf;
int dir_create= 0, node_register= 0, do_node_count= 0, normal_mode= 0; int dir_create= 0, node_register= 0, do_node_count= 0, normal_mode= 0;
int target_was_no_dir, dir_is_new;
perm_stack_mem= xorriso->perm_stack; perm_stack_mem= xorriso->perm_stack;
switch((flag >> 7) & 3) { switch((flag >> 7) & 3) {
@ -1759,6 +1904,8 @@ much_too_long:;
while(1) { /* loop over ISO directory content */ while(1) { /* loop over ISO directory content */
stbuf_src= ""; stbuf_src= "";
target_was_no_dir= 0;
dir_is_new= 0;
#ifdef Osirrox_not_yeT #ifdef Osirrox_not_yeT
@ -1862,26 +2009,49 @@ much_too_long:;
} else if(node_register || do_node_count) { } else if(node_register || do_node_count) {
ret= 1; ret= 1;
} else { } else {
if(source_is_dir) {
ret= lstat(disk_path, &disk_stbuf);
if(ret == -1) {
target_was_no_dir= 1;
} else {
if(!S_ISDIR(disk_stbuf.st_mode))
target_was_no_dir= 1;
}
}
ret= Xorriso_restore_disk_object(xorriso, img_path, node, disk_path, ret= Xorriso_restore_disk_object(xorriso, img_path, node, disk_path,
(off_t) 0, (off_t) 0, hflag); (off_t) 0, (off_t) 0, hflag);
if(ret == 3) /* intentionally not restored */ if(ret == 3) /* intentionally not restored */
do_not_dive= 1; do_not_dive= 1;
if(target_was_no_dir) {
sret= lstat(disk_path, &disk_stbuf);
if(sret != -1)
if(S_ISDIR(disk_stbuf.st_mode))
dir_is_new= 1;
}
} }
if(ret<=0) if(ret<=0)
goto was_problem; goto was_problem;
} }
ret= 1;
if(source_is_dir && !do_not_dive) { if(source_is_dir && !do_not_dive) {
ret= Xorriso_restore_tree(xorriso, (IsoDir *) node, ret= Xorriso_restore_tree(xorriso, (IsoDir *) node,
img_path, disk_path, mem, img_path, disk_path, mem,
own_link_stack, 1 | (flag & (2 | (3 << 7)))); own_link_stack, 1 | (flag & (2 | (3 << 7))));
/* eventually restore exact access permissions of directory */ }
if(source_is_dir) {
/* Restore exact access permissions of directory */
hret= Permstack_pop(&(xorriso->perm_stack), perm_stack_mem, xorriso, hret= Permstack_pop(&(xorriso->perm_stack), perm_stack_mem, xorriso,
!!(flag&64)); !!(flag&64));
if(hret<=0 && hret<ret) if(hret<=0 && hret<ret)
ret= hret; ret= hret;
if(ret<=0) if(dir_is_new && !dir_create) {
goto was_problem; hret= Xorriso_restore_chattr_i(xorriso, node, disk_path, 0);
if(hret <= 0 && hret < ret)
ret= hret;
}
} }
if(ret <= 0)
goto was_problem;
continue; /* regular bottom of loop */ continue; /* regular bottom of loop */
was_problem:; was_problem:;
@ -2115,9 +2285,10 @@ attach_source:;
if(hret < 0) if(hret < 0)
goto ex; goto ex;
} }
if(new_dir_made && !(flag&64)) }
/* set timestamps which Permstack_pop() will not set */ if(new_dir_made && !(flag&64)) {
Xorriso_restore_properties(xorriso, disk_path, node, 2); /* set timestamps which Permstack_pop() will not set */
Xorriso_restore_properties(xorriso, disk_path, node, 2);
} }
} else { } else {
if(dir_create || node_count) { if(dir_create || node_count) {
@ -2137,9 +2308,27 @@ attach_source:;
} }
} }
} }
} else } else {
*npt= '/'; *npt= '/';
}
} }
if(new_dir_made && !dir_create) {
ret= 1;
/* Need to set any properties before possibly setting immutable bit.
So pop earlier than normal.
*/
hret= Permstack_pop(&(xorriso->perm_stack), perm_stack_mem, xorriso,
2 | !!(flag&64));
if(hret <= 0 && hret < ret)
ret= hret;
hret= Xorriso_restore_chattr_i(xorriso, node, disk_path, 0);
if(hret <= 0 && hret < ret)
ret= hret;
if(ret <= 0)
goto ex;
}
Xorriso_process_msg_queues(xorriso,0); Xorriso_process_msg_queues(xorriso,0);
ret= 1 + (is_dir && !leaf_is_split); ret= 1 + (is_dir && !leaf_is_split);
ex:; ex:;
@ -2419,6 +2608,8 @@ int Xorriso_extract_cut(struct XorrisO *xorriso,
eff_disk_path, (off_t) 0, bytes, 2 | 8); eff_disk_path, (off_t) 0, bytes, 2 | 8);
if(ret<=0) if(ret<=0)
goto ex; goto ex;
if(ret != 1)
{ret= 0; goto ex;}
} }
ret= Xorriso_restore_properties(xorriso, eff_disk_path, node, 0); ret= Xorriso_restore_properties(xorriso, eff_disk_path, node, 0);

View File

@ -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 "Version 1.5.7, Jul 23, 2024" .TH XORRISO 1 "Version 1.5.7, Aug 05, 2024"
.\" 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:
@ -1093,6 +1093,10 @@ changeable by the bearer of superuser capabilities. "no_restore_su" disables
restoring of these attributes. "restore_su_auto" enables it only if the restoring of these attributes. "restore_su_auto" enables it only if the
effective user id is 0. effective user id is 0.
.br .br
The attribute "i" (for "immutable") gets restored to directories only if they
have been created freshly by the same file restoring xorriso command.
A directory which already existed on disk will not be made immutable.
.br
Mode "restore_only_known" restricts restoring to the known settable attribute Mode "restore_only_known" restricts restoring to the known settable attribute
flags "aAcCdDFijmPsStTux". "restore_unknown" enables the attempt to restore flags "aAcCdDFijmPsStTux". "restore_unknown" enables the attempt to restore
unknown flags or even those which are known to be unchangeable, if they are unknown flags or even those which are known to be unchangeable, if they are
@ -4805,11 +4809,14 @@ drive can be "indev" or "outdev" to indicate already acquired drives,
or it can be the path of a not yet acquired drive. or it can be the path of a not yet acquired drive.
Prefix "stdio:" for non\-MMC drives is not mandatory. Prefix "stdio:" for non\-MMC drives is not mandatory.
.br .br
For entity and id, see also command \-load. They must be either "sbsector" with See command \fB\-load\fR for the meaning of entity and id.
the superblock sector address as id, .br
or "track" with a track number as id, or "session" with a session number, Entities are: "auto", "session", "track", "lba", "sbsector", "volid",
or "volid" with a search pattern for the volume id, or "auto" with which "at_time", "before", "not_after", "after", and "not_before".
any text as id mounts the first track of the last session. .br
Each is to be used with its appropriate kind of id string: "auto",
session number, track number, block number, search expression for volume id,
or time string.
.br .br
path will be used as mount point and must already exist as a directory on disk. path will be used as mount point and must already exist as a directory on disk.
.br .br
@ -5916,6 +5923,9 @@ Code "codes" lists them. They share names with related commands
.br .br
"xattr" tells whether xorriso has an adapter for local filesystems EA. "xattr" tells whether xorriso has an adapter for local filesystems EA.
.br .br
"lfa_flags" tells whether xorriso has an adapter for local Linux file
attributes (see man 1 chattr).
.br
"jigdo" tells whether production of Jigdo files is possible. "jigdo" tells whether production of Jigdo files is possible.
.br .br
"zisofs" tells whether zisofs and built\-in gzip filters are enabled. "zisofs" tells whether zisofs and built\-in gzip filters are enabled.

View File

@ -978,6 +978,10 @@ activate them only after image loading.
are only changeable by the bearer of superuser capabilities. are only changeable by the bearer of superuser capabilities.
"no_restore_su" disables restoring of these attributes. "no_restore_su" disables restoring of these attributes.
"restore_su_auto" enables it only if the effective user id is 0. "restore_su_auto" enables it only if the effective user id is 0.
The attribute "i" (for "immutable") gets restored to directories
only if they have been created freshly by the same file restoring
xorriso command. A directory which already existed on disk will
not be made immutable.
Mode "restore_only_known" restricts restoring to the known settable Mode "restore_only_known" restricts restoring to the known settable
attribute flags "aAcCdDFijmPsStTux". "restore_unknown" enables the attribute flags "aAcCdDFijmPsStTux". "restore_unknown" enables the
attempt to restore unknown flags or even those which are known to attempt to restore unknown flags or even those which are known to
@ -4030,11 +4034,13 @@ File: xorriso.info, Node: Inquiry, Next: Navigate, Prev: DialogCtl, Up: Comm
drive can be "indev" or "outdev" to indicate already acquired drive can be "indev" or "outdev" to indicate already acquired
drives, or it can be the path of a not yet acquired drive. Prefix drives, or it can be the path of a not yet acquired drive. Prefix
"stdio:" for non-MMC drives is not mandatory. "stdio:" for non-MMC drives is not mandatory.
For entity and id, see also command -load. They must be either See command '-load' for the meaning of entity and id.
"sbsector" with the superblock sector address as id, or "track" Entities are: "auto", "session", "track", "lba", "sbsector",
with a track number as id, or "session" with a session number, or "volid", "at_time", "before", "not_after", "after", and
"volid" with a search pattern for the volume id, or "auto" with "not_before".
which any text as id mounts the first track of the last session. Each is to be used with its appropriate kind of id string: "auto",
session number, track number, block number, search expression for
volume id, or time string.
path will be used as mount point and must already exist as a path will be used as mount point and must already exist as a
directory on disk. directory on disk.
The command gets printed to the result channel. See command -mount The command gets printed to the result channel. See command -mount
@ -4967,6 +4973,8 @@ File: xorriso.info, Node: Scripting, Next: Frontend, Prev: Emulation, Up: Co
ACLs. ACLs.
"xattr" tells whether xorriso has an adapter for local filesystems "xattr" tells whether xorriso has an adapter for local filesystems
EA. EA.
"lfa_flags" tells whether xorriso has an adapter for local Linux
file attributes (see man 1 chattr).
"jigdo" tells whether production of Jigdo files is possible. "jigdo" tells whether production of Jigdo files is possible.
"zisofs" tells whether zisofs and built-in gzip filters are "zisofs" tells whether zisofs and built-in gzip filters are
enabled. enabled.
@ -5907,7 +5915,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
[index] [index]
* Menu: * Menu:
* # starts a comment line: Scripting. (line 156) * # starts a comment line: Scripting. (line 158)
* -abort_on controls abort on error: Exception. (line 27) * -abort_on controls abort on error: Exception. (line 27)
* -abstract_file sets abstract file name: SetWrite. (line 271) * -abstract_file sets abstract file name: SetWrite. (line 271)
* -acl controls handling of ACLs: Loading. (line 189) * -acl controls handling of ACLs: Loading. (line 189)
@ -5923,12 +5931,12 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -assert_volid rejects undesired images: Loading. (line 129) * -assert_volid rejects undesired images: Loading. (line 129)
* -assess_indev_features shows filesystem features: Inquiry. (line 61) * -assess_indev_features shows filesystem features: Inquiry. (line 61)
* -auto_charset learns character set from image: Loading. (line 141) * -auto_charset learns character set from image: Loading. (line 141)
* -backslash_codes enables backslash conversion: Scripting. (line 71) * -backslash_codes enables backslash conversion: Scripting. (line 73)
* -ban_stdio_write demands real drive: Loading. (line 424) * -ban_stdio_write demands real drive: Loading. (line 428)
* -biblio_file sets biblio file name: SetWrite. (line 277) * -biblio_file sets biblio file name: SetWrite. (line 277)
* -blank erases media: Writing. (line 57) * -blank erases media: Writing. (line 57)
* -boot_image controls bootability: Bootable. (line 75) * -boot_image controls bootability: Bootable. (line 75)
* -calm_drive reduces drive activity: Loading. (line 414) * -calm_drive reduces drive activity: Loading. (line 418)
* -cd sets working directory in ISO: Navigate. (line 7) * -cd sets working directory in ISO: Navigate. (line 7)
* -cdx sets working directory on disk: Navigate. (line 15) * -cdx sets working directory on disk: Navigate. (line 15)
* -changes_pending overrides change status: Writing. (line 12) * -changes_pending overrides change status: Writing. (line 12)
@ -5964,12 +5972,12 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -cp_rx copies file trees to disk: Restore. (line 131) * -cp_rx copies file trees to disk: Restore. (line 131)
* -cp_rx copies file trees to disk <1>: Restore. (line 139) * -cp_rx copies file trees to disk <1>: Restore. (line 139)
* -cut_out inserts piece of data file or device: Insert. (line 139) * -cut_out inserts piece of data file or device: Insert. (line 139)
* -data_cache_size adjusts read cache size: Loading. (line 440) * -data_cache_size adjusts read cache size: Loading. (line 444)
* -dev acquires one drive for input and output: AqDrive. (line 12) * -dev acquires one drive for input and output: AqDrive. (line 12)
* -devices gets list of drives: Inquiry. (line 7) * -devices gets list of drives: Inquiry. (line 7)
* -device_links gets list of drives: Inquiry. (line 17) * -device_links gets list of drives: Inquiry. (line 17)
* -dialog enables dialog mode: DialogCtl. (line 7) * -dialog enables dialog mode: DialogCtl. (line 7)
* -disk_dev_ino fast incremental backup: Loading. (line 334) * -disk_dev_ino fast incremental backup: Loading. (line 338)
* -disk_pattern controls pattern expansion: Insert. (line 34) * -disk_pattern controls pattern expansion: Insert. (line 34)
* -displacement compensate altered image start address: Loading. * -displacement compensate altered image start address: Loading.
(line 102) (line 102)
@ -5981,11 +5989,11 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -dusx show directory size on disk: Navigate. (line 96) * -dusx show directory size on disk: Navigate. (line 96)
* -dux show directory size on disk: Navigate. (line 92) * -dux show directory size on disk: Navigate. (line 92)
* -dvd_obs set write block size and end alignment: SetWrite. (line 421) * -dvd_obs set write block size and end alignment: SetWrite. (line 421)
* -early_stdio_test classifies stdio drives: Loading. (line 428) * -early_stdio_test classifies stdio drives: Loading. (line 432)
* -ecma119_map names w/o Rock Ridge, Joliet: Loading. (line 307) * -ecma119_map names w/o Rock Ridge, Joliet: Loading. (line 311)
* -eject ejects drive tray: Writing. (line 50) * -eject ejects drive tray: Writing. (line 50)
* -end writes pending session and ends program: Scripting. (line 151) * -end writes pending session and ends program: Scripting. (line 153)
* -errfile_log logs problematic disk files: Scripting. (line 116) * -errfile_log logs problematic disk files: Scripting. (line 118)
* -error_behavior controls error workarounds: Exception. (line 92) * -error_behavior controls error workarounds: Exception. (line 92)
* -external_filter registers data filter: Filter. (line 20) * -external_filter registers data filter: Filter. (line 20)
* -external_filter unregisters data filter: Filter. (line 47) * -external_filter unregisters data filter: Filter. (line 47)
@ -5995,13 +6003,13 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -extract_cut copies file piece to disk: Restore. (line 108) * -extract_cut copies file piece to disk: Restore. (line 108)
* -extract_l copies files to disk: Restore. (line 104) * -extract_l copies files to disk: Restore. (line 104)
* -extract_single copies file to disk: Restore. (line 101) * -extract_single copies file to disk: Restore. (line 101)
* -file_name_limit curbs length of file names: Loading. (line 354) * -file_name_limit curbs length of file names: Loading. (line 358)
* -file_size_limit limits data file size: SetInsert. (line 7) * -file_size_limit limits data file size: SetInsert. (line 7)
* -find traverses and alters ISO tree: CmdFind. (line 7) * -find traverses and alters ISO tree: CmdFind. (line 7)
* -findx traverses disk tree: Navigate. (line 99) * -findx traverses disk tree: Navigate. (line 99)
* -follow softlinks and mount points: SetInsert. (line 77) * -follow softlinks and mount points: SetInsert. (line 77)
* -format formats media: Writing. (line 87) * -format formats media: Writing. (line 87)
* -for_backup acl,xattr,hardlinks,md5,lfa_flags: Loading. (line 283) * -for_backup acl,xattr,hardlinks,md5,lfa_flags: Loading. (line 287)
* -fs sets size of fifo: SetWrite. (line 500) * -fs sets size of fifo: SetWrite. (line 500)
* -getfacl shows ACL in ISO image: Navigate. (line 60) * -getfacl shows ACL in ISO image: Navigate. (line 60)
* -getfacl_r shows ACL in ISO image: Navigate. (line 66) * -getfacl_r shows ACL in ISO image: Navigate. (line 66)
@ -6013,21 +6021,21 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -help prints help text: Scripting. (line 19) * -help prints help text: Scripting. (line 19)
* -hfsplus enables production of HFS+ partition: SetWrite. (line 14) * -hfsplus enables production of HFS+ partition: SetWrite. (line 14)
* -hide excludes file names from directory trees: Manip. (line 204) * -hide excludes file names from directory trees: Manip. (line 204)
* -history brings text into readline history: Scripting. (line 42) * -history brings text into readline history: Scripting. (line 44)
* -indev acquires a drive for input: AqDrive. (line 23) * -indev acquires a drive for input: AqDrive. (line 23)
* -in_charset sets input character set: Loading. (line 136) * -in_charset sets input character set: Loading. (line 136)
* -iso_nowtime fixed "now" time for ISO 9660 objects: Loading. * -iso_nowtime fixed "now" time for ISO 9660 objects: Loading.
(line 328) (line 332)
* -iso_rr_pattern controls pattern expansion: Manip. (line 10) * -iso_rr_pattern controls pattern expansion: Manip. (line 10)
* -jigdo clears JTE or or adds parameter to JTE: Jigdo. (line 37) * -jigdo clears JTE or or adds parameter to JTE: Jigdo. (line 37)
* -joliet enables production of Joliet tree: SetWrite. (line 10) * -joliet enables production of Joliet tree: SetWrite. (line 10)
* -joliet_map Joliet names: Loading. (line 320) * -joliet_map Joliet names: Loading. (line 324)
* -launch_frontend starts frontend program at pipes: Frontend. * -launch_frontend starts frontend program at pipes: Frontend.
(line 141) (line 141)
* -lfa_flags controls handling of Linux file attributes: Loading. * -lfa_flags controls handling of Linux file attributes: Loading.
(line 207) (line 207)
* -list_arg_sorting prints sorting order of -x: ArgSort. (line 26) * -list_arg_sorting prints sorting order of -x: ArgSort. (line 26)
* -list_delimiter replaces '--': Scripting. (line 55) * -list_delimiter replaces '--': Scripting. (line 57)
* -list_extras lists compile time extra features: Scripting. (line 24) * -list_extras lists compile time extra features: Scripting. (line 24)
* -list_formats lists available formats: Writing. (line 128) * -list_formats lists available formats: Writing. (line 128)
* -list_profiles lists supported media: Writing. (line 163) * -list_profiles lists supported media: Writing. (line 163)
@ -6049,12 +6057,12 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -map_l inserts paths from disk file: Insert. (line 96) * -map_l inserts paths from disk file: Insert. (line 96)
* -map_single inserts path: Insert. (line 93) * -map_single inserts path: Insert. (line 93)
* -mark sets synchronizing message: Frontend. (line 23) * -mark sets synchronizing message: Frontend. (line 23)
* -md5 controls handling of MD5 sums: Loading. (line 252) * -md5 controls handling of MD5 sums: Loading. (line 256)
* -mkdir creates ISO directory: Insert. (line 188) * -mkdir creates ISO directory: Insert. (line 188)
* -modesty_on_drive keep drive buffer hungry: SetWrite. (line 440) * -modesty_on_drive keep drive buffer hungry: SetWrite. (line 440)
* -mount issues mount command for ISO session: Restore. (line 204) * -mount issues mount command for ISO session: Restore. (line 204)
* -mount_cmd composes mount command line: Inquiry. (line 95) * -mount_cmd composes mount command line: Inquiry. (line 95)
* -mount_cmd controls mount command: Inquiry. (line 111) * -mount_cmd controls mount command: Inquiry. (line 113)
* -msg_op perform operations on program messages: Frontend. (line 27) * -msg_op perform operations on program messages: Frontend. (line 27)
* -mv renames files in ISO image: Manip. (line 37) * -mv renames files in ISO image: Manip. (line 37)
* -mv renames single file in ISO image: Manip. (line 31) * -mv renames single file in ISO image: Manip. (line 31)
@ -6077,15 +6085,15 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -path_list inserts paths from disk file: Insert. (line 81) * -path_list inserts paths from disk file: Insert. (line 81)
* -pkt_output consolidates text output: Frontend. (line 7) * -pkt_output consolidates text output: Frontend. (line 7)
* -preparer_id sets preparer id: SetWrite. (line 282) * -preparer_id sets preparer id: SetWrite. (line 282)
* -print prints result text line: Scripting. (line 102) * -print prints result text line: Scripting. (line 104)
* -print_info prints message text line: Scripting. (line 104) * -print_info prints message text line: Scripting. (line 106)
* -print_mark prints synchronizing text line: Scripting. (line 106) * -print_mark prints synchronizing text line: Scripting. (line 108)
* -print_size predicts image size: Inquiry. (line 132) * -print_size predicts image size: Inquiry. (line 134)
* -prog sets program name: Frontend. (line 176) * -prog sets program name: Frontend. (line 176)
* -prog_help prints help text: Frontend. (line 178) * -prog_help prints help text: Frontend. (line 178)
* -prompt prompts for enter key: Scripting. (line 110) * -prompt prompts for enter key: Scripting. (line 112)
* -publisher sets publisher id: SetWrite. (line 213) * -publisher sets publisher id: SetWrite. (line 213)
* -pvd_info shows image id strings: Inquiry. (line 154) * -pvd_info shows image id strings: Inquiry. (line 156)
* -pwd tells working directory in ISO: Navigate. (line 19) * -pwd tells working directory in ISO: Navigate. (line 19)
* -pwdx tells working directory on disk: Navigate. (line 21) * -pwdx tells working directory on disk: Navigate. (line 21)
* -quoted_not_list sets exclusions: SetInsert. (line 74) * -quoted_not_list sets exclusions: SetInsert. (line 74)
@ -6096,8 +6104,8 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -read_speed set read speed: Loading. (line 11) * -read_speed set read speed: Loading. (line 11)
* -reassure enables confirmation question: DialogCtl. (line 29) * -reassure enables confirmation question: DialogCtl. (line 29)
* -report_about controls verbosity: Exception. (line 53) * -report_about controls verbosity: Exception. (line 53)
* -report_el_torito shows Boot Catalog: Inquiry. (line 164) * -report_el_torito shows Boot Catalog: Inquiry. (line 166)
* -report_system_area shows MBR, GPT, and alike: Inquiry. (line 199) * -report_system_area shows MBR, GPT, and alike: Inquiry. (line 201)
* -return_with controls exit value: Exception. (line 38) * -return_with controls exit value: Exception. (line 38)
* -rm deletes files from ISO image: Manip. (line 20) * -rm deletes files from ISO image: Manip. (line 20)
* -rmdir deletes ISO directory: Manip. (line 29) * -rmdir deletes ISO directory: Manip. (line 29)
@ -6105,14 +6113,14 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -rockridge disables production of Rock Ridge info: SetWrite. * -rockridge disables production of Rock Ridge info: SetWrite.
(line 57) (line 57)
* -rollback discards pending changes: Writing. (line 9) * -rollback discards pending changes: Writing. (line 9)
* -rollback_end ends program without writing: Scripting. (line 154) * -rollback_end ends program without writing: Scripting. (line 156)
* -rom_toc_scan searches for sessions: Loading. (line 386) * -rom_toc_scan searches for sessions: Loading. (line 390)
* -rr_reloc_dir sets name of relocation directory: SetWrite. (line 171) * -rr_reloc_dir sets name of relocation directory: SetWrite. (line 171)
* -scdbackup_tag enables scdbackup checksum tag: Emulation. (line 179) * -scdbackup_tag enables scdbackup checksum tag: Emulation. (line 179)
* -scsi_dev_family choose Linux device file type: AqDrive. (line 95) * -scsi_dev_family choose Linux device file type: AqDrive. (line 95)
* -scsi_log reports SCSI commands: Scripting. (line 143) * -scsi_log reports SCSI commands: Scripting. (line 145)
* -session_log logs written sessions: Scripting. (line 134) * -session_log logs written sessions: Scripting. (line 136)
* -session_string composes session info line: Inquiry. (line 120) * -session_string composes session info line: Inquiry. (line 122)
* -setfacl sets ACL in ISO image: Manip. (line 68) * -setfacl sets ACL in ISO image: Manip. (line 68)
* -setfacl_list sets ACL in ISO image: Manip. (line 94) * -setfacl_list sets ACL in ISO image: Manip. (line 94)
* -setfacl_r sets ACL in ISO image: Manip. (line 92) * -setfacl_r sets ACL in ISO image: Manip. (line 92)
@ -6124,19 +6132,19 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -show_stream shows data source and filters: Navigate. (line 159) * -show_stream shows data source and filters: Navigate. (line 159)
* -show_stream_r shows data source and filters: Navigate. (line 177) * -show_stream_r shows data source and filters: Navigate. (line 177)
* -sh_style_result makes results look more like shell: Scripting. * -sh_style_result makes results look more like shell: Scripting.
(line 61) (line 63)
* -signal_handling controls handling of system signals: Exception. * -signal_handling controls handling of system signals: Exception.
(line 66) (line 66)
* -sleep waits for a given time span: Scripting. (line 113) * -sleep waits for a given time span: Scripting. (line 115)
* -speed set write speed: SetWrite. (line 392) * -speed set write speed: SetWrite. (line 392)
* -split_size enables large file splitting: SetInsert. (line 154) * -split_size enables large file splitting: SetInsert. (line 154)
* -status shows current settings: Scripting. (line 44) * -status shows current settings: Scripting. (line 46)
* -status_history_max curbs -status history: Scripting. (line 52) * -status_history_max curbs -status history: Scripting. (line 54)
* -stdio_sync controls stdio buffer: SetWrite. (line 490) * -stdio_sync controls stdio buffer: SetWrite. (line 490)
* -stream_recording controls defect management: SetWrite. (line 410) * -stream_recording controls defect management: SetWrite. (line 410)
* -system_id sets system id: SetWrite. (line 226) * -system_id sets system id: SetWrite. (line 226)
* -tell_media_space reports free space: Inquiry. (line 144) * -tell_media_space reports free space: Inquiry. (line 146)
* -temp_mem_limit curbs memory consumption: Scripting. (line 96) * -temp_mem_limit curbs memory consumption: Scripting. (line 98)
* -toc shows list of sessions: Inquiry. (line 27) * -toc shows list of sessions: Inquiry. (line 27)
* -toc_info_type shows list of sessions: Inquiry. (line 49) * -toc_info_type shows list of sessions: Inquiry. (line 49)
* -toc_of shows list of sessions: Inquiry. (line 41) * -toc_of shows list of sessions: Inquiry. (line 41)
@ -6184,8 +6192,8 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* Appended partitions, MBR: Bootable. (line 480) * Appended partitions, MBR: Bootable. (line 480)
* Automatic execution order, of arguments, -x: ArgSort. (line 16) * Automatic execution order, of arguments, -x: ArgSort. (line 16)
* Backslash Interpretation, _definition: Processing. (line 57) * Backslash Interpretation, _definition: Processing. (line 57)
* Backup, enable fast incremental, -disk_dev_ino: Loading. (line 334) * Backup, enable fast incremental, -disk_dev_ino: Loading. (line 338)
* Backup, enable features, -for_backup: Loading. (line 283) * Backup, enable features, -for_backup: Loading. (line 287)
* Backup, scdbackup checksum tag, -scdbackup: Emulation. (line 179) * Backup, scdbackup checksum tag, -scdbackup: Emulation. (line 179)
* Blank media, _definition: Media. (line 34) * Blank media, _definition: Media. (line 34)
* Blank, format, Immed bit, -use_immed_bit: SetWrite. (line 478) * Blank, format, Immed bit, -use_immed_bit: SetWrite. (line 478)
@ -6201,7 +6209,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* Character Set, _definition: Charset. (line 6) * Character Set, _definition: Charset. (line 6)
* CHRP partition, _definition: Bootable. (line 333) * CHRP partition, _definition: Bootable. (line 333)
* Closed media, _definition: Media. (line 49) * Closed media, _definition: Media. (line 49)
* Comment, #: Scripting. (line 156) * Comment, #: Scripting. (line 158)
* Control, signal handling, -signal_handling: Exception. (line 66) * Control, signal handling, -signal_handling: Exception. (line 66)
* Create, new ISO image, _definition: Methods. (line 7) * Create, new ISO image, _definition: Methods. (line 7)
* Cylinder alignment, _definition: Bootable. (line 377) * Cylinder alignment, _definition: Bootable. (line 377)
@ -6212,7 +6220,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* Delete, from ISO image, -rm_r: Manip. (line 26) * Delete, from ISO image, -rm_r: Manip. (line 26)
* Delete, ISO directory, -rmdir: Manip. (line 29) * Delete, ISO directory, -rmdir: Manip. (line 29)
* Device file locking, -drive_access: AqDrive. (line 72) * Device file locking, -drive_access: AqDrive. (line 72)
* Dialog, bring text into history, -history: Scripting. (line 42) * Dialog, bring text into history, -history: Scripting. (line 44)
* Dialog, confirmation question, -reassure: DialogCtl. (line 29) * Dialog, confirmation question, -reassure: DialogCtl. (line 29)
* Dialog, enable dialog mode, -dialog: DialogCtl. (line 7) * Dialog, enable dialog mode, -dialog: DialogCtl. (line 7)
* Dialog, EOF resistant, -named_pipe_loop: Frontend. (line 119) * Dialog, EOF resistant, -named_pipe_loop: Frontend. (line 119)
@ -6224,8 +6232,8 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* Directory, delete, -rmdir: Manip. (line 29) * Directory, delete, -rmdir: Manip. (line 29)
* disk_path, _definition: Insert. (line 6) * disk_path, _definition: Insert. (line 6)
* Drive, accessability, -drive_class: AqDrive. (line 43) * Drive, accessability, -drive_class: AqDrive. (line 43)
* Drive, classify stdio, -early_stdio_test: Loading. (line 428) * Drive, classify stdio, -early_stdio_test: Loading. (line 432)
* Drive, demand real MMC, -ban_stdio_write: Loading. (line 424) * Drive, demand real MMC, -ban_stdio_write: Loading. (line 428)
* Drive, eject tray, -eject: Writing. (line 50) * Drive, eject tray, -eject: Writing. (line 50)
* Drive, for input and output, -dev: AqDrive. (line 12) * Drive, for input and output, -dev: AqDrive. (line 12)
* Drive, for input, -indev: AqDrive. (line 23) * Drive, for input, -indev: AqDrive. (line 23)
@ -6233,8 +6241,8 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* Drive, get drive list, -devices: Inquiry. (line 7) * Drive, get drive list, -devices: Inquiry. (line 7)
* Drive, get drive list, -device_links: Inquiry. (line 17) * Drive, get drive list, -device_links: Inquiry. (line 17)
* Drive, list supported media, -list_profiles: Writing. (line 163) * Drive, list supported media, -list_profiles: Writing. (line 163)
* Drive, reduce activity, -calm_drive: Loading. (line 414) * Drive, reduce activity, -calm_drive: Loading. (line 418)
* Drive, report SCSI commands, -scsi_log: Scripting. (line 143) * Drive, report SCSI commands, -scsi_log: Scripting. (line 145)
* Drive, write and eject, -commit_eject: Writing. (line 53) * Drive, write and eject, -commit_eject: Writing. (line 53)
* Drive, _definition: Drives. (line 6) * Drive, _definition: Drives. (line 6)
* EA, _definition: Extras. (line 66) * EA, _definition: Extras. (line 66)
@ -6249,9 +6257,9 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* Examples: Examples. (line 6) * Examples: Examples. (line 6)
* extattr, _definition: Extras. (line 66) * extattr, _definition: Extras. (line 66)
* File content, copy, -concat: Restore. (line 148) * File content, copy, -concat: Restore. (line 148)
* File names, curb length, -file_name_limit: Loading. (line 354) * File names, curb length, -file_name_limit: Loading. (line 358)
* File names, if Joliet is loaded: Loading. (line 320) * File names, if Joliet is loaded: Loading. (line 324)
* File names, if neither Rock Ridge nor Joliet: Loading. (line 307) * File names, if neither Rock Ridge nor Joliet: Loading. (line 311)
* Filesytem features, show, -assess_indev_features: Inquiry. (line 61) * Filesytem features, show, -assess_indev_features: Inquiry. (line 61)
* Filter, apply to file tree, -set_filter_r: Filter. (line 84) * Filter, apply to file tree, -set_filter_r: Filter. (line 84)
* Filter, apply to file, -set_filter: Filter. (line 58) * Filter, apply to file, -set_filter: Filter. (line 58)
@ -6277,7 +6285,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* HFS+ serial number: Bootable. (line 455) * HFS+ serial number: Bootable. (line 455)
* hidden, set in ISO image, -hide: Manip. (line 204) * hidden, set in ISO image, -hide: Manip. (line 204)
* HP-PA boot sector, production: Bootable. (line 430) * HP-PA boot sector, production: Bootable. (line 430)
* Image reading, cache size, -data_cache_size: Loading. (line 440) * Image reading, cache size, -data_cache_size: Loading. (line 444)
* Image, demand volume ID, -assert_volid: Loading. (line 129) * Image, demand volume ID, -assert_volid: Loading. (line 129)
* Image, discard pending changes, -rollback: Writing. (line 9) * Image, discard pending changes, -rollback: Writing. (line 9)
* Image, filesystem to load, -read_fs: Loading. (line 120) * Image, filesystem to load, -read_fs: Loading. (line 120)
@ -6294,9 +6302,9 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* Image, set volume id, -volid: SetWrite. (line 189) * Image, set volume id, -volid: SetWrite. (line 189)
* Image, set volume set id, -volset_id: SetWrite. (line 209) * Image, set volume set id, -volset_id: SetWrite. (line 209)
* Image, set volume timestamp, -volume_date: SetWrite. (line 232) * Image, set volume timestamp, -volume_date: SetWrite. (line 232)
* Image, show Boot Catalog: Inquiry. (line 164) * Image, show Boot Catalog: Inquiry. (line 166)
* Image, show id strings, -pvd_info: Inquiry. (line 154) * Image, show id strings, -pvd_info: Inquiry. (line 156)
* Image, show MBR, GPT, and alike, -pvd_info: Inquiry. (line 199) * Image, show MBR, GPT, and alike, -pvd_info: Inquiry. (line 201)
* Image, _definition: Model. (line 9) * Image, _definition: Model. (line 9)
* Input Character Set, _definition: Charset. (line 25) * Input Character Set, _definition: Charset. (line 25)
* Insert, enable overwriting, -overwrite: SetInsert. (line 140) * Insert, enable overwriting, -overwrite: SetInsert. (line 140)
@ -6329,7 +6337,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* Jigdo Template Extraction, -jigdo: Jigdo. (line 37) * Jigdo Template Extraction, -jigdo: Jigdo. (line 37)
* Jigdo Template Extraction, _definition: Jigdo. (line 6) * Jigdo Template Extraction, _definition: Jigdo. (line 6)
* LBA, _definition: Drives. (line 17) * LBA, _definition: Drives. (line 17)
* libisofs, fixed "now" time: Loading. (line 328) * libisofs, fixed "now" time: Loading. (line 332)
* Linux device type, -scsi_dev_family: AqDrive. (line 95) * Linux device type, -scsi_dev_family: AqDrive. (line 95)
* Linux file attributes, control handling, -lfa_flags: Loading. * Linux file attributes, control handling, -lfa_flags: Loading.
(line 207) (line 207)
@ -6343,7 +6351,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* MBR bootable/active flag, enforce: Bootable. (line 388) * MBR bootable/active flag, enforce: Bootable. (line 388)
* MBR, set, -boot_image system_area=: Bootable. (line 227) * MBR, set, -boot_image system_area=: Bootable. (line 227)
* MBR, _definition: Extras. (line 27) * MBR, _definition: Extras. (line 27)
* MD5, control handling, -md5: Loading. (line 252) * MD5, control handling, -md5: Loading. (line 256)
* Media, erase, -blank: Writing. (line 57) * Media, erase, -blank: Writing. (line 57)
* Media, format, -format: Writing. (line 87) * Media, format, -format: Writing. (line 87)
* Media, list formats, -list_formats: Writing. (line 128) * Media, list formats, -list_formats: Writing. (line 128)
@ -6391,31 +6399,31 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* Process, control exit value, -return_with: Exception. (line 38) * Process, control exit value, -return_with: Exception. (line 38)
* Process, control verbosity, -report_about: Exception. (line 53) * Process, control verbosity, -report_about: Exception. (line 53)
* Process, disable startup files, -no_rc: Scripting. (line 7) * Process, disable startup files, -no_rc: Scripting. (line 7)
* Process, end program and write, -end: Scripting. (line 151) * Process, end program and write, -end: Scripting. (line 153)
* Process, end program, no writing, -rollback_end: Scripting. (line 154) * Process, end program, no writing, -rollback_end: Scripting. (line 156)
* Process, error workarounds, -error_behavior: Exception. (line 92) * Process, error workarounds, -error_behavior: Exception. (line 92)
* Process, log output channels to file, -logfile: Frontend. (line 19) * Process, log output channels to file, -logfile: Frontend. (line 19)
* Process, read command file, -options_from_file: Scripting. (line 12) * Process, read command file, -options_from_file: Scripting. (line 12)
* Process, set synchronizing message, -mark: Frontend. (line 23) * Process, set synchronizing message, -mark: Frontend. (line 23)
* Program messages, perform operations, -msg_op: Frontend. (line 27) * Program messages, perform operations, -msg_op: Frontend. (line 27)
* Program, backslash conversion, -backslash_codes: Scripting. (line 71) * Program, backslash conversion, -backslash_codes: Scripting. (line 73)
* Program, curb memory, -temp_mem_limit: Scripting. (line 96) * Program, curb memory, -temp_mem_limit: Scripting. (line 98)
* Program, end and write, -end: Scripting. (line 151) * Program, end and write, -end: Scripting. (line 153)
* Program, end without writing, -rollback_end: Scripting. (line 154) * Program, end without writing, -rollback_end: Scripting. (line 156)
* Program, list extra features, -list_extras: Scripting. (line 24) * Program, list extra features, -list_extras: Scripting. (line 24)
* Program, print help text, -help: Scripting. (line 19) * Program, print help text, -help: Scripting. (line 19)
* Program, print help text, -prog_help: Frontend. (line 178) * Program, print help text, -prog_help: Frontend. (line 178)
* Program, print message text line, -print_info: Scripting. (line 104) * Program, print message text line, -print_info: Scripting. (line 106)
* Program, print result text line, -print: Scripting. (line 102) * Program, print result text line, -print: Scripting. (line 104)
* Program, print synchronizing text line, -print_mark: Scripting. * Program, print synchronizing text line, -print_mark: Scripting.
(line 106) (line 108)
* Program, print version, -version: Scripting. (line 22) * Program, print version, -version: Scripting. (line 22)
* Program, prompt for enter key, -prompt: Scripting. (line 110) * Program, prompt for enter key, -prompt: Scripting. (line 112)
* Program, replace --, -list_delimiter: Scripting. (line 55) * Program, replace --, -list_delimiter: Scripting. (line 57)
* Program, set name, -prog: Frontend. (line 176) * Program, set name, -prog: Frontend. (line 176)
* Program, show current settings, -status: Scripting. (line 44) * Program, show current settings, -status: Scripting. (line 46)
* Program, status history, -status_history_max: Scripting. (line 52) * Program, status history, -status_history_max: Scripting. (line 54)
* Program, wait a time span, -sleep: Scripting. (line 113) * Program, wait a time span, -sleep: Scripting. (line 115)
* Quoted input, _definition: Processing. (line 51) * Quoted input, _definition: Processing. (line 51)
* Read, set speed, -read_speed: Loading. (line 11) * Read, set speed, -read_speed: Loading. (line 11)
* Recovery, retrieve blocks, -check_media: Verify. (line 21) * Recovery, retrieve blocks, -check_media: Verify. (line 21)
@ -6435,14 +6443,14 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* Restore, copy files to disk, -extract_l: Restore. (line 104) * Restore, copy files to disk, -extract_l: Restore. (line 104)
* Restore, enable ISO-to-disk, -osirrox: Restore. (line 25) * Restore, enable ISO-to-disk, -osirrox: Restore. (line 25)
* Result layout, more shell-like, -sh_style_result: Scripting. * Result layout, more shell-like, -sh_style_result: Scripting.
(line 61) (line 63)
* Rock Ridge, _definition: Extras. (line 6) * Rock Ridge, _definition: Extras. (line 6)
* Session, altered start address, -displacement: Loading. (line 102) * Session, altered start address, -displacement: Loading. (line 102)
* Session, info string, -session_string: Inquiry. (line 120) * Session, info string, -session_string: Inquiry. (line 122)
* Session, issue mount command, -mount: Restore. (line 204) * Session, issue mount command, -mount: Restore. (line 204)
* Session, log when written, -session_log: Scripting. (line 134) * Session, log when written, -session_log: Scripting. (line 136)
* Session, mount command line, -mount_cmd: Inquiry. (line 95) * Session, mount command line, -mount_cmd: Inquiry. (line 95)
* Session, mount parameters, -mount_opts: Inquiry. (line 111) * Session, mount parameters, -mount_opts: Inquiry. (line 113)
* Session, select as input, -load: Loading. (line 54) * Session, select as input, -load: Loading. (line 54)
* Session, _definition: Model. (line 6) * Session, _definition: Model. (line 6)
* Sorting order, for -x, -list_arg_sorting: ArgSort. (line 26) * Sorting order, for -x, -list_arg_sorting: ArgSort. (line 26)
@ -6452,7 +6460,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* System area, _definition: Bootable. (line 227) * System area, _definition: Bootable. (line 227)
* Table-of-content, choose info to show, -toc_info_type: Inquiry. * Table-of-content, choose info to show, -toc_info_type: Inquiry.
(line 49) (line 49)
* Table-of-content, search sessions, -rom_toc_scan: Loading. (line 386) * Table-of-content, search sessions, -rom_toc_scan: Loading. (line 390)
* Table-of-content, show parts of, -toc_of: Inquiry. (line 41) * Table-of-content, show parts of, -toc_of: Inquiry. (line 41)
* Table-of-content, show, -toc: Inquiry. (line 27) * Table-of-content, show, -toc: Inquiry. (line 27)
* Timestamps, set in ISO image, -alter_date: Manip. (line 166) * Timestamps, set in ISO image, -alter_date: Manip. (line 166)
@ -6479,12 +6487,12 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* Write, enable HFS+, -hfsplus: SetWrite. (line 14) * Write, enable HFS+, -hfsplus: SetWrite. (line 14)
* Write, enable Joliet, -joliet: SetWrite. (line 10) * Write, enable Joliet, -joliet: SetWrite. (line 10)
* Write, fifo size, -fs: SetWrite. (line 500) * Write, fifo size, -fs: SetWrite. (line 500)
* Write, free space, -tell_media_space: Inquiry. (line 144) * Write, free space, -tell_media_space: Inquiry. (line 146)
* Write, log problematic disk files, -errfile_log: Scripting. (line 116) * Write, log problematic disk files, -errfile_log: Scripting. (line 118)
* Write, log written sessions, -session_log: Scripting. (line 134) * Write, log written sessions, -session_log: Scripting. (line 136)
* Write, padding image, -padding: SetWrite. (line 528) * Write, padding image, -padding: SetWrite. (line 528)
* Write, pending ISO image, -commit: Writing. (line 27) * Write, pending ISO image, -commit: Writing. (line 27)
* Write, predict image size, -print_size: Inquiry. (line 132) * Write, predict image size, -print_size: Inquiry. (line 134)
* Write, set speed, -speed: SetWrite. (line 392) * Write, set speed, -speed: SetWrite. (line 392)
* Write, simulation, -dummy: SetWrite. (line 497) * Write, simulation, -dummy: SetWrite. (line 497)
* Write, TAO or SAO/DAO, -write_type: SetWrite. (line 521) * Write, TAO or SAO/DAO, -write_type: SetWrite. (line 521)
@ -6512,48 +6520,48 @@ Node: Commands26634
Node: ArgSort28311 Node: ArgSort28311
Node: AqDrive29805 Node: AqDrive29805
Node: Loading36962 Node: Loading36962
Node: Insert63604 Node: Insert63843
Node: SetInsert75799 Node: SetInsert76038
Node: Manip85973 Node: Manip86212
Node: CmdFind97637 Node: CmdFind97876
Node: Filter118440 Node: Filter118679
Node: Writing123062 Node: Writing123301
Node: SetWrite135556 Node: SetWrite135795
Node: Bootable166831 Node: Bootable167070
Node: Jigdo198113 Node: Jigdo198352
Node: Charset203116 Node: Charset203355
Node: Exception206445 Node: Exception206684
Node: DialogCtl212574 Node: DialogCtl212813
Node: Inquiry215176 Node: Inquiry215415
Node: Navigate227709 Node: Navigate227980
Node: Verify236864 Node: Verify237135
Node: Restore248013 Node: Restore248284
Node: Emulation260220 Node: Emulation260491
Node: Scripting270676 Node: Scripting270947
Node: Frontend278459 Node: Frontend278841
Node: Examples288085 Node: Examples288467
Node: ExDevices289263 Node: ExDevices289645
Node: ExCreate289924 Node: ExCreate290306
Node: ExDialog291224 Node: ExDialog291606
Node: ExGrowing292495 Node: ExGrowing292877
Node: ExModifying293304 Node: ExModifying293686
Node: ExBootable293814 Node: ExBootable294196
Node: ExCharset294369 Node: ExCharset294751
Node: ExPseudo295265 Node: ExPseudo295647
Node: ExCdrecord296192 Node: ExCdrecord296574
Node: ExMkisofs296512 Node: ExMkisofs296894
Node: ExGrowisofs298409 Node: ExGrowisofs298791
Node: ExException299562 Node: ExException299944
Node: ExTime300020 Node: ExTime300402
Node: ExIncBackup300478 Node: ExIncBackup300860
Node: ExRestore304504 Node: ExRestore304886
Node: ExRecovery305450 Node: ExRecovery305832
Node: Files306022 Node: Files306404
Node: Environ307356 Node: Environ307738
Node: Seealso308104 Node: Seealso308486
Node: Bugreport308868 Node: Bugreport309250
Node: Legal309459 Node: Legal309841
Node: CommandIdx310471 Node: CommandIdx310853
Node: ConceptIdx328800 Node: ConceptIdx329182
 
End Tag Table End Tag Table

View File

@ -50,7 +50,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 "Version 1.5.7, Jul 23, 2024" @c man .TH XORRISO 1 "Version 1.5.7, Aug 05, 2024"
@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:
@ -1345,6 +1345,10 @@ changeable by the bearer of superuser capabilities. "no_restore_su" disables
restoring of these attributes. "restore_su_auto" enables it only if the restoring of these attributes. "restore_su_auto" enables it only if the
effective user id is 0. effective user id is 0.
@* @*
The attribute "i" (for "immutable") gets restored to directories only if they
have been created freshly by the same file restoring xorriso command.
A directory which already existed on disk will not be made immutable.
@*
Mode "restore_only_known" restricts restoring to the known settable attribute Mode "restore_only_known" restricts restoring to the known settable attribute
flags "aAcCdDFijmPsStTux". "restore_unknown" enables the attempt to restore flags "aAcCdDFijmPsStTux". "restore_unknown" enables the attempt to restore
unknown flags or even those which are known to be unchangeable, if they are unknown flags or even those which are known to be unchangeable, if they are
@ -5464,11 +5468,14 @@ drive can be "indev" or "outdev" to indicate already acquired drives,
or it can be the path of a not yet acquired drive. or it can be the path of a not yet acquired drive.
Prefix "stdio:" for non-MMC drives is not mandatory. Prefix "stdio:" for non-MMC drives is not mandatory.
@* @*
For entity and id, see also command -load. They must be either "sbsector" with See command @command{-load} for the meaning of entity and id.
the superblock sector address as id, @*
or "track" with a track number as id, or "session" with a session number, Entities are: "auto", "session", "track", "lba", "sbsector", "volid",
or "volid" with a search pattern for the volume id, or "auto" with which "at_time", "before", "not_after", "after", and "not_before".
any text as id mounts the first track of the last session. @*
Each is to be used with its appropriate kind of id string: "auto",
session number, track number, block number, search expression for volume id,
or time string.
@* @*
path will be used as mount point and must already exist as a directory on disk. path will be used as mount point and must already exist as a directory on disk.
@* @*
@ -6736,6 +6743,9 @@ Code "codes" lists them. They share names with related commands
@* @*
"xattr" tells whether xorriso has an adapter for local filesystems EA. "xattr" tells whether xorriso has an adapter for local filesystems EA.
@* @*
"lfa_flags" tells whether xorriso has an adapter for local Linux file
attributes (see man 1 chattr).
@*
"jigdo" tells whether production of Jigdo files is possible. "jigdo" tells whether production of Jigdo files is possible.
@* @*
"zisofs" tells whether zisofs and built-in gzip filters are enabled. "zisofs" tells whether zisofs and built-in gzip filters are enabled.

View File

@ -1 +1 @@
#define Xorriso_timestamP "2024.07.23.165442" #define Xorriso_timestamP "2024.08.06.193209"

View File

@ -710,6 +710,8 @@ int Xorriso_set_lfa_flags(struct XorrisO *xorriso, void *in_node, char *path,
int Xorriso_remove_all_lfa_flags(struct XorrisO *xorriso, int flag); int Xorriso_remove_all_lfa_flags(struct XorrisO *xorriso, int flag);
int Xorriso_set_local_chattr_i(struct XorrisO *xorriso, char *disk_path,
int flag);
#endif /* Xorrisoburn_includeD */ #endif /* Xorrisoburn_includeD */