xref: /petsc/src/sys/fileio/rpath.c (revision e8e8640d1cb9a3a2f50c0c0d7b26e5c4d521e2e4)
1c6db04a5SJed Brown #include <petscsys.h>
2e5c89e4eSSatish Balay #if defined(PETSC_HAVE_PWD_H)
3e5c89e4eSSatish Balay   #include <pwd.h>
4e5c89e4eSSatish Balay #endif
5e5c89e4eSSatish Balay #include <ctype.h>
6e5c89e4eSSatish Balay #include <sys/stat.h>
7e5c89e4eSSatish Balay #if defined(PETSC_HAVE_UNISTD_H)
8e5c89e4eSSatish Balay   #include <unistd.h>
9e5c89e4eSSatish Balay #endif
10e5c89e4eSSatish Balay #if defined(PETSC_HAVE_SYS_UTSNAME_H)
11e5c89e4eSSatish Balay   #include <sys/utsname.h>
12e5c89e4eSSatish Balay #endif
13e5c89e4eSSatish Balay #if defined(PETSC_HAVE_SYS_SYSTEMINFO_H)
14e5c89e4eSSatish Balay   #include <sys/systeminfo.h>
15e5c89e4eSSatish Balay #endif
16e5c89e4eSSatish Balay 
17e5c89e4eSSatish Balay /*@C
18e5c89e4eSSatish Balay   PetscGetRelativePath - Given a filename, returns the relative path (removes
19e5c89e4eSSatish Balay   all directory specifiers).
20e5c89e4eSSatish Balay 
21bfbbc7b7SBarry Smith   Not Collective; No Fortran Support
22e5c89e4eSSatish Balay 
23*21532e8aSBarry Smith   Input Parameters:
24e5c89e4eSSatish Balay + fullpath - full pathname
25*21532e8aSBarry Smith - flen     - size of `path`
26*21532e8aSBarry Smith 
27*21532e8aSBarry Smith   Output Parameter:
28*21532e8aSBarry Smith . path - buffer that holds relative pathname
29e5c89e4eSSatish Balay 
30e5c89e4eSSatish Balay   Level: developer
31e5c89e4eSSatish Balay 
32db781477SPatrick Sanan .seealso: `PetscGetFullPath()`
33e5c89e4eSSatish Balay @*/
PetscGetRelativePath(const char fullpath[],char path[],size_t flen)34d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscGetRelativePath(const char fullpath[], char path[], size_t flen)
35d71ae5a4SJacob Faibussowitsch {
367864358aSSatish Balay   char *p = NULL;
37e5c89e4eSSatish Balay 
38e5c89e4eSSatish Balay   PetscFunctionBegin;
39e5c89e4eSSatish Balay   /* Find string after last / or entire string if no / */
409566063dSJacob Faibussowitsch   PetscCall(PetscStrrchr(fullpath, '/', &p));
419566063dSJacob Faibussowitsch   PetscCall(PetscStrncpy(path, p, flen));
423ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
43e5c89e4eSSatish Balay }
44