1e5c89e4eSSatish Balay /* 2e5c89e4eSSatish Balay Code for manipulating files. 3e5c89e4eSSatish Balay */ 4c6db04a5SJed Brown #include <petscsys.h> 5e5c89e4eSSatish Balay 6e5c89e4eSSatish Balay /*@C 721532e8aSBarry Smith PetscGetHomeDirectory - Returns the name of the user's home directory 8e5c89e4eSSatish Balay 9e5c89e4eSSatish Balay Not Collective 10e5c89e4eSSatish Balay 11e5c89e4eSSatish Balay Input Parameter: 12da81f932SPierre Jolivet . maxlen - maximum length allowed 13e5c89e4eSSatish Balay 14e5c89e4eSSatish Balay Output Parameter: 15e5c89e4eSSatish Balay . dir - contains the home directory. Must be long enough to hold the name. 16e5c89e4eSSatish Balay 17e5c89e4eSSatish Balay Level: developer 18e5c89e4eSSatish Balay 19811af0c4SBarry Smith Notes: 20bfbbc7b7SBarry Smith If PETSc cannot determine the home directory it makes `dir` an empty string 21e5c89e4eSSatish Balay 22bfbbc7b7SBarry Smith On Microsoft Windows machines the environmental variable `HOME` specifies the home directory. 23e5c89e4eSSatish Balay 24811af0c4SBarry Smith .seealso: `PetscGetTmp()`, `PetscSharedTmp()`, `PetscGetWorkingDirectory()` 25e5c89e4eSSatish Balay @*/ 26d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscGetHomeDirectory(char dir[], size_t maxlen) 27d71ae5a4SJacob Faibussowitsch { 2845082d64SJed Brown const char *d1; 29e5c89e4eSSatish Balay 30e5c89e4eSSatish Balay PetscFunctionBegin; 31e5c89e4eSSatish Balay d1 = getenv("HOME"); 32*ac530a7eSPierre Jolivet if (d1) PetscCall(PetscStrncpy(dir, d1, maxlen)); 33*ac530a7eSPierre Jolivet else if (maxlen > 0) dir[0] = 0; 343ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 35e5c89e4eSSatish Balay } 36e5c89e4eSSatish Balay 37e5c89e4eSSatish Balay /*@C 38e5c89e4eSSatish Balay PetscFixFilename - Fixes a file name so that it is correct for both Unix and 39bfbbc7b7SBarry Smith Microsoft Windows by using the correct / or \ to separate directories. 40e5c89e4eSSatish Balay 41e5c89e4eSSatish Balay Not Collective 42e5c89e4eSSatish Balay 43e5c89e4eSSatish Balay Input Parameter: 44e5c89e4eSSatish Balay . filein - name of file to be fixed 45e5c89e4eSSatish Balay 46e5c89e4eSSatish Balay Output Parameter: 47e5c89e4eSSatish Balay . fileout - the fixed name. Should long enough to hold the filename. 48e5c89e4eSSatish Balay 4921532e8aSBarry Smith Level: developer 50e5c89e4eSSatish Balay 5110450e9eSJacob Faibussowitsch .seealso: `PetscFOpen()` 52e5c89e4eSSatish Balay @*/ 53d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscFixFilename(const char filein[], char fileout[]) 54d71ae5a4SJacob Faibussowitsch { 55e5c89e4eSSatish Balay size_t i, n; 56e5c89e4eSSatish Balay 57e5c89e4eSSatish Balay PetscFunctionBegin; 583ba16761SJacob Faibussowitsch if (!filein || !fileout) PetscFunctionReturn(PETSC_SUCCESS); 59e5c89e4eSSatish Balay 609566063dSJacob Faibussowitsch PetscCall(PetscStrlen(filein, &n)); 61e5c89e4eSSatish Balay for (i = 0; i < n; i++) { 62e5c89e4eSSatish Balay if (filein[i] == PETSC_REPLACE_DIR_SEPARATOR) fileout[i] = PETSC_DIR_SEPARATOR; 63e5c89e4eSSatish Balay else fileout[i] = filein[i]; 64e5c89e4eSSatish Balay } 65e5c89e4eSSatish Balay fileout[n] = 0; 663ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 67e5c89e4eSSatish Balay } 68