Actual source code: rpath.c

      1: #define PETSC_DLL

     3:  #include petsc.h
     4:  #include petscsys.h
      5: #if defined(PETSC_HAVE_PWD_H)
      6: #include <pwd.h>
      7: #endif
      8: #include <ctype.h>
      9: #include <sys/types.h>
     10: #include <sys/stat.h>
     11: #if defined(PETSC_HAVE_UNISTD_H)
     12: #include <unistd.h>
     13: #endif
     14: #if defined(PETSC_HAVE_STDLIB_H)
     15: #include <stdlib.h>
     16: #endif
     17: #if defined(PETSC_HAVE_SYS_UTSNAME_H)
     18: #include <sys/utsname.h>
     19: #endif
     20: #if defined(PETSC_HAVE_SYS_SYSTEMINFO_H)
     21: #include <sys/systeminfo.h>
     22: #endif
     23: #include "petscfix.h"

     27: /*@C
     28:    PetscGetRelativePath - Given a filename, returns the relative path (removes
     29:    all directory specifiers).

     31:    Not Collective

     33:    Input parameters:
     34: +  fullpath  - full pathname
     35: .  path      - pointer to buffer to hold relative pathname
     36: -  flen     - size of path

     38:    Level: developer

     40:    Concepts: relative path
     41:    Concepts: path^relative

     43: .seealso: PetscGetFullPath()
     44: @*/
     45: PetscErrorCode PETSC_DLLEXPORT PetscGetRelativePath(const char fullpath[],char path[],size_t flen)
     46: {
     47:   char           *p;

     51:   /* Find string after last / or entire string if no / */
     52:   PetscStrrchr(fullpath,'/',&p);
     53:   PetscStrncpy(path,p,flen);
     54:   return(0);
     55: }