New commands -lfa_flags, -lsattr, -lsattrd, -chattr, -chattr_r, -find test -has_lfa_flags, -find actions lsattrd, chattr

This commit is contained in:
2024-07-20 23:12:16 +02:00
parent dfd0a8cc81
commit 0802689b11
26 changed files with 1222 additions and 165 deletions

View File

@ -1808,6 +1808,63 @@ int Xorriso_option_charset(struct XorrisO *xorriso, char *name, int flag)
}
/* Commands -chattr alias -chattri and -chattr_r alias chattr_ri */
/* @param flag bit0=recursive -chattr_r
*/
int Xorriso_option_chattri(struct XorrisO *xorriso, char *chattr_text,
int argc, char **argv, int *idx, int flag)
{
int i, ret, was_failure= 0, end_idx, fret, operator;
int optc= 0;
uint64_t lfa_flags;
char **optv= NULL;
struct FindjoB *job= NULL;
struct stat dir_stbuf;
ret= Xorriso_opt_args(xorriso, "-chattr", argc, argv, *idx, &end_idx, &optc,
&optv, 0);
if(ret <= 0)
goto ex;
ret= Xorriso_decode_chattr_arg(xorriso, chattr_text, &lfa_flags, &operator,
0);
if(ret <= 0)
goto ex;
for(i= 0; i<optc; i++) {
if(flag&1) {
ret= Findjob_new(&job, optv[i], 0);
if(ret<=0) {
Xorriso_no_findjob(xorriso, "-chattr_r", 0);
{ret= -1; goto ex;}
}
Findjob_set_action_chattr(job, 61, lfa_flags, operator, 0);
ret= Xorriso_findi(xorriso, job, NULL, (off_t) 0,
NULL, optv[i], &dir_stbuf, 0, 0);
Findjob_destroy(&job, 0);
} else {
ret= Xorriso_set_lfa_flags(xorriso, NULL, optv[i], "",
lfa_flags, operator, 1);
}
if(ret>0 && !xorriso->request_to_abort)
continue; /* regular bottom of loop */
was_failure= 1;
fret= Xorriso_eval_problem_status(xorriso, ret, 1|2);
if(fret>=0)
continue;
ret= 0; goto ex;
}
ret= 1;
ex:;
(*idx)= end_idx;
Xorriso_opt_args(xorriso, "-chattr", argc, argv, *idx, &end_idx,
&optc, &optv, 256);
Findjob_destroy(&job, 0);
if(ret<=0)
return(ret);
return(!was_failure);
}
/* Options -check_md5 and -check_md5_r
@param flag bit0= issue summary message
bit1= do not reset pacifier, no final pacifier message