xref: /petsc/src/sys/fileio/rpath.c (revision bfbbc7b7132e4b411f537ad2e2bd0dcaa87bca64)
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 
22*bfbbc7b7SBarry Smith    Not Collective; No Fortran Support
23e5c89e4eSSatish Balay 
24e5c89e4eSSatish Balay    Input parameters:
25e5c89e4eSSatish Balay +  fullpath  - full pathname
26e5c89e4eSSatish Balay .  path      - pointer to buffer to hold relative pathname
27e5c89e4eSSatish Balay -  flen     - size of path
28e5c89e4eSSatish Balay 
29e5c89e4eSSatish Balay    Level: developer
30e5c89e4eSSatish Balay 
31db781477SPatrick Sanan .seealso: `PetscGetFullPath()`
32e5c89e4eSSatish Balay @*/
33d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscGetRelativePath(const char fullpath[], char path[], size_t flen)
34d71ae5a4SJacob Faibussowitsch {
357864358aSSatish Balay   char *p = NULL;
36e5c89e4eSSatish Balay 
37e5c89e4eSSatish Balay   PetscFunctionBegin;
38e5c89e4eSSatish Balay   /* Find string after last / or entire string if no / */
399566063dSJacob Faibussowitsch   PetscCall(PetscStrrchr(fullpath, '/', &p));
409566063dSJacob Faibussowitsch   PetscCall(PetscStrncpy(path, p, flen));
413ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
42e5c89e4eSSatish Balay }
43