/*@C PetscGetRelativePath - Given a filename, returns the relative path (removes all directory specifiers). Not Collective Input parameters: + fullpath - full pathname . path - pointer to buffer to hold relative pathname - flen - size of path Level: developer Concepts: relative path Concepts: path^relative .seealso: PetscGetFullPath() @*/ PetscErrorCode PetscGetRelativePath(const char fullpath[],char path[],size_t flen) { char *p; PetscErrorCode ierr; PetscFunctionBegin; /* Find string after last / or entire string if no / */ ierr = PetscStrrchr(fullpath,'/',&p);CHKERRQ(ierr); ierr = PetscStrncpy(path,p,flen);CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode private_CreateDataFileNameXDMF(const char filename[],char dfilename[]) { char *ext; PetscBool flg; PetscErrorCode ierr; PetscFunctionBegin; ierr = PetscStrrchr(filename,'.',&ext);CHKERRQ(ierr); ierr = PetscStrcmp("xmf",ext,&flg);CHKERRQ(ierr); if (flg) { size_t len; char viewername_minus_ext[PETSC_MAX_PATH_LEN]; ierr = PetscStrlen(filename,&len);CHKERRQ(ierr); ierr = PetscStrncpy(viewername_minus_ext,filename,len-2);CHKERRQ(ierr); ierr = PetscSNPrintf(dfilename,PETSC_MAX_PATH_LEN-1,"%s_swarm_fields.pbin",viewername_minus_ext);CHKERRQ(ierr); } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"File extension must by .xmf"); PetscFunctionReturn(0); }