string cleanpath(char *str)
cleanpath() crea una cadena formada por una copia de la ruta que indica str, aunque con determinados elementos redundantes eliminados. En concreto, se eliminan los elementos "/./" de la ruta y se contraen los elementos "/../". Los elementos /../ de la ruta se contraen independientemente de los vínculos simbólicos. Por lo tanto, es posible que cleanpath() pueda utilizar una ruta válida y devolver una ruta no válida más corta.
Por ejemplo, si str es " /foo/../bar" y /foo es un vínculo simbólico a /net/foo/export, cleanpath() devolverá "/bar", aunque bar sólo puede estar en /net/foo y no en /. Esta limitación se debe al hecho de que la llamada a cleanpath() se realiza en el contexto de una activación del sondeo, en el que no se puede realizar la resolución completa de vínculos simbólicos ni utilizar nombres arbitrarios. La cadena devuelta se asigna fuera de la memoria temporal y, por lo tanto, sólo es válida durante la duración de la cláusula. Si no hay suficiente espacio temporal disponible, cleanpath no se ejecuta y se genera un error.