11. Path

The path(3m) module provides functions for some common path manipulations.

11.1. Path functions

The path_canon function

#include <mba/path.h> int path_canon(const unsigned char *src, const unsigned char *slim, unsigned char *dst, unsigned char *dlim, int srcsep, int dstsep);
The path_canon function canonicalizes the path at src up to but not including the memory at slim into the memory at dst up to but not including dlim. The character that separates path components in the src path is specified with the srcsep parameter whereas dstsep specifies the separator with which the dst path is constructed.

Specifically, canonicalization will eliminate '.' and '..' components in paths in the conventional way as well as normalize redundant separators. The presence or lack of an initial and/or trailing separator is preserved. The following lists some examples of paths before and after canonicalization:

  before      after
  /           /
  /.          /
  .../        .../
  a/b/c       a/b/c
  /a/b/c      /a/b/c 
  /./a/b/c    /a/b/c
  /../a/b/c   /a/b/c
  ..a/b/c     ..a/b/c
  a/b/c/      a/b/c/
  a/b/c/..    a/b/
  a/b/c/../   a/b/
  a/b/c/./    a/b/c/
The path_canon function returns the number of bytes written to dst not including the zero terminator or -1 if slim or dlim has been reached in which case errno is set to ERANGE.

Copyright 2003 Michael B. Allen <mba2000 ioplex.com>