summaryrefslogtreecommitdiff
path: root/lib9p
diff options
context:
space:
mode:
authorLuke T. Shumaker <lukeshu@lukeshu.com>2024-10-04 17:39:24 -0600
committerLuke T. Shumaker <lukeshu@lukeshu.com>2024-10-04 17:39:24 -0600
commit860a9e995b8e7076ce4e5c231e844184bef9b95e (patch)
tree8e106b091ec1c4ad423407ae8a6c386b5260772e /lib9p
parent2fe787ba4db420f5b08573d77e35cfaa0d7a0793 (diff)
wip
Diffstat (limited to 'lib9p')
-rw-r--r--lib9p/include/lib9p/srv.h2
-rw-r--r--lib9p/srv.c11
2 files changed, 10 insertions, 3 deletions
diff --git a/lib9p/include/lib9p/srv.h b/lib9p/include/lib9p/srv.h
index 769b562..0211260 100644
--- a/lib9p/include/lib9p/srv.h
+++ b/lib9p/include/lib9p/srv.h
@@ -18,7 +18,7 @@ struct lib9p_srv_file_vtable {
/* all */
struct lib9p_srv_io (*io )(struct lib9p_srv_reqctx *ctx, void *impldata,
lib9p_o_t flags);
- struct lib9p_stat (*stat )(struct lib9p_srv_reqcggtx *ctx, void *impldata);
+ struct lib9p_stat (*stat )(struct lib9p_srv_reqctx *ctx, void *impldata);
void (*wstat )(struct lib9p_srv_reqctx *ctx, void *impldata,
struct lib9p_stat new);
void (*remove )(struct lib9p_srv_reqctx *ctx, void *impldata);
diff --git a/lib9p/srv.c b/lib9p/srv.c
index 0f9466c..534d70a 100644
--- a/lib9p/srv.c
+++ b/lib9p/srv.c
@@ -375,7 +375,7 @@ static void handle_Tauth(struct lib9p_req *ctx, struct lib9p_msg_Tauth *req, str
return;
}
-static void handle_Tattach(struct lib9p_req *ctx, struct lib9p_msg_Tattach *req, struct lib9p_msg_Rattach *UNUSED(resp)) {
+static void handle_Tattach(struct lib9p_req *ctx, struct lib9p_msg_Tattach *req, struct lib9p_msg_Rattach *resp) {
struct lib9p_srv_reqctx subctx = {
.base = &ctx->ctx,
.uid = req->n_uname,
@@ -418,6 +418,13 @@ static void handle_Tattach(struct lib9p_req *ctx, struct lib9p_msg_Tattach *req,
if (lib9p_ctx_has_error(&ctx->ctx))
return;
+ struct lib9p_stat stat = rootdir.vtable.stat(&subctx, rootdir.impldata);
+ if (lib9p_ctx_has_error(&ctx->ctx)) {
+ if (rootdir.vtable.free)
+ rootdir.vtable.free(&subctx, rootdir.impldata);
+ return;
+ }
+
struct lib9p_srv_file *rootdir_ptr = fidmap_store(&ctx->parent_sess->fids, req->fid, rootdir);
if (!rootdir_ptr) {
lib9p_error(&ctx->ctx, LINUX_EMFILE, "too many open files");
@@ -426,7 +433,7 @@ static void handle_Tattach(struct lib9p_req *ctx, struct lib9p_msg_Tattach *req,
return;
}
- //resp->qid = rootdir.qid;
+ resp->qid = stat.file_qid;
return;
}