www.mtkn.jp

Manuscripts for my personal webpage.
git clone https://git.mtkn.jp/www.mtkn.jp
Log | Files | Refs | LICENSE

commit e286e211777ba3b68856fbdba205be7ddc8d0968
parent 77357f43025a96259ed83e487c04493a46c920c0
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Sun, 24 Nov 2024 20:40:53 +0900

add walk

Diffstat:
Mman/draft/9p.html | 32++++++++++++++++++++++++++++++--
Mpub/draft/9p.html | 43+++++++++++++++++++++++++++++++++++++++++--
Mpub/rss.xml | 4++--
3 files changed, 73 insertions(+), 6 deletions(-)

diff --git a/man/draft/9p.html b/man/draft/9p.html @@ -825,7 +825,6 @@ Versionメッセージではメッセージの最大サイズも決定する。\ // flush cancels the request by calling r.cancel. // It also delete the request from its pool. func (r *request) flush() { - // TODO: need mutex? close(r.done) r.pool.delete(r.tag) } @@ -833,8 +832,37 @@ func (r *request) flush() { <h4>walk</h4> <p> - +仕様に書かれている通りの条件を確認した後、\ +ファイルツリーを順番に辿り、得られた<code>Qid</code>を\ +記録してクライアントに返す。\ </p> +<pre><code> wqids = make([]Qid, 0, len(ifcall.Wnames)) + cwdp = oldFid.path + for _, name := range ifcall.Wnames { + cwdp = path.Clean(path.Join(cwdp, name)) + if cwdp == &quot;..&quot; { + cwdp = &quot;.&quot; // parent of the root is itself. + } + stat, err := fs.Stat(ExportFS{oldFid.fs}, cwdp) + if err != nil { + break + } + wqids = append(wqids, stat.Sys().(*Stat).Qid) + } + if len(wqids) == 0 { + newFid.qidpath = oldFid.qidpath + } else { + newFid.qidpath = wqids[len(wqids)-1].Path + } + newFid.path = cwdp + newFid.uid = oldFid.uid + newFid.fs = oldFid.fs + r.ofcall = &amp;RWalk{ + Qids: wqids, + } + +</code></pre> + <h4>open</h4> <h4>create</h4> diff --git a/pub/draft/9p.html b/pub/draft/9p.html @@ -561,15 +561,54 @@ Versionメッセージではメッセージの最大サイズも決定する。 <h4>flush</h4> <p> -指定されたリクエストの<code>flush</code>メソッドを呼び出す。<code>flush</code>メソッドはリクエストの<code>done</code>チャンネルを閉じ、リクエストのタグを削除する。</p> +指定されたリクエストの<code>flush</code>メソッドを呼び出す。<code>flush</code>メソッドはリクエストの<code>done</code>チャンネルを閉じ、リクエストのタグを削除する。処理に時間のかかるものは、リクエストの<code>done</code>チャネルが閉じられたら、その処理を中止する。</p> <pre><code>// flush cancels the request by calling r.cancel. // It also delete the request from its pool. func (r *request) flush() { - // TODO: need mutex? close(r.done) r.pool.delete(r.tag) } </code></pre> + +<h4>walk</h4> +<p> +仕様に書かれている通りの条件を確認した後、ファイルツリーを順番に辿り、得られた<code>Qid</code>を記録してクライアントに返す。</p> +<pre><code> wqids = make([]Qid, 0, len(ifcall.Wnames)) + cwdp = oldFid.path + for _, name := range ifcall.Wnames { + cwdp = path.Clean(path.Join(cwdp, name)) + if cwdp == &quot;..&quot; { + cwdp = &quot;.&quot; // parent of the root is itself. + } + stat, err := fs.Stat(ExportFS{oldFid.fs}, cwdp) + if err != nil { + break + } + wqids = append(wqids, stat.Sys().(*Stat).Qid) + } + if len(wqids) == 0 { + newFid.qidpath = oldFid.qidpath + } else { + newFid.qidpath = wqids[len(wqids)-1].Path + } + newFid.path = cwdp + newFid.uid = oldFid.uid + newFid.fs = oldFid.fs + r.ofcall = &amp;RWalk{ + Qids: wqids, + } + +</code></pre> + + +<h4>open</h4> +<h4>create</h4> +<h4>read</h4> +<h4>write</h4> +<h4>clunk</h4> +<h4>remove</h4> +<h4>stat</h4> +<h4>wstat</h4> </article> </main> diff --git a/pub/rss.xml b/pub/rss.xml @@ -5,8 +5,8 @@ <description>ウェブページの更新履歴</description> <language>ja-jp</language> <link>https://www.mtkn.jp</link> -<lastBuildDate>Sun, 17 Nov 2024 12:15:43 +0900</lastBuildDate> -<pubDate>Sun, 17 Nov 2024 12:15:43 +0900</pubDate> +<lastBuildDate>Sun, 24 Nov 2024 20:40:07 +0900</lastBuildDate> +<pubDate>Sun, 24 Nov 2024 20:40:07 +0900</pubDate> <docs>https://www.rssboard.org/rss-specification</docs> <item> <title>麻婆豆腐</title>