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