void del_all_items(char *dir,int index) { struct dirent* ent = NULL; DIR *pDir; pDir=opendir(dir); if(pDir != NULL ) { while (NULL != (ent=readdir(pDir))) { if(!strcmp(ent->d_name,".") || !strcmp(ent->d_name,"..")) continue; char *fullname; size_t len; len = strlen(dir)+strlen(ent->d_name)+2; fullname = my_malloc(len); sprintf(fullname,"%s/%s",dir,ent->d_name); if(test_if_dir(fullname) == 1) { wait_handle_socket(index); del_all_items(fullname,index); } else { wait_handle_socket(index); add_action_item("remove",fullname,g_pSyncList[index]->server_action_list); remove(fullname); } free(fullname); } closedir(pDir); add_action_item("remove",dir,g_pSyncList[index]->server_action_list); remove(dir); } else DEBUG("open %s fail \n",dir); }
int initMyLocalFolder(Server_TreeNode *servertreenode,int index) { int res=0; if(servertreenode->browse != NULL) { CloudFile *init_folder=NULL,*init_file=NULL; if(servertreenode->browse->foldernumber > 0) init_folder=servertreenode->browse->folderlist->next; if(servertreenode->browse->filenumber > 0) init_file=servertreenode->browse->filelist->next; int ret; while(init_folder != NULL && !exit_loop) { char *createpath; createpath = serverpath_to_localpath(init_folder->href,index); if(NULL == opendir(createpath)) { if(wait_handle_socket(index)) { return HAVE_LOCAL_SOCKET; } if(-1 == mkdir(createpath,0777)) { wd_DEBUG("mkdir %s fail",createpath); return -1; } else { add_action_item("createfolder",createpath,g_pSyncList[index]->server_action_list); } } free(createpath); init_folder = init_folder->next; } while(init_file != NULL && !exit_loop) { if(is_local_space_enough(init_file,index)) { char *createpath; createpath = serverpath_to_localpath(init_file->href,index); add_action_item("createfile",createpath,g_pSyncList[index]->server_action_list); ret=api_download(createpath,init_file->href,index); if(ret == 0) { ChangeFile_modtime(createpath,init_file->mtime); } else return ret; free(createpath); } else { write_log(S_ERROR,"local space is not enough!","",index); add_action_item("download",init_file->href,g_pSyncList[index]->unfinished_list); } init_file = init_file->next; } } if(servertreenode->Child != NULL && !exit_loop) { res = initMyLocalFolder(servertreenode->Child,index); if(res != 0) { return res; } } if(servertreenode->NextBrother != NULL && !exit_loop) { res = initMyLocalFolder(servertreenode->NextBrother,index); if(res != 0) { return res; } } return res; }