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