diff options
Diffstat (limited to 'cmd/srv9p/static.c')
-rw-r--r-- | cmd/srv9p/static.c | 144 |
1 files changed, 0 insertions, 144 deletions
diff --git a/cmd/srv9p/static.c b/cmd/srv9p/static.c deleted file mode 100644 index a6da53f..0000000 --- a/cmd/srv9p/static.c +++ /dev/null @@ -1,144 +0,0 @@ -#include <assert.h> - -#include "static.h" - -#define UNUSED(name) /* name __attribute__((unused)) */ -#define p9_str(cstr) ((struct lib9p_s){ .len = strlen(cstr), .utf8 = cstr }) -#define p9_nulstr ((struct lib9p_s){ .len = 0, .utf8 = NULL }) - -/******************************************************************************/ - -static struct lib9p_srv_file *static_dir_clone(struct lib9p_srv_ctx *ctx, struct lib9p_srv_file *_file) { - assert(ctx); - struct static_dir *file = (struct static_dir *)_file; - assert(file); - - return &file->header; -} - -static void static_dir_free(struct lib9p_srv_ctx *ctx, struct lib9p_srv_file *_file) { - assert(ctx); - struct static_dir *file = (struct static_dir *)_file; - assert(file); - - /* do nothing */ -} - -static uint32_t static_dir_io(struct lib9p_srv_ctx *ctx, struct lib9p_srv_file *_file, lib9p_o_t UNUSED(flags)) { - assert(ctx); - struct static_dir *file = (struct static_dir *)_file; - assert(file); - - return 1; -} - -static struct lib9p_stat static_dir_stat(struct lib9p_srv_ctx *ctx, struct lib9p_srv_file *_file) { - assert(ctx); - struct static_dir *file = (struct static_dir *)_file; - assert(file); - - return (struct lib9p_stat){ - .kern_type = 0, - .kern_dev = 0, - .file_qid = { - .type = LIB9P_QT_DIR, - .vers = 1, - .path = file->pathnum, - }, - .file_mode = LIB9P_DM_DIR | (file->perm & 0555), - .file_atime = file->atime, - .file_mtime = file->mtime, - .file_size = 0, - .file_name = p9_str(file->name), - .file_owner_uid = p9_str(file->u_name), - .file_owner_gid = p9_str(file->g_name), - .file_last_modified_uid = p9_str(file->m_name), - .file_extension = p9_nulstr, - .file_owner_n_uid = file->u_num, - .file_owner_n_gid = file->g_num, - .file_last_modified_n_uid = file->m_num, - }; -} - -static void static_dir_wstat(struct lib9p_srv_ctx *ctx, struct lib9p_srv_file *_file, - struct lib9p_stat UNUSED(new)) { - assert(ctx); - struct static_dir *file = (struct static_dir *)_file; - assert(file); - - lib9p_error(&ctx->basectx, LINUX_EROFS, "read-only part of filesystem"); -} - -static void static_dir_remove(struct lib9p_srv_ctx *ctx, struct lib9p_srv_file *_file) { - assert(ctx); - struct static_dir *file = (struct static_dir *)_file; - assert(file); - - lib9p_error(&ctx->basectx, LINUX_EROFS, "read-only part of filesystem"); -} - - -static struct lib9p_srv_file *static_dir_dopen(struct lib9p_srv_ctx *ctx, struct lib9p_srv_file *_dir, - char *UNUSED(childname)) { - assert(ctx); - struct static_dir *dir = (struct static_dir *)_dir; - assert(dir); - - lib9p_error(&ctx->basectx, LINUX_EFAULT, "TODO: dopen"); - return NULL; -} - -static struct lib9p_srv_file *static_dir_dcreate(struct lib9p_srv_ctx *ctx, struct lib9p_srv_file *_dir, - char *UNUSED(childname), - lib9p_dm_t UNUSED(perm), lib9p_o_t UNUSED(flags)) { - assert(ctx); - struct static_dir *dir = (struct static_dir *)_dir; - assert(dir); - - lib9p_error(&ctx->basectx, LINUX_EROFS, "read-only part of filesystem"); - return NULL; -} - -static size_t static_dir_dread(struct lib9p_srv_ctx *ctx, struct lib9p_srv_file *_dir, - uint8_t *buf, - uint32_t byte_count, - size_t _obj_offset) { - assert(ctx); - struct static_dir *dir = (struct static_dir *)_dir; - assert(dir); - - uint32_t byte_offset = 0; - size_t obj_offset = _obj_offset; - while (dir->members[obj_offset]) { - struct lib9p_srv_file *filep = dir->members[obj_offset]; - struct lib9p_stat stat = filep->vtable->stat(ctx, filep); - if (lib9p_ctx_has_error(&ctx->basectx)) - break; - uint32_t nbytes = lib9p_marshal_stat(&ctx->basectx, byte_count-byte_offset, &stat, - &buf[byte_offset]); - if (!nbytes) { - if (obj_offset == _obj_offset) - lib9p_error(&ctx->basectx, - LINUX_ERANGE, "stat object does not fit into negotiated max message size"); - break; - } - byte_offset += nbytes; - obj_offset++; - } - return obj_offset - _obj_offset; -} - -struct lib9p_srv_file_vtable static_dir_vtable = { - .clone = static_dir_clone, - .free = static_dir_free, - - .io = static_dir_io, - .stat = static_dir_stat, - .wstat = static_dir_wstat, - .remove = static_dir_remove, - - .dopen = static_dir_dopen, - .dcreate = static_dir_dcreate, - - .dread = static_dir_dread, -}; |