First code for -setfattr (have to fix some ACL problems before going on)
This commit is contained in:
parent
f4910bc02e
commit
2abedac499
@ -15654,6 +15654,83 @@ ex:;
|
||||
}
|
||||
|
||||
|
||||
/* Options -setfattr alias -setfattri, -setfattr_r alias -setfattr_ri */
|
||||
/* @param flag bit0=recursive -setfattr_r
|
||||
*/
|
||||
int Xorriso_option_setfattri(struct XorrisO *xorriso, char *name, char *value,
|
||||
int argc, char **argv, int *idx, int flag)
|
||||
{
|
||||
int i, ret, was_failure= 0, end_idx, fret, hflag;
|
||||
int optc= 0;
|
||||
size_t value_length, num_attrs= 1;
|
||||
char **optv= NULL, *name_pt;
|
||||
struct FindjoB *job= NULL;
|
||||
struct stat dir_stbuf;
|
||||
|
||||
ret= Xorriso_opt_args(xorriso, "-setfattr", argc, argv, *idx, &end_idx, &optc,
|
||||
&optv, 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, "-setfattr_r", 0);
|
||||
{ret= -1; goto ex;}
|
||||
}
|
||||
Findjob_set_action_text_2(job, 27, name, value, 0);
|
||||
ret= Xorriso_findi(xorriso, job, NULL, (off_t) 0,
|
||||
NULL, optv[i], &dir_stbuf, 0, 0);
|
||||
Findjob_destroy(&job, 0);
|
||||
} else {
|
||||
ret= 1;
|
||||
value_length= strlen(value);
|
||||
hflag= 2;
|
||||
name_pt= name;
|
||||
if(name[0] == 0) {
|
||||
sprintf(xorriso->info_text,
|
||||
"-setfattr: Empty attribute name is not allowed");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||
ret= 0; goto ex;
|
||||
} else if(strcmp(name, "--remove-all") == 0) {
|
||||
if(value[0]) {
|
||||
sprintf(xorriso->info_text,
|
||||
"-setfattr: Value is not empty with pseudo name --remove-all");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
num_attrs= 0;
|
||||
hflag= 0;
|
||||
} else if(name[0] == '-') {
|
||||
name_pt++;
|
||||
hflag|= 4;
|
||||
} else if(name[0] == '=' || name[0] == '+') {
|
||||
name_pt++;
|
||||
}
|
||||
ret= Xorriso_setfattr(xorriso, NULL, optv[i],
|
||||
num_attrs, &name_pt, &value_length, &value, hflag);
|
||||
}
|
||||
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, "-setfattr", argc, argv, *idx, &end_idx,
|
||||
&optc, &optv, 256);
|
||||
Findjob_destroy(&job, 0);
|
||||
if(ret<=0)
|
||||
return(ret);
|
||||
return(!was_failure);
|
||||
}
|
||||
|
||||
|
||||
/* Option -speed */
|
||||
int Xorriso_option_speed(struct XorrisO *xorriso, char *speed, int flag)
|
||||
{
|
||||
@ -16190,7 +16267,7 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv,
|
||||
"lsx","lslx","lsdx","lsdlx","map_l","mv","mvi","mkdir","mkdiri",
|
||||
"not_paths","rm","rmi","rm_r","rm_ri","rmdir","rmdiri","update_l",
|
||||
"setfacl","setfacli","setfacl_list","setfacl_listi",
|
||||
"setfacl_r","setfacl_ri",
|
||||
"setfacl_r","setfacl_ri","setfattr","setfattri","setfattr_r","setfattr_ri",
|
||||
""
|
||||
};
|
||||
|
||||
@ -16834,6 +16911,10 @@ next_command:;
|
||||
(*idx)+= 1;
|
||||
ret= Xorriso_option_setfacli(xorriso, arg1, argc, argv, idx, 1);
|
||||
|
||||
} else if(strcmp(cmd,"setfattr")==0 || strcmp(cmd,"setfattri")==0) {
|
||||
(*idx)+= 2;
|
||||
ret= Xorriso_option_setfattri(xorriso, arg1, arg2, argc, argv, idx, 0);
|
||||
|
||||
} else if(strcmp(cmd,"speed")==0) {
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_speed(xorriso, arg1, 0);
|
||||
|
@ -680,6 +680,12 @@ int Xorriso_option_setfacl_listi(struct XorrisO *xorriso, char *disk_path,
|
||||
int Xorriso_option_setfacli(struct XorrisO *xorriso, char *acl_text,
|
||||
int argc, char **argv, int *idx, int flag);
|
||||
|
||||
/* Options -setfattr alias -setfattri, -setfattr_r alias -setfattr_ri */
|
||||
/* @param flag bit0=recursive -setfattr_r
|
||||
*/
|
||||
int Xorriso_option_setfattri(struct XorrisO *xorriso, char *name, char *value,
|
||||
int argc, char **argv, int *idx, int flag);
|
||||
|
||||
/* Option -speed */
|
||||
int Xorriso_option_speed(struct XorrisO *xorriso, char *speed, int flag);
|
||||
|
||||
|
@ -1 +1 @@
|
||||
#define Xorriso_timestamP "2009.02.07.142605"
|
||||
#define Xorriso_timestamP "2009.02.08.132116"
|
||||
|
@ -416,6 +416,11 @@ int Xorriso_set_ignore_aclea(struct XorrisO *xorriso, int flag);
|
||||
int Xorriso_setfacl(struct XorrisO *xorriso, void *in_node, char *path,
|
||||
char *access_text, char *default_text, int flag);
|
||||
|
||||
int Xorriso_setfattr(struct XorrisO *xorriso, void *in_node, char *path,
|
||||
size_t num_attrs, char **names,
|
||||
size_t *value_lengths, char **values, int flag);
|
||||
|
||||
|
||||
/* A pseudo file type for El-Torito bootsectors as in man 2 stat :
|
||||
For now take the highest possible value.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user