xref: /petsc/src/sys/fileio/rpath.c (revision 9371c9d470a9602b6d10a8bf50c9b2280a79e45a)
1 
2 #include <petscsys.h>
3 #if defined(PETSC_HAVE_PWD_H)
4 #include <pwd.h>
5 #endif
6 #include <ctype.h>
7 #include <sys/stat.h>
8 #if defined(PETSC_HAVE_UNISTD_H)
9 #include <unistd.h>
10 #endif
11 #if defined(PETSC_HAVE_SYS_UTSNAME_H)
12 #include <sys/utsname.h>
13 #endif
14 #if defined(PETSC_HAVE_SYS_SYSTEMINFO_H)
15 #include <sys/systeminfo.h>
16 #endif
17 
18 /*@C
19    PetscGetRelativePath - Given a filename, returns the relative path (removes
20    all directory specifiers).
21 
22    Not Collective
23 
24    Input parameters:
25 +  fullpath  - full pathname
26 .  path      - pointer to buffer to hold relative pathname
27 -  flen     - size of path
28 
29    Level: developer
30 
31 .seealso: `PetscGetFullPath()`
32 @*/
33 PetscErrorCode PetscGetRelativePath(const char fullpath[], char path[], size_t flen) {
34   char *p;
35 
36   PetscFunctionBegin;
37   /* Find string after last / or entire string if no / */
38   PetscCall(PetscStrrchr(fullpath, '/', &p));
39   PetscCall(PetscStrncpy(path, p, flen));
40   PetscFunctionReturn(0);
41 }
42