diff --git a/src/low_level.ml b/src/low_level.ml index 077c2ea..6fb7dc1 100644 --- a/src/low_level.ml +++ b/src/low_level.ml @@ -26,7 +26,7 @@ type Eio.Exn.Backend.t += Eio_mem of string (* Eio makes use of the empty string for paths so we can start with "no path". Fpath does not allow that. *) -let check_path p = if String.equal p "" then "." else p +let check_path p = if String.equal p "" then "." else Path.normalize p let () = let pp_eio_mem ppf = function diff --git a/test/fs.md b/test/fs.md index 6ba6ac8..46472db 100644 --- a/test/fs.md +++ b/test/fs.md @@ -290,3 +290,68 @@ Confined: - : unit = () ``` +# Stat + +```ocaml +# run ~clear:["stat_subdir"; "stat_reg"] @@ fun env -> + let cwd = Eio.Stdenv.cwd env in + Switch.run @@ fun sw -> + try_mkdir (cwd / "stat_subdir"); + assert (Eio.Path.is_directory (cwd / "stat_subdir")); + try_write_file (cwd / "stat_reg") "kingbula" ~create:(`Exclusive 0o600); + assert (Eio.Path.is_file (cwd / "stat_reg")); ++mkdir -> ok ++write -> ok +- : unit = () +``` + +# Fstatat: + +```ocaml +# run ~clear:["stat_subdir2"; "symlink"; "broken-symlink"; "parent-symlink"] @@ fun env -> + let cwd = Eio.Stdenv.cwd env in + Switch.run @@ fun sw -> + try_mkdir (cwd / "stat_subdir2"); + Path.symlink ~link_to:"stat_subdir2" (cwd / "symlink"); + Path.symlink ~link_to:"missing" (cwd / "broken-symlink"); + try_stat (cwd / "stat_subdir2"); + try_stat (cwd / "symlink"); + try_stat (cwd / "broken-symlink"); + try_stat cwd; + try_stat (cwd / ".."); + try_stat (cwd / "stat_subdir2/.."); + Path.symlink ~link_to:".." (cwd / "parent-symlink"); + try_stat (cwd / "parent-symlink"); + try_stat (cwd / "missing1" / "missing2"); ++mkdir -> ok ++ -> directory ++ -> symbolic link / directory ++ -> symbolic link / Fs Not_found _ ++ -> directory ++ -> Fs Permission_denied _ ++ -> directory ++ -> symbolic link / Fs Permission_denied _ ++ -> Fs Not_found _ +- : unit = () +``` + +# read_link + +```ocaml +# run ~clear:["file"; "symlink"] @@ fun env -> + let fs = Eio.Stdenv.fs env in + let cwd = Eio.Stdenv.cwd env in + Switch.run @@ fun sw -> + Path.symlink ~link_to:"file" (cwd / "symlink"); + try_read_link (cwd / "symlink"); + try_read_link (fs / "symlink"); + try_write_file (cwd / "file") "data" ~create:(`Exclusive 0o600); + try_read_link (cwd / "file"); + try_read_link (cwd / "../unknown"); ++read_link -> "file" ++read_link -> "file" ++write -> ok ++Eio.Io _, reading target of symlink ++Eio.Io Fs Permission_denied _, reading target of symlink +- : unit = () +```