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 @*/
PetscGetHomeDirectory(char dir[],size_t maxlen)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 @*/
PetscFixFilename(const char filein[],char fileout[])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