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