1e5c89e4eSSatish Balay 2*c6db04a5SJed 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/types.h> 8e5c89e4eSSatish Balay #include <sys/stat.h> 9e5c89e4eSSatish Balay #if defined(PETSC_HAVE_UNISTD_H) 10e5c89e4eSSatish Balay #include <unistd.h> 11e5c89e4eSSatish Balay #endif 12e5c89e4eSSatish Balay #if defined(PETSC_HAVE_STDLIB_H) 13e5c89e4eSSatish Balay #include <stdlib.h> 14e5c89e4eSSatish Balay #endif 15e5c89e4eSSatish Balay #if defined(PETSC_HAVE_SYS_UTSNAME_H) 16e5c89e4eSSatish Balay #include <sys/utsname.h> 17e5c89e4eSSatish Balay #endif 18e5c89e4eSSatish Balay #if defined(PETSC_HAVE_SYS_SYSTEMINFO_H) 19e5c89e4eSSatish Balay #include <sys/systeminfo.h> 20e5c89e4eSSatish Balay #endif 21e5c89e4eSSatish Balay 22e5c89e4eSSatish Balay #undef __FUNCT__ 23e5c89e4eSSatish Balay #define __FUNCT__ "PetscGetRelativePath" 24e5c89e4eSSatish Balay /*@C 25e5c89e4eSSatish Balay PetscGetRelativePath - Given a filename, returns the relative path (removes 26e5c89e4eSSatish Balay all directory specifiers). 27e5c89e4eSSatish Balay 28e5c89e4eSSatish Balay Not Collective 29e5c89e4eSSatish Balay 30e5c89e4eSSatish Balay Input parameters: 31e5c89e4eSSatish Balay + fullpath - full pathname 32e5c89e4eSSatish Balay . path - pointer to buffer to hold relative pathname 33e5c89e4eSSatish Balay - flen - size of path 34e5c89e4eSSatish Balay 35e5c89e4eSSatish Balay Level: developer 36e5c89e4eSSatish Balay 37e5c89e4eSSatish Balay Concepts: relative path 38e5c89e4eSSatish Balay Concepts: path^relative 39e5c89e4eSSatish Balay 40e5c89e4eSSatish Balay .seealso: PetscGetFullPath() 41e5c89e4eSSatish Balay @*/ 427087cfbeSBarry Smith PetscErrorCode PetscGetRelativePath(const char fullpath[],char path[],size_t flen) 43e5c89e4eSSatish Balay { 44e5c89e4eSSatish Balay char *p; 45e5c89e4eSSatish Balay PetscErrorCode ierr; 46e5c89e4eSSatish Balay 47e5c89e4eSSatish Balay PetscFunctionBegin; 48e5c89e4eSSatish Balay /* Find string after last / or entire string if no / */ 49e5c89e4eSSatish Balay ierr = PetscStrrchr(fullpath,'/',&p);CHKERRQ(ierr); 50e5c89e4eSSatish Balay ierr = PetscStrncpy(path,p,flen);CHKERRQ(ierr); 51e5c89e4eSSatish Balay PetscFunctionReturn(0); 52e5c89e4eSSatish Balay } 53