commit e286e211777ba3b68856fbdba205be7ddc8d0968
parent 77357f43025a96259ed83e487c04493a46c920c0
Author: Matsuda Kenji <info@mtkn.jp>
Date: Sun, 24 Nov 2024 20:40:53 +0900
add walk
Diffstat:
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 == ".." {
+ cwdp = "." // 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 = &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 == ".." {
+ cwdp = "." // 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 = &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>