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