From f649cad255702320380086b6c933d65ea6802d72 Mon Sep 17 00:00:00 2001 From: Levi Neely <141506390+lneely@users.noreply.github.com> Date: Thu, 27 Nov 2025 14:38:22 +0100 Subject: [PATCH] add `dir` endpoint to 9p --- internal/p9/server/server.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/internal/p9/server/server.go b/internal/p9/server/server.go index df14fe3..c13d097 100644 --- a/internal/p9/server/server.go +++ b/internal/p9/server/server.go @@ -66,6 +66,7 @@ const ( qidNew = 999997 qidNDir = 999996 qidCtl = 999995 + qidDir = 999994 ) var fileNames = []string{"path", "title", "keywords", "signature", "ctl", "backlinks"} @@ -299,6 +300,14 @@ func (s *server) walk(cs *connState, fc *plan9.Fcall) *plan9.Fcall { qids = append(qids, qid) path = "/ctl" found = true + } else if name == "dir" { + qid := plan9.Qid{ + Type: QTFile, + Path: uint64(qidDir), + } + qids = append(qids, qid) + path = "/dir" + found = true } else if name == "n" { qid := plan9.Qid{ Type: QTDir, @@ -695,6 +704,19 @@ func (s *server) readDir(path string, offset int64, count uint32) []byte { Muid: "denote", Length: 0, }) + // add dir node + dirs = append(dirs, plan9.Dir{ + Qid: plan9.Qid{ + Type: QTFile, + Path: uint64(qidDir), + }, + Mode: 0444, + Name: "dir", + Uid: "denote", + Gid: "denote", + Muid: "denote", + Length: uint64(len(s.denoteDir)), + }) // add n directory dirs = append(dirs, plan9.Dir{ Qid: plan9.Qid{ @@ -847,6 +869,10 @@ func (s *server) getFileContent(path string) string { return s.getIndexContent() } + if path == "/dir" { + return s.denoteDir + } + parts := strings.Split(strings.Trim(path, "/"), "/") if len(parts) != 3 || parts[0] != "n" { return ""