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 18: /*@C 19: PetscGetRelativePath - Given a filename, returns the relative path (removes 20: all directory specifiers). 22: Not Collective; No Fortran Support 24: Input Parameters: 25: + fullpath - full pathname 26: - flen - size of `path` 28: Output Parameter: 29: . path - buffer that holds relative pathname 31: Level: developer 33: .seealso: `PetscGetFullPath()` 34: @*/ 35: PetscErrorCode PetscGetRelativePath(const char fullpath[], char path[], size_t flen) 36: { 37: char *p = NULL; 39: PetscFunctionBegin; 40: /* Find string after last / or entire string if no / */ 41: PetscCall(PetscStrrchr(fullpath, '/', &p)); 42: PetscCall(PetscStrncpy(path, p, flen)); 43: PetscFunctionReturn(PETSC_SUCCESS); 44: }