From 03d53e064e4e923ca67a34cd1725cc92d61efc48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Niemier?= <~@hauleth.dev> Date: Wed, 21 Jan 2026 11:28:03 +0100 Subject: [PATCH] Conform to 9p specs when walking through directories First step must always succeed, otherwise return error. Subsequent steps can end without failure. --- src/e9p_fs.erl | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/e9p_fs.erl b/src/e9p_fs.erl index 1dfcc73..a3a11a9 100644 --- a/src/e9p_fs.erl +++ b/src/e9p_fs.erl @@ -8,7 +8,7 @@ -export([ init/1, - root/2, + root/3, walk/3, open/3, create/5, @@ -121,6 +121,11 @@ do_walk(_Mod, QID, [], State, Acc) -> {ok, {QID, lists:reverse(Acc)}, State}; do_walk(Mod, QID0, [P | Rest], State0, Acc) -> case Mod:walk(QID0, P, State0) of + {false, State} when Acc =:= [] -> + % Per specification walk to first entry in name list must succeed + % (if any) otherwise return error. In subsequent steps we return + % successful list and last succeeded QID + {error, io_lib:format("Failed walk to ~p", [P]), State}; {false, State} -> {ok, {QID0, lists:reverse(Acc)}, State}; {QID, State} -> -- 2.51.2