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