xref: /petsc/src/sys/fileio/rpath.c (revision 7087cfbefd1a42b179f217f9994fb6cb0d0c1824)
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