Implemented -disk_pattern, -lsx, ls_lx, -dux, -du_lx
This commit is contained in:
@ -101,20 +101,6 @@ int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag)
|
||||
}
|
||||
|
||||
|
||||
/* @param flag bit0=path is in source filesystem , bit1= unconditionally */
|
||||
int Xorriso_much_too_long(struct XorrisO *xorriso, int len, int flag)
|
||||
{
|
||||
if(len>=SfileadrL || (flag&2)) {
|
||||
sprintf(xorriso->info_text,
|
||||
"Path given for %s is much too long (%d)",
|
||||
((flag&1) ? "local filesystem" : "ISO image"), len);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||
return(0);
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/* @param flag bit1= obtain outdrive, else indrive */
|
||||
int Xorriso_get_drive_handles(struct XorrisO *xorriso,
|
||||
struct burn_drive_info **dinfo,
|
||||
@ -852,6 +838,7 @@ int Xorriso_add_tree(struct XorrisO *xorriso, struct iso_tree_node_dir *dir,
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||
ret=0; goto was_problem;
|
||||
}
|
||||
xorriso->volset_change_pending= 1;
|
||||
/* name always equal to disk. Obsolete: iso_tree_node_set_name(node,name);*/
|
||||
if(source_is_dir) {
|
||||
ret= Xorriso_add_tree(xorriso, (struct iso_tree_node_dir *) node,
|
||||
@ -891,8 +878,10 @@ int Xorriso_graft_in(struct XorrisO *xorriso, char *disk_path, char *img_path,
|
||||
struct stat stbuf;
|
||||
|
||||
for(cpt= img_path; 1; cpt++) {
|
||||
/*
|
||||
if(cpt[0]!='/')
|
||||
break;
|
||||
*/
|
||||
cpt= strstr(cpt,"/.");
|
||||
if(cpt==NULL)
|
||||
break;
|
||||
@ -943,6 +932,7 @@ int Xorriso_graft_in(struct XorrisO *xorriso, char *disk_path, char *img_path,
|
||||
"Source '%s' is not a directory. Target '%s' would be.",
|
||||
disk_path, img_path);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1011,6 +1001,7 @@ handle_path_node:;
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||
return(0);
|
||||
}
|
||||
xorriso->volset_change_pending= 1;
|
||||
iso_tree_node_set_ctime((struct iso_tree_node *) dir, time(NULL));
|
||||
|
||||
/* >>> copy properties from correspondent directory in disk_path
|
||||
@ -1048,13 +1039,13 @@ attach_source:;
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||
return(0);
|
||||
}
|
||||
xorriso->volset_change_pending= 1;
|
||||
iso_tree_node_set_name(node, apt);
|
||||
}
|
||||
} else
|
||||
*npt= '/';
|
||||
}
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
xorriso->volset_change_pending= 1;
|
||||
return(1+!!is_dir);
|
||||
}
|
||||
|
||||
@ -1720,26 +1711,15 @@ int Xorriso_sorted_node_array(struct XorrisO *xorriso,
|
||||
off_t boss_mem, int flag)
|
||||
{
|
||||
int i, ret, failed_at;
|
||||
char *npt, mem_text[80], limit_text[80];
|
||||
char *npt;
|
||||
struct iso_tree_iter *iter= NULL;
|
||||
struct iso_tree_node *node;
|
||||
off_t mem;
|
||||
|
||||
mem= ((*nodec)+1)*sizeof(struct iso_tree_node *);
|
||||
Sfile_scale((double) mem, mem_text,5,1e4,0);
|
||||
if(!(flag&2)) {
|
||||
sprintf(xorriso->info_text,
|
||||
"Temporary memory needed for result sorting : %s", mem_text);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0);
|
||||
}
|
||||
if(mem > xorriso->temp_mem_limit - boss_mem) {
|
||||
Sfile_scale((double) xorriso->temp_mem_limit - boss_mem,limit_text,5,1e4,1);
|
||||
sprintf(xorriso->info_text,
|
||||
"Cannot sort. List of matching files exceeds -temp_mem_limit (%s > %s)",
|
||||
mem_text, limit_text);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0);
|
||||
return(0);
|
||||
}
|
||||
ret= Xorriso_check_temp_mem_limit(xorriso, mem+boss_mem, flag&2);
|
||||
if(ret<=0)
|
||||
return(ret);
|
||||
|
||||
*node_array= calloc(sizeof(struct iso_tree_node *), (*nodec)+1);
|
||||
if(*node_array==NULL) {
|
||||
@ -1839,7 +1819,7 @@ much_too_long:;
|
||||
iter= iso_tree_node_children(dir_node);
|
||||
}
|
||||
|
||||
for(i= 0; i<filec && !(xorriso->request_to_abort); i++) {
|
||||
for(i= 0; (no_sort || i<filec) && !(xorriso->request_to_abort); i++) {
|
||||
if(no_sort) {
|
||||
node= iso_tree_iter_next(iter);
|
||||
if(node==NULL)
|
||||
@ -1880,40 +1860,6 @@ ex:;
|
||||
}
|
||||
|
||||
|
||||
int Xorriso__mode_to_perms(mode_t st_mode, char perms[10], int flag)
|
||||
{
|
||||
strcpy(perms,"---------");
|
||||
if(st_mode&S_IRUSR) perms[0]= 'r';
|
||||
if(st_mode&S_IWUSR) perms[1]= 'w';
|
||||
if(st_mode&S_IXUSR) perms[2]= 'x';
|
||||
if(st_mode&S_ISUID) {
|
||||
if(st_mode&S_IXUSR)
|
||||
perms[2]= 's';
|
||||
else
|
||||
perms[2]= 'S';
|
||||
}
|
||||
if(st_mode&S_IRGRP) perms[3]= 'r';
|
||||
if(st_mode&S_IWGRP) perms[4]= 'w';
|
||||
if(st_mode&S_IXGRP) perms[5]= 'x';
|
||||
if(st_mode&S_ISGID) {
|
||||
if(st_mode&S_IXGRP)
|
||||
perms[5]= 's';
|
||||
else
|
||||
perms[5]= 'S';
|
||||
}
|
||||
if(st_mode&S_IROTH) perms[6]= 'r';
|
||||
if(st_mode&S_IWOTH) perms[7]= 'w';
|
||||
if(st_mode&S_IXOTH) perms[8]= 'x';
|
||||
if(st_mode&S_ISVTX) {
|
||||
if(st_mode&S_IXOTH)
|
||||
perms[8]= 't';
|
||||
else
|
||||
perms[8]= 'T';
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/* @param flag bit0= long format
|
||||
bit1= do not print count of nodes
|
||||
bit2= du format
|
||||
@ -2004,7 +1950,7 @@ much_too_long:;
|
||||
|
||||
/* >>> With directories this should be : number of subdirs + 2 */
|
||||
/* >>> ??? How to obtain RR hardlink number for other types ? */
|
||||
strcat(rpt," 1 ");
|
||||
strcat(rpt," 1 ");
|
||||
|
||||
sprintf(rpt+strlen(rpt), "%-8lu ",
|
||||
(unsigned long) iso_tree_node_get_uid(node));
|
||||
@ -2337,13 +2283,13 @@ int Xorriso_mkdir(struct XorrisO *xorriso, char *path, int flag)
|
||||
|
||||
/* @param flag bit0= count results rather than storing them
|
||||
bit1= this is a recursion
|
||||
bit2= prepend /
|
||||
bit2= prepend wd (automatically done if wd[0]!=0)
|
||||
*/
|
||||
int Xorriso_obtain_pattern_files(
|
||||
struct XorrisO *xorriso, char *wd, struct iso_tree_node_dir *dir,
|
||||
int *filec, char **filev, int count_limit, off_t *mem, int flag)
|
||||
{
|
||||
int i, ret, failed_at, l;
|
||||
int ret, failed_at, l;
|
||||
struct iso_tree_iter *iter= NULL;
|
||||
struct iso_tree_node *node;
|
||||
char adr[SfileadrL], *name;
|
||||
@ -2370,7 +2316,7 @@ int Xorriso_obtain_pattern_files(
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
|
||||
return(-1);
|
||||
}
|
||||
for(i= 0; (node= iso_tree_iter_next(iter)) != NULL; ) {
|
||||
while((node= iso_tree_iter_next(iter)) != NULL) {
|
||||
name= (char *) iso_tree_node_get_name(node);
|
||||
if(wd[0]!=0 || (flag&4)) {
|
||||
if(strlen(wd)+1>=SfileadrL)
|
||||
@ -2465,21 +2411,11 @@ int Xorriso_expand_pattern(struct XorrisO *xorriso,
|
||||
}
|
||||
|
||||
for(i= 0; i<num_patterns; i++) {
|
||||
|
||||
ret= Xorriso_prepare_regex(xorriso, patterns[i], 1|2);
|
||||
if(ret==2) {
|
||||
ret= Xorriso_prepare_regex(xorriso, patterns[i], 0);
|
||||
ret= Xorriso_prepare_expansion_pattern(xorriso, patterns[i], 0);
|
||||
if(ret<=0)
|
||||
return(ret);
|
||||
if(ret==2)
|
||||
abs_adr= 4;
|
||||
}
|
||||
if(ret<=0) {
|
||||
cannot_compile:;
|
||||
sprintf(xorriso->info_text,
|
||||
"Cannot compile pattern to regular expression: %s", patterns[i]);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
if(patterns[i][0]=='/' || abs_adr) {
|
||||
dir= root_dir;
|
||||
abs_adr= 4;
|
||||
@ -2578,13 +2514,12 @@ no_memory:;
|
||||
|
||||
/* now store addresses */
|
||||
for(i= 0; i<num_patterns; i++) {
|
||||
ret= Xorriso_prepare_regex(xorriso, patterns[i], 1|2);
|
||||
if(ret==2) {
|
||||
ret= Xorriso_prepare_regex(xorriso, patterns[i], 0);
|
||||
ret= Xorriso_prepare_expansion_pattern(xorriso, patterns[i], 0);
|
||||
if(ret<=0)
|
||||
return(ret);
|
||||
if(ret==2)
|
||||
abs_adr= 4;
|
||||
}
|
||||
if(ret<=0)
|
||||
goto cannot_compile;
|
||||
|
||||
was_filec= *filec;
|
||||
ret= Xorriso_obtain_pattern_files(xorriso, "", dir, filec, *filev, count,
|
||||
mem, abs_adr);
|
||||
|
Reference in New Issue
Block a user