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