void CVmNetFile::mkdir(VMG_ int create_parents) { mkdir_local(vmg_ create_parents); }
static int copy_dir(disk_t *disk, const partition_t *partition, dir_data_t *dir_data, const file_data_t *dir) { static unsigned int dir_nbr=0; static unsigned long int inode_known[MAX_DIR_NBR]; file_data_t *dir_list; const unsigned int current_directory_namelength=strlen(dir_data->current_directory); file_data_t *current_file; char *dir_name; int copy_bad=0; int copy_ok=0; if(dir_data->get_dir==NULL || dir_data->copy_file==NULL) return -2; inode_known[dir_nbr++]=dir->st_ino; dir_name=mkdir_local(dir_data->local_dir, dir_data->current_directory); dir_list=dir_data->get_dir(disk, partition, dir_data, (const unsigned long int)dir->st_ino); for(current_file=dir_list;current_file!=NULL;current_file=current_file->next) { dir_data->current_directory[current_directory_namelength]='\0'; if(current_directory_namelength+1+strlen(current_file->name)<sizeof(dir_data->current_directory)-1) { if(strcmp(dir_data->current_directory,"/")) strcat(dir_data->current_directory,"/"); strcat(dir_data->current_directory,current_file->name); if(LINUX_S_ISDIR(current_file->st_mode)!=0) { const unsigned long int new_inode=current_file->st_ino; unsigned int new_inode_ok=1; unsigned int i; if(new_inode<2) new_inode_ok=0; if(strcmp(current_file->name,"..")==0 || strcmp(current_file->name,".")==0) new_inode_ok=0; for(i=0;i<dir_nbr && new_inode_ok!=0;i++) if(new_inode==inode_known[i]) /* Avoid loop */ new_inode_ok=0; if(new_inode_ok>0) { int tmp; tmp=copy_dir(disk, partition, dir_data, current_file); if(tmp>=-1) copy_ok=1; if(tmp<0) copy_bad=1; } } else if(LINUX_S_ISREG(current_file->st_mode)!=0) { // log_trace("copy_file %s\n",dir_data->current_directory); int tmp; tmp=dir_data->copy_file(disk, partition, dir_data, current_file); if(tmp==0) copy_ok=1; else copy_bad=1; } } } dir_data->current_directory[current_directory_namelength]='\0'; delete_list_file(dir_list); set_date(dir_name, dir->td_atime, dir->td_mtime); free(dir_name); dir_nbr--; return (copy_bad>0?(copy_ok>0?-1:-2):0); }