1*97540f07SSatish Balay #include <petscsys.h> 2*97540f07SSatish Balay #include <direct.h> 3*97540f07SSatish Balay #include <io.h> 4*97540f07SSatish Balay #if defined (PETSC_HAVE_STDINT_H) 5*97540f07SSatish Balay #include <stdint.h> 6*97540f07SSatish Balay #endif 7*97540f07SSatish Balay 8*97540f07SSatish Balay #undef __FUNCT__ 9*97540f07SSatish Balay #define __FUNCT__ "PetscPathJoin" 10*97540f07SSatish Balay PetscErrorCode PetscPathJoin(const char dname[],const char fname[],size_t n,char fullname[]) 11*97540f07SSatish Balay { 12*97540f07SSatish Balay PetscErrorCode ierr; 13*97540f07SSatish Balay size_t l1,l2; 14*97540f07SSatish Balay PetscFunctionBegin; 15*97540f07SSatish Balay ierr = PetscStrlen(dname,&l1);CHKERRQ(ierr); 16*97540f07SSatish Balay ierr = PetscStrlen(fname,&l2);CHKERRQ(ierr); 17*97540f07SSatish Balay if ((l1+l2+2)>n) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_SIZ,"Path length is greater than buffer size"); 18*97540f07SSatish Balay ierr = PetscStrcpy(fullname,dname);CHKERRQ(ierr); 19*97540f07SSatish Balay ierr = PetscStrcat(fullname,"/");CHKERRQ(ierr); 20*97540f07SSatish Balay ierr = PetscStrcat(fullname,fname);CHKERRQ(ierr); 21*97540f07SSatish Balay PetscFunctionReturn(0); 22*97540f07SSatish Balay } 23*97540f07SSatish Balay 24*97540f07SSatish Balay #undef __FUNCT__ 25*97540f07SSatish Balay #define __FUNCT__ "PetscMkdir" 26*97540f07SSatish Balay PetscErrorCode PetscMkdir(const char dir[]) 27*97540f07SSatish Balay { 28*97540f07SSatish Balay PetscFunctionBegin; 29*97540f07SSatish Balay if(_mkdir(dir)) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_FILE_UNEXPECTED,"Could not create dir: %s",dir); 30*97540f07SSatish Balay PetscFunctionReturn(0); 31*97540f07SSatish Balay } 32*97540f07SSatish Balay 33*97540f07SSatish Balay #undef __FUNCT__ 34*97540f07SSatish Balay #define __FUNCT__ "PetscRMTree" 35*97540f07SSatish Balay PetscErrorCode PetscRMTree(const char dir[]) 36*97540f07SSatish Balay { 37*97540f07SSatish Balay PetscErrorCode ierr; 38*97540f07SSatish Balay struct _finddata_t data; 39*97540f07SSatish Balay char loc[PETSC_MAX_PATH_LEN]; 40*97540f07SSatish Balay PetscBool flg1, flg2; 41*97540f07SSatish Balay #if defined (PETSC_HAVE_STDINT_H) 42*97540f07SSatish Balay intptr_t handle; 43*97540f07SSatish Balay #else 44*97540f07SSatish Balay long handle; 45*97540f07SSatish Balay #endif 46*97540f07SSatish Balay 47*97540f07SSatish Balay PetscFunctionBegin; 48*97540f07SSatish Balay ierr = PetscPathJoin(dir,"*",PETSC_MAX_PATH_LEN,loc);CHKERRQ(ierr); 49*97540f07SSatish Balay handle = _findfirst(loc, &data); 50*97540f07SSatish Balay if(handle == -1) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_FILE_UNEXPECTED,"Could not read contents of path %s",dir); 51*97540f07SSatish Balay 52*97540f07SSatish Balay while(_findnext(handle, &data) != -1) { 53*97540f07SSatish Balay ierr = PetscStrcmp(data.name, ".",&flg1);CHKERRQ(ierr); 54*97540f07SSatish Balay ierr = PetscStrcmp(data.name, "..",&flg2);CHKERRQ(ierr); 55*97540f07SSatish Balay if (flg1 || flg2) continue; 56*97540f07SSatish Balay ierr = PetscPathJoin(dir,data.name,PETSC_MAX_PATH_LEN,loc);CHKERRQ(ierr); 57*97540f07SSatish Balay if(data.attrib & _A_SUBDIR) { 58*97540f07SSatish Balay ierr = PetscRMTree(loc);CHKERRQ(ierr); 59*97540f07SSatish Balay } else{ 60*97540f07SSatish Balay if (remove(loc)) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_FILE_UNEXPECTED,"Could not delete file: %s",loc); 61*97540f07SSatish Balay } 62*97540f07SSatish Balay } 63*97540f07SSatish Balay _findclose(handle); 64*97540f07SSatish Balay if (_rmdir(dir)) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_FILE_UNEXPECTED,"Could not delete dir: %s",dir); 65*97540f07SSatish Balay PetscFunctionReturn(0); 66*97540f07SSatish Balay } 67*97540f07SSatish Balay 68*97540f07SSatish Balay 69