2: /* 3: Code for manipulating files. 4: */ 5: #include <petscsys.h> 7: /*@C 8: PetscGetHomeDirectory - Returns home directory name. 10: Not Collective 12: Input Parameter: 13: . maxlen - maximum lengh allowed 15: Output Parameter: 16: . dir - contains the home directory. Must be long enough to hold the name. 18: Level: developer 20: Note: 21: If PETSc cannot determine the home directory it makes dir a null string 23: On Windows machines the enviornmental variable HOME specifies the home directory. 25: Concepts: home directory 26: @*/ 27: PetscErrorCode PetscGetHomeDirectory(char dir[],size_t maxlen) 28: { 30: const char *d1; 33: d1 = getenv("HOME"); 34: if (d1) { 35: PetscStrncpy(dir,d1,maxlen); 36: } else if (maxlen > 0) dir[0] = 0; 37: return(0); 38: } 40: /*@C 41: PetscFixFilename - Fixes a file name so that it is correct for both Unix and 42: Windows by using the correct / or \ to separate directories. 44: Not Collective 46: Input Parameter: 47: . filein - name of file to be fixed 49: Output Parameter: 50: . fileout - the fixed name. Should long enough to hold the filename. 52: Level: advanced 54: Notes: 55: Call PetscFixFilename() just before calling fopen(). 56: @*/ 57: PetscErrorCode PetscFixFilename(const char filein[],char fileout[]) 58: { 60: size_t i,n; 63: if (!filein || !fileout) return(0); 65: PetscStrlen(filein,&n); 66: for (i=0; i<n; i++) { 67: if (filein[i] == PETSC_REPLACE_DIR_SEPARATOR) fileout[i] = PETSC_DIR_SEPARATOR; 68: else fileout[i] = filein[i]; 69: } 70: fileout[n] = 0; 71: return(0); 72: }