Actual source code: rpath.c


  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

 18: /*@C
 19:    PetscGetRelativePath - Given a filename, returns the relative path (removes
 20:    all directory specifiers).

 22:    Not Collective; No Fortran Support

 24:    Input Parameters:
 25: +  fullpath  - full pathname
 26: -  flen     - size of `path`

 28:   Output Parameter:
 29: .  path      - buffer that holds relative pathname

 31:    Level: developer

 33: .seealso: `PetscGetFullPath()`
 34: @*/
 35: PetscErrorCode PetscGetRelativePath(const char fullpath[], char path[], size_t flen)
 36: {
 37:   char *p = NULL;

 39:   PetscFunctionBegin;
 40:   /* Find string after last / or entire string if no / */
 41:   PetscCall(PetscStrrchr(fullpath, '/', &p));
 42:   PetscCall(PetscStrncpy(path, p, flen));
 43:   PetscFunctionReturn(PETSC_SUCCESS);
 44: }