L'appel système Unix.lstat est coûteux, on évite donc de répéter plusieurs fois. Pour cela, on va maintenir pour chaque noeud une structure qui regroupe le chemin et l'information sur le noeud associé au chemin.
      
type info = { path : stringlstat : stats };;

let info path = { path = pathlstat = lstat path };;
Voici la fonction mon_getcwd, elle peut lever l'exception Not_found lorsqu'on ne réussit pas à trouver de chemin, ce qui peut se produire si l'arborescence a été modifiée en cours de calcul (par un autre programme s'exécutant en parallèle).
      
open Filename;;

let mon_getcwd() =
  let rec find_root node =
    let parent_node = info (concat parent_dir_name node.pathin
    if equal_node node.lstat parent_node.lstat then "/"
    else
      let found name =
        name <> current_dir_name && name <> parent_dir_name &&
        equal_node node.lstat (lstat (concat parent_node.path name)) in
      let name = dir_find found parent_node.path in
      concat (find_root parent_nodename in
  find_root (info current_dir_name);;
Noter qu'il est inutile de tester current_dir_name et parent_dir_name car on sait à coup sûr qu'ils ne peuvent pas convenir. On évite ainsi deux appels systèmes inutiles.