summaryrefslogtreecommitdiff
path: root/lib9p
diff options
context:
space:
mode:
Diffstat (limited to 'lib9p')
-rw-r--r--lib9p/9p.c72
-rw-r--r--lib9p/include/lib9p/9p.h14
-rw-r--r--lib9p/include/lib9p/_types.h2
-rw-r--r--lib9p/include/lib9p/srv.h5
-rw-r--r--lib9p/internal.h13
-rw-r--r--lib9p/srv.c69
-rw-r--r--lib9p/types.c811
-rwxr-xr-xlib9p/types.gen71
8 files changed, 544 insertions, 513 deletions
diff --git a/lib9p/9p.c b/lib9p/9p.c
index 64b09a6..8d53815 100644
--- a/lib9p/9p.c
+++ b/lib9p/9p.c
@@ -13,12 +13,12 @@
#include "internal.h"
-enum lib9p_version lib9p_ctx_version(lib9p_ctx *ctx) {
+enum lib9p_version lib9p_ctx_version(struct lib9p_ctx *ctx) {
assert(ctx);
return ctx->version;
}
-uint32_t lib9p_ctx_max_msg_size(lib9p_ctx *ctx) {
+uint32_t lib9p_ctx_max_msg_size(struct lib9p_ctx *ctx) {
assert(ctx);
return ctx->max_msg_size;
}
@@ -45,50 +45,66 @@ int lib9p_errorf(struct lib9p_ctx *ctx, uint32_t linux_errno, char const *fmt, .
return -1;
}
-size_t lib9p_unmarshal_size(struct lib9p_ctx *ctx, uint8_t *net_bytes) {
+ssize_t lib9p_unmarshal_size(struct lib9p_ctx *ctx, uint8_t *net_bytes) {
/* Header */
- uint32_t net_len = decode_u32le(net_bytes);
- if (net_len < 7)
+ struct _checksize_ctx subctx = {
+ .ctx = ctx,
+ .net_size = decode_u32le(net_bytes),
+ .net_bytes = net_bytes,
+
+ .net_offset = 7,
+ .host_extra = 0,
+ };
+ if (subctx.net_size < subctx.net_offset)
return lib9p_error(ctx, LINUX_EBADMSG, "message is too short");
uint8_t typ = net_bytes[4];
- uint32_t net_offset = 7;
/* Body */
- if (!versions[ctx->version]->msgs[typ].unmarshal_extrasize)
+ struct _vtable_msg vtable = _lib9p_vtables[ctx->version].msgs[typ];
+ if (!vtable.unmarshal_extrasize)
return lib9p_errorf(ctx, LINUX_EOPNOTSUPP, "unknown message type %"PRIu8, typ);
- size_t host_size = versions[ctx->version]->msgs[typ].unmarshal_basesize;
- if (versions[ctx->version]->msgs[typ].unmarshal_extrasize(net_len, net_bytes, &net_offset, &host_size))
- return lib9p_error(ctx, LINUX_EBADMSG, "message is too short for content");
+ if (vtable.unmarshal_extrasize(&subctx))
+ return -1;
- return host_size;
+ return (ssize_t)(vtable.unmarshal_basesize + subctx.host_extra);
}
-uint8_t lib9p_unmarshal(struct lib9p_ctx *ctx, uint8_t *net_bytes, uint16_t *out_tag, void *out_body) {
+void lib9p_unmarshal(struct lib9p_ctx *ctx, uint8_t *net_bytes,
+ enum lib9p_msg_type *ret_typ, uint16_t *ret_tag, void *ret_body) {
/* Header */
- uint8_t typ = net_bytes[4];
- *out_tag = decode_u16le(&net_bytes[5]);
- uint32_t net_offset = 7;
+ struct _unmarshal_ctx subctx = {
+ .ctx = ctx,
+ .net_bytes = net_bytes,
- /* Body */
- void *host_extra = out_body + versions[ctx->version]->msgs[typ].unmarshal_basesize;
- if (versions[ctx->version]->msgs[typ].unmarshal(net_bytes, &net_offset, &host_extra, out_body))
- return lib9p_error(ctx, LINUX_EBADMSG, "message contains invalid UTF-8");
+ .net_offset = 7,
+ };
+ *ret_typ = net_bytes[4];
+ *ret_tag = decode_u16le(&net_bytes[5]);
- return typ;
+ /* Body */
+ struct _vtable_msg vtable = _lib9p_vtables[ctx->version].msgs[*ret_typ];
+ subctx.extra = ret_body + vtable.unmarshal_basesize;
+ vtable.unmarshal(&subctx, ret_body);
}
-uint32_t lib9p_marshal(struct lib9p_ctx *ctx, uint8_t typ, uint16_t msgid, void *body, uint8_t *out_bytes) {
+bool lib9p_marshal(struct lib9p_ctx *ctx, enum lib9p_msg_type typ, uint16_t tag, void *body,
+ uint8_t *ret_bytes) {
/* Header */
- out_bytes[4] = typ;
- encode_u16le(msgid, &out_bytes[5]);
- uint32_t net_offset = 7;
+ struct _marshal_ctx subctx = {
+ .ctx = ctx,
+ .net_bytes = ret_bytes,
+ .net_offset = 7,
+ };
+ ret_bytes[4] = typ;
+ encode_u16le(tag, &ret_bytes[5]);
/* Body */
- if (versions[ctx->version]->msgs[typ].marshal(ctx, body, out_bytes, &net_offset))
- return 0;
+ struct _vtable_msg vtable = _lib9p_vtables[ctx->version].msgs[typ];
+ if (vtable.marshal(&subctx, body))
+ return true;
/* Header, again */
- encode_u32le(net_offset, out_bytes);
+ encode_u32le(subctx.net_offset, ret_bytes);
- return net_offset;
+ return false;
}
diff --git a/lib9p/include/lib9p/9p.h b/lib9p/include/lib9p/9p.h
index a55f08f..954498e 100644
--- a/lib9p/include/lib9p/9p.h
+++ b/lib9p/include/lib9p/9p.h
@@ -7,6 +7,9 @@
#ifndef _LIB9P_9P_H_
#define _LIB9P_9P_H_
+#include <stdbool.h>
+#include <sys/types.h> /* for ssize_t */
+
#include <lib9p/linux-errno.h>
#include <lib9p/_types.h>
@@ -14,8 +17,8 @@
#define LIB9P_NOFID ((uint32_t)~0U)
struct lib9p_ctx;
-enum lib9p_version lib9p_ctx_version(lib9p_ctx *);
-uint32_t lib9p_ctx_max_msg_size(lib9p_ctx *);
+enum lib9p_version lib9p_ctx_version(struct lib9p_ctx *);
+uint32_t lib9p_ctx_max_msg_size(struct lib9p_ctx *);
/** Write an static error into ctx, return -1. */
int lib9p_error(struct lib9p_ctx *ctx, uint32_t linux_errno, char const *msg);
@@ -50,10 +53,9 @@ ssize_t lib9p_unmarshal_size(struct lib9p_ctx *ctx, uint8_t *net_bytes);
* @return ret_typ : the mesage type
* @return ret_tag : the message-ID tag
* @return ret_body : the message body, must be at least lib9p_unmarshal_size() bytes
- * @return the message type, or -1 on error
*/
-bool lib9p_unmarshal(struct lib9p_ctx *ctx, uint8_t *net_bytes,
- enum lib9p_msg_typ *ret_typ, uint16_t *ret_tag, void *ret_body);
+void lib9p_unmarshal(struct lib9p_ctx *ctx, uint8_t *net_bytes,
+ enum lib9p_msg_type *ret_typ, uint16_t *ret_tag, void *ret_body);
/**
* Marshal a `struct lib9p_msg_{typ}` structure into a byte-array.
@@ -66,7 +68,7 @@ bool lib9p_unmarshal(struct lib9p_ctx *ctx, uint8_t *net_bytes,
* @return ret_bytes : the buffer to encode to, must be at be at least lib9p_ctx_max_msg_size(ctx) bytes
* @return whether there was an error (false=success, true=error)
*/
-bool lib9p_marshal(struct lib9p_ctx *ctx, uint8_t typ, uint16_t tag, void *body,
+bool lib9p_marshal(struct lib9p_ctx *ctx, enum lib9p_msg_type typ, uint16_t tag, void *body,
uint8_t *ret_bytes);
#endif _LIB9P_9P_H_
diff --git a/lib9p/include/lib9p/_types.h b/lib9p/include/lib9p/_types.h
index 7dcd8e2..7f320a5 100644
--- a/lib9p/include/lib9p/_types.h
+++ b/lib9p/include/lib9p/_types.h
@@ -3,7 +3,7 @@
#ifndef _LIB9P__TYPES_H_
#define _LIB9P__TYPES_H_
-#include <stdint.h>
+#include <stdint.h> /* for uint{n}_t types */
/* versions *******************************************************************/
diff --git a/lib9p/include/lib9p/srv.h b/lib9p/include/lib9p/srv.h
index 3b8b21e..a8bd9c7 100644
--- a/lib9p/include/lib9p/srv.h
+++ b/lib9p/include/lib9p/srv.h
@@ -2,12 +2,13 @@
#define _LIB9P_SRV_H_
#include <libcr/coroutine.h>
+#include <libcr_ipc/chan.h>
struct lib9p_srvreq;
struct lib9p_srv {
- int sockfd;
- cr_chan_t(lib9p_srvreq *) reqch;
+ int sockfd;
+ cr_chan_t(struct lib9p_srvreq *) reqch;
};
COROUTINE lib9p_srv_read_cr(void *_srv);
diff --git a/lib9p/internal.h b/lib9p/internal.h
index ebdc3f3..a5175af 100644
--- a/lib9p/internal.h
+++ b/lib9p/internal.h
@@ -8,13 +8,15 @@
#define _LIB9P_INTERNAL_H_
#include <assert.h>
-#include <stdbool.h>
+#include <stddef.h> /* for size_t */
+#include <limits.h> /* for SSIZE_MAX */
#include <lib9p/9p.h>
-#define USE_CONFIG_LIB9P
+#define USE_CONFIG_9P
#include "config.h"
-static_assert(CONFIG_LIB9P_MAX_ERR_SIZE <= UINT16_MAX);
+static_assert(CONFIG_9P_MAX_ERR_SIZE <= UINT16_MAX);
+static_assert(CONFIG_9P_MAX_MSG_SIZE <= SSIZE_MAX);
/* C language *****************************************************************/
@@ -34,7 +36,7 @@ struct lib9p_ctx {
/* state */
uint32_t err_num;
- char err_msg[CONFIG_LIB9P_MAX_ERR_SIZE];
+ char err_msg[CONFIG_9P_MAX_ERR_SIZE];
};
/* vtables ********************************************************************/
@@ -42,7 +44,7 @@ struct lib9p_ctx {
struct _checksize_ctx {
struct lib9p_ctx *ctx;
uint32_t net_size;
- uint8_t net_bytes;
+ uint8_t *net_bytes;
uint32_t net_offset;
/* Increment `host_extra` to pre-allocate space that is
@@ -52,6 +54,7 @@ struct _checksize_ctx {
struct _unmarshal_ctx {
struct lib9p_ctx *ctx;
+ uint8_t *net_bytes;
uint32_t net_offset;
/* `extra` points to the beginning of unallocated space. */
diff --git a/lib9p/srv.c b/lib9p/srv.c
index c6558d6..9a68a2b 100644
--- a/lib9p/srv.c
+++ b/lib9p/srv.c
@@ -1,47 +1,50 @@
#include <assert.h>
+#include <stdio.h> /* for fprintf(), stderr */
+#include <string.h> /* for strerror() */
#include <libcr/coroutine.h>
#include <libcr_ipc/chan.h>
#include <libnetio/netio.h>
#include <lib9p/9p.h>
+#include <lib9p/srv.h>
#include "internal.h"
-struct p9_srvconn {
+struct lib9p_srvconn {
/* immutable */
- p9_srv *srv;
- cid_t reader;
- int fd;
+ struct lib9p_srv *srv;
+ cid_t reader;
+ int fd;
/* mutable */
- uint32_t max_msg_size;
- enum p9_version version;
- unsigned int refcount;
+ uint32_t max_msg_size;
+ enum lib9p_version version;
+ unsigned int refcount;
};
-struct p9_srvreq {
- p9_srvconn *conn;
- uint8_t *msg;
+struct lib9p_srvreq {
+ struct lib9p_srvconn *conn;
+ uint8_t *msg;
};
-COROUTINE p9_srv_read_cr(void *_srv) {
+COROUTINE lib9p_srv_read_cr(void *_srv) {
uint8_t buf[CONFIG_9P_MAX_MSG_SIZE];
- p9_srv *srv = _srv;
+ struct lib9p_srv *srv = _srv;
assert(srv);
cr_begin();
for (;;) {
- struct p9_srvconn conn = {
+ struct lib9p_srvconn conn = {
.srv = srv,
- .reader = cr_getcid();
+ .reader = cr_getcid(),
- .max_msg_size = CONFIG_9P_MAX_MSG_SIZE;
- .version = P9_VER_UNINITIALIZED;
+ .max_msg_size = CONFIG_9P_MAX_MSG_SIZE,
+ .version = LIB9P_VER_UNINITIALIZED,
.refcount = 1,
};
conn.fd = netio_accept(srv->sockfd);
if (conn.fd < 0) {
- fprintf(stderr, "error: accept: %m", -conn.fd);
+ fprintf(stderr, "error: accept: %s", strerror(-conn.fd));
continue;
}
@@ -67,14 +70,14 @@ COROUTINE p9_srv_read_cr(void *_srv) {
goto close;
}
if (goal > conn.max_msg_size) {
- struct p9_ctx ctx = {
+ struct lib9p_ctx ctx = {
.version = conn.version,
.max_msg_size = conn.max_msg_size,
};
if (initialized)
- p9_errorf(&ctx, LINUX_EMSGSIZE, "T-message larger than negotiated limit (%zu > %zu)", goal, conn.max_msg_size);
+ lib9p_errorf(&ctx, LINUX_EMSGSIZE, "T-message larger than negotiated limit (%zu > %zu)", goal, conn.max_msg_size);
else
- p9_errorf(&ctx, LINUX_EMSGSIZE, "T-message larger than server limit (%zu > %zu)", goal, conn.max_msg_size);
+ lib9p_errorf(&ctx, LINUX_EMSGSIZE, "T-message larger than server limit (%zu > %zu)", goal, conn.max_msg_size);
marshal_error(&ctx, buf);
netio_write(conn.fd, buf, decode_u32le(buf));
continue;
@@ -93,7 +96,7 @@ COROUTINE p9_srv_read_cr(void *_srv) {
}
/* Handle the message... */
- if (conn.version == P9_VER_UNINITIALIZED) {
+ if (conn.version == LIB9P_VER_UNINITIALIZED) {
/* ...synchronously if we haven't negotiated the protocol yet, ... */
handle_message(&conn, buf);
} else {
@@ -114,15 +117,15 @@ COROUTINE p9_srv_read_cr(void *_srv) {
cr_end();
}
-COROUTINE p9_srv_write_cr(void *_srv) {
+COROUTINE lib9p_srv_write_cr(void *_srv) {
uint8_t net[CONFIG_9P_MAX_MSG_SIZE];
- p9_srv *srv = _srv;
+ lib9p_srv *srv = _srv;
assert(srv);
cr_begin();
for (;;) {
- struct p9_srvreq req;
+ struct lib9p_srvreq req;
cr_chan_recv(&srv->reqch, &req);
memcpy(net, req.msg, decode_u32le(req.msg));
req.conn->refcount++;
@@ -137,28 +140,28 @@ COROUTINE p9_srv_write_cr(void *_srv) {
cr_end();
}
-void handle_message(p9_srvconn *conn, uint8_t *net) {
+void handle_message(lib9p_srvconn *conn, uint8_t *net) {
uint8_t host[CONFIG_9P_MAX_MSG_SIZE];
- struct p9_ctx ctx = {
+ struct lib9p_ctx ctx = {
.version = req.conn->version,
.max_msg_size = req.conn->max_msg_size,
};
- size_t host_size = p9_unmarshal_size(&ctx, net);
+ size_t host_size = lib9p_unmarshal_size(&ctx, net);
if (host_size == (size_t)-1)
goto write;
if (host_size > sizeof(host)) {
- p9_errorf(&ctx, LINUX_EMSGSIZE, "unmarshalled payload larger than server limit (%zu > %zu)", host_size, sizeof(host));
+ lib9p_errorf(&ctx, LINUX_EMSGSIZE, "unmarshalled payload larger than server limit (%zu > %zu)", host_size, sizeof(host));
goto write;
}
uint16_t tag;
- uint8_t typ = p9_unmarshal(&ctx, net, &tag, host);
+ uint8_t typ = lib9p_unmarshal(&ctx, net, &tag, host);
if (typ == (uint8_t)-1)
goto write;
if (typ % 2 != 0) {
- p9_errorf(&ctx, LINUX_EOPNOTSUPP, "expected a T-message but got an R-message");
+ lib9p_errorf(&ctx, LINUX_EOPNOTSUPP, "expected a T-message but got an R-message");
goto write;
}
@@ -179,8 +182,8 @@ static inline uint16_t min_u16(uint16_t a, b) {
/* We have special code for marshaling Rerror because we don't ever
* want to produce an error because the err_msg is too long for the
* `ctx->max_msg_size`! */
-void marshal_error(struct p9_ctx *ctx, uint16_t tag, uint8_t *net) {
- struct p9_msg_Rerror host = {
+void marshal_error(struct lib9p_ctx *ctx, uint16_t tag, uint8_t *net) {
+ struct lib9p_msg_Rerror host = {
.ename = {
.len = strnlen(ctx->err_msg, CONFIG_9P_MAX_ERR_SIZE),
.utf8 = ctx->err_msg,
@@ -188,7 +191,7 @@ void marshal_error(struct p9_ctx *ctx, uint16_t tag, uint8_t *net) {
};
if (host.ename.len + ctx->Rerror_overhead > ctx->max_msg_size)
host.ename.len = ctx->max_msg_size - overhead;
- p9_marshal(ctx, tag, host, net);
+ lib9p_marshal(ctx, tag, host, net);
}
ERANGE for reply too large
diff --git a/lib9p/types.c b/lib9p/types.c
index deceb4e..5b6d0a0 100644
--- a/lib9p/types.c
+++ b/lib9p/types.c
@@ -1,6 +1,9 @@
/* Generated by `./lib9p/types.gen lib9p/9P2000.txt lib9p/9P2000.u.txt lib9p/9P2000.e.txt`. DO NOT EDIT! */
#include <stdbool.h>
+#include <stddef.h> /* for size_t */
+#include <inttypes.h> /* for PRI* macros */
+#include <string.h> /* for memset() */
#include <lib9p/9p.h>
@@ -43,18 +46,18 @@ static inline bool _checksize_list(struct _checksize_ctx *ctx,
static inline bool checksize_d(struct _checksize_ctx *ctx) {
uint32_t base_offset = ctx->net_offset;
- if (_checksize_4(ctx))
+ if (checksize_4(ctx))
return true;
uint32_t len = decode_u32le(&ctx->net_bytes[base_offset]);
- return checksize_net(ctx, len) || checksize_host(ctx, len);
+ return _checksize_net(ctx, len) || _checksize_host(ctx, len);
}
static inline bool checksize_s(struct _checksize_ctx *ctx) {
uint32_t base_offset = ctx->net_offset;
- if (_checksize_2(ctx))
+ if (checksize_2(ctx))
return true;
uint16_t len = decode_u16le(&ctx->net_bytes[base_offset]);
- if (checksize_net(ctx, len) || checksize_host(ctx, ((size_t)len)+1))
+ if (_checksize_net(ctx, len) || _checksize_host(ctx, ((size_t)len)+1))
return true;
if (!is_valid_utf8_without_nul(&ctx->net_bytes[base_offset+2], len))
return lib9p_error(ctx->ctx, LINUX_EBADMSG, "message contains invalid UTF-8");
@@ -249,22 +252,22 @@ static bool checksize_Rswrite(struct _checksize_ctx *ctx) {
/* unmarshal_* ****************************************************************/
-static inline vold unmarshal_1(struct _unmarshal_ctx *ctx, uint8_t *out) {
+static inline void unmarshal_1(struct _unmarshal_ctx *ctx, uint8_t *out) {
*out = decode_u8le(&ctx->net_bytes[ctx->net_offset]);
ctx->net_offset += 1;
}
-static inline vold unmarshal_2(struct _unmarshal_ctx *ctx, uint16_t *out) {
+static inline void unmarshal_2(struct _unmarshal_ctx *ctx, uint16_t *out) {
*out = decode_u16le(&ctx->net_bytes[ctx->net_offset]);
ctx->net_offset += 2;
}
-static inline vold unmarshal_4(struct _unmarshal_ctx *ctx, uint32_t *out) {
+static inline void unmarshal_4(struct _unmarshal_ctx *ctx, uint32_t *out) {
*out = decode_u32le(&ctx->net_bytes[ctx->net_offset]);
ctx->net_offset += 4;
}
-static inline vold unmarshal_8(struct _unmarshal_ctx *ctx, uint64_t *out) {
+static inline void unmarshal_8(struct _unmarshal_ctx *ctx, uint64_t *out) {
*out = decode_u64le(&ctx->net_bytes[ctx->net_offset]);
ctx->net_offset += 8;
}
@@ -272,8 +275,8 @@ static inline vold unmarshal_8(struct _unmarshal_ctx *ctx, uint64_t *out) {
static inline void unmarshal_d(struct _unmarshal_ctx *ctx, struct lib9p_d *out) {
memset(out, 0, sizeof(*out));
unmarshal_4(ctx, &out->len);
- out->dat = ctx->host_extra;
- ctx->host_extra += sizeof(out->dat[0]) * out->len;
+ out->dat = ctx->extra;
+ ctx->extra += sizeof(out->dat[0]) * out->len;
for (typeof(out->len) i = 0; i < out->len; i++)
unmarshal_1(ctx, &out->dat[i]);
}
@@ -281,8 +284,8 @@ static inline void unmarshal_d(struct _unmarshal_ctx *ctx, struct lib9p_d *out)
static inline void unmarshal_s(struct _unmarshal_ctx *ctx, struct lib9p_s *out) {
memset(out, 0, sizeof(*out));
unmarshal_2(ctx, &out->len);
- out->utf8 = ctx->host_extra;
- ctx->host_extra += sizeof(out->utf8[0]) * out->len;
+ out->utf8 = ctx->extra;
+ ctx->extra += sizeof(out->utf8[0]) * out->len;
for (typeof(out->len) i = 0; i < out->len; i++)
unmarshal_1(ctx, &out->utf8[i]);
}
@@ -363,7 +366,7 @@ static void unmarshal_Tflush(struct _unmarshal_ctx *ctx, struct lib9p_msg_Tflush
unmarshal_2(ctx, &out->oldtag);
}
-static void unmarshal_Rflush(struct _unmarshal_ctx *UNUSED(ctx), struct lib9p_msg_Rflush *UNUSED(out)) {
+static void unmarshal_Rflush(struct _unmarshal_ctx *UNUSED(ctx), struct lib9p_msg_Rflush *out) {
memset(out, 0, sizeof(*out));
}
@@ -372,8 +375,8 @@ static void unmarshal_Twalk(struct _unmarshal_ctx *ctx, struct lib9p_msg_Twalk *
unmarshal_4(ctx, &out->fid);
unmarshal_4(ctx, &out->newfid);
unmarshal_2(ctx, &out->nwname);
- out->wname = ctx->host_extra;
- ctx->host_extra += sizeof(out->wname[0]) * out->nwname;
+ out->wname = ctx->extra;
+ ctx->extra += sizeof(out->wname[0]) * out->nwname;
for (typeof(out->nwname) i = 0; i < out->nwname; i++)
unmarshal_s(ctx, &out->wname[i]);
}
@@ -381,8 +384,8 @@ static void unmarshal_Twalk(struct _unmarshal_ctx *ctx, struct lib9p_msg_Twalk *
static void unmarshal_Rwalk(struct _unmarshal_ctx *ctx, struct lib9p_msg_Rwalk *out) {
memset(out, 0, sizeof(*out));
unmarshal_2(ctx, &out->nwqid);
- out->wqid = ctx->host_extra;
- ctx->host_extra += sizeof(out->wqid[0]) * out->nwqid;
+ out->wqid = ctx->extra;
+ ctx->extra += sizeof(out->wqid[0]) * out->nwqid;
for (typeof(out->nwqid) i = 0; i < out->nwqid; i++)
unmarshal_qid(ctx, &out->wqid[i]);
}
@@ -442,7 +445,7 @@ static void unmarshal_Tclunk(struct _unmarshal_ctx *ctx, struct lib9p_msg_Tclunk
unmarshal_4(ctx, &out->fid);
}
-static void unmarshal_Rclunk(struct _unmarshal_ctx *UNUSED(ctx), struct lib9p_msg_Rclunk *UNUSED(out)) {
+static void unmarshal_Rclunk(struct _unmarshal_ctx *UNUSED(ctx), struct lib9p_msg_Rclunk *out) {
memset(out, 0, sizeof(*out));
}
@@ -451,7 +454,7 @@ static void unmarshal_Tremove(struct _unmarshal_ctx *ctx, struct lib9p_msg_Tremo
unmarshal_4(ctx, &out->fid);
}
-static void unmarshal_Rremove(struct _unmarshal_ctx *UNUSED(ctx), struct lib9p_msg_Rremove *UNUSED(out)) {
+static void unmarshal_Rremove(struct _unmarshal_ctx *UNUSED(ctx), struct lib9p_msg_Rremove *out) {
memset(out, 0, sizeof(*out));
}
@@ -471,7 +474,7 @@ static void unmarshal_Twstat(struct _unmarshal_ctx *ctx, struct lib9p_msg_Twstat
unmarshal_stat(ctx, &out->stat);
}
-static void unmarshal_Rwstat(struct _unmarshal_ctx *UNUSED(ctx), struct lib9p_msg_Rwstat *UNUSED(out)) {
+static void unmarshal_Rwstat(struct _unmarshal_ctx *UNUSED(ctx), struct lib9p_msg_Rwstat *out) {
memset(out, 0, sizeof(*out));
}
@@ -480,7 +483,7 @@ static void unmarshal_Tsession(struct _unmarshal_ctx *ctx, struct lib9p_msg_Tses
unmarshal_8(ctx, &out->key);
}
-static void unmarshal_Rsession(struct _unmarshal_ctx *UNUSED(ctx), struct lib9p_msg_Rsession *UNUSED(out)) {
+static void unmarshal_Rsession(struct _unmarshal_ctx *UNUSED(ctx), struct lib9p_msg_Rsession *out) {
memset(out, 0, sizeof(*out));
}
@@ -488,8 +491,8 @@ static void unmarshal_Tsread(struct _unmarshal_ctx *ctx, struct lib9p_msg_Tsread
memset(out, 0, sizeof(*out));
unmarshal_4(ctx, &out->fid);
unmarshal_2(ctx, &out->nwname);
- out->wname = ctx->host_extra;
- ctx->host_extra += sizeof(out->wname[0]) * out->nwname;
+ out->wname = ctx->extra;
+ ctx->extra += sizeof(out->wname[0]) * out->nwname;
for (typeof(out->nwname) i = 0; i < out->nwname; i++)
unmarshal_s(ctx, &out->wname[i]);
}
@@ -503,8 +506,8 @@ static void unmarshal_Tswrite(struct _unmarshal_ctx *ctx, struct lib9p_msg_Tswri
memset(out, 0, sizeof(*out));
unmarshal_4(ctx, &out->fid);
unmarshal_2(ctx, &out->nwname);
- out->wname = ctx->host_extra;
- ctx->host_extra += sizeof(out->wname[0]) * out->nwname;
+ out->wname = ctx->extra;
+ ctx->extra += sizeof(out->wname[0]) * out->nwname;
for (typeof(out->nwname) i = 0; i < out->nwname; i++)
unmarshal_s(ctx, &out->wname[i]);
unmarshal_d(ctx, &out->data);
@@ -518,43 +521,43 @@ static void unmarshal_Rswrite(struct _unmarshal_ctx *ctx, struct lib9p_msg_Rswri
/* marshal_* ******************************************************************/
static inline bool _marshal_too_large(struct _marshal_ctx *ctx) {
- lib9p_errorf(ctx->ctx, "%s too large to marshal into %s limit (limit=%"PRIu32")",
+ lib9p_errorf(ctx->ctx, LINUX_EMSGSIZE, "%s too large to marshal into %s limit (limit=%"PRIu32")",
(ctx->net_bytes[4] % 2 == 0) ? "T-message" : "R-message",
ctx->ctx->version ? "negotiated" : ((ctx->net_bytes[4] % 2 == 0) ? "client" : "server"),
- ctx->ctx->max_msg_size));
- return true;
+ ctx->ctx->max_msg_size);
+ return true;
}
static inline bool marshal_1(struct _marshal_ctx *ctx, uint8_t *val) {
- if (ctx->net_offset + 1 > ctx->max_msg_size)
- return _marshal_too_large(ctx);
- out_net_bytes[ctx->net_offset] = *val;
+ if (ctx->net_offset + 1 > ctx->ctx->max_msg_size)
+ return _marshal_too_large(ctx);
+ ctx->net_bytes[ctx->net_offset] = *val;
ctx->net_offset += 1;
- return false;
+ return false;
}
static inline bool marshal_2(struct _marshal_ctx *ctx, uint16_t *val) {
- if (ctx->net_offset + 2 > ctx->max_msg_size)
- return _marshal_too_large(ctx);
- encode_u16le(*val, &out_net_bytes[ctx->net_offset]);
+ if (ctx->net_offset + 2 > ctx->ctx->max_msg_size)
+ return _marshal_too_large(ctx);
+ encode_u16le(*val, &ctx->net_bytes[ctx->net_offset]);
ctx->net_offset += 2;
- return false;
+ return false;
}
static inline bool marshal_4(struct _marshal_ctx *ctx, uint32_t *val) {
- if (ctx->net_offset + 4 > ctx->max_msg_size)
+ if (ctx->net_offset + 4 > ctx->ctx->max_msg_size)
return true;
- encode_u32le(*val, &out_net_bytes[ctx->net_offset]);
+ encode_u32le(*val, &ctx->net_bytes[ctx->net_offset]);
ctx->net_offset += 4;
- return false;
+ return false;
}
static inline bool marshal_8(struct _marshal_ctx *ctx, uint64_t *val) {
- if (ctx->net_offset + 8 > ctx->max_msg_size)
+ if (ctx->net_offset + 8 > ctx->ctx->max_msg_size)
return true;
- encode_u64le(*val, &out_net_bytes[ctx->net_offset]);
+ encode_u64le(*val, &ctx->net_bytes[ctx->net_offset]);
ctx->net_offset += 8;
- return false;
+ return false;
}
static inline bool marshal_d(struct _marshal_ctx *ctx, struct lib9p_d *val) {
@@ -562,7 +565,7 @@ static inline bool marshal_d(struct _marshal_ctx *ctx, struct lib9p_d *val) {
|| ({
bool err = false;
for (typeof(val->len) i = 0; i < val->len && !err; i++)
- err = marshal_1(ctx, &val->dat[i]));
+ err = marshal_1(ctx, &val->dat[i]);
err;
});
}
@@ -572,7 +575,7 @@ static inline bool marshal_s(struct _marshal_ctx *ctx, struct lib9p_s *val) {
|| ({
bool err = false;
for (typeof(val->len) i = 0; i < val->len && !err; i++)
- err = marshal_1(ctx, &val->utf8[i]));
+ err = marshal_1(ctx, &val->utf8[i]);
err;
});
}
@@ -654,7 +657,7 @@ static bool marshal_Twalk(struct _marshal_ctx *ctx, struct lib9p_msg_Twalk *val)
|| ({
bool err = false;
for (typeof(val->nwname) i = 0; i < val->nwname && !err; i++)
- err = marshal_s(ctx, &val->wname[i]));
+ err = marshal_s(ctx, &val->wname[i]);
err;
});
}
@@ -664,7 +667,7 @@ static bool marshal_Rwalk(struct _marshal_ctx *ctx, struct lib9p_msg_Rwalk *val)
|| ({
bool err = false;
for (typeof(val->nwqid) i = 0; i < val->nwqid && !err; i++)
- err = marshal_qid(ctx, &val->wqid[i]));
+ err = marshal_qid(ctx, &val->wqid[i]);
err;
});
}
@@ -758,7 +761,7 @@ static bool marshal_Tsread(struct _marshal_ctx *ctx, struct lib9p_msg_Tsread *va
|| ({
bool err = false;
for (typeof(val->nwname) i = 0; i < val->nwname && !err; i++)
- err = marshal_s(ctx, &val->wname[i]));
+ err = marshal_s(ctx, &val->wname[i]);
err;
});
}
@@ -773,7 +776,7 @@ static bool marshal_Tswrite(struct _marshal_ctx *ctx, struct lib9p_msg_Tswrite *
|| ({
bool err = false;
for (typeof(val->nwname) i = 0; i < val->nwname && !err; i++)
- err = marshal_s(ctx, &val->wname[i]));
+ err = marshal_s(ctx, &val->wname[i]);
err;
})
|| marshal_d(ctx, &val->data);
@@ -788,544 +791,544 @@ static bool marshal_Rswrite(struct _marshal_ctx *ctx, struct lib9p_msg_Rswrite *
struct _vtable_version _lib9p_vtables[LIB9P_VER_NUM] = {
[LIB9P_VER_UNINITIALIZED] = { .msgs = {
[LIB9P_TYP_Tversion] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tversion),
- r.unmarshal_extrasize = checksize_Tversion,
- r.unmarshal = unmarshal_Tversion,
- r.marshal = (_marshal_fn_t)marshal_Tversion,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tversion),
+ .unmarshal_extrasize = checksize_Tversion,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tversion,
+ .marshal = (_marshal_fn_t)marshal_Tversion,
},
[LIB9P_TYP_Rversion] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rversion),
- r.unmarshal_extrasize = checksize_Rversion,
- r.unmarshal = unmarshal_Rversion,
- r.marshal = (_marshal_fn_t)marshal_Rversion,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rversion),
+ .unmarshal_extrasize = checksize_Rversion,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rversion,
+ .marshal = (_marshal_fn_t)marshal_Rversion,
},
}},
[LIB9P_VER_9P2000] = { .msgs = {
[LIB9P_TYP_Tversion] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tversion),
- r.unmarshal_extrasize = checksize_Tversion,
- r.unmarshal = unmarshal_Tversion,
- r.marshal = (_marshal_fn_t)marshal_Tversion,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tversion),
+ .unmarshal_extrasize = checksize_Tversion,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tversion,
+ .marshal = (_marshal_fn_t)marshal_Tversion,
},
[LIB9P_TYP_Rversion] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rversion),
- r.unmarshal_extrasize = checksize_Rversion,
- r.unmarshal = unmarshal_Rversion,
- r.marshal = (_marshal_fn_t)marshal_Rversion,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rversion),
+ .unmarshal_extrasize = checksize_Rversion,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rversion,
+ .marshal = (_marshal_fn_t)marshal_Rversion,
},
[LIB9P_TYP_Tauth] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tauth),
- r.unmarshal_extrasize = checksize_Tauth,
- r.unmarshal = unmarshal_Tauth,
- r.marshal = (_marshal_fn_t)marshal_Tauth,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tauth),
+ .unmarshal_extrasize = checksize_Tauth,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tauth,
+ .marshal = (_marshal_fn_t)marshal_Tauth,
},
[LIB9P_TYP_Rauth] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rauth),
- r.unmarshal_extrasize = checksize_Rauth,
- r.unmarshal = unmarshal_Rauth,
- r.marshal = (_marshal_fn_t)marshal_Rauth,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rauth),
+ .unmarshal_extrasize = checksize_Rauth,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rauth,
+ .marshal = (_marshal_fn_t)marshal_Rauth,
},
[LIB9P_TYP_Tattach] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tattach),
- r.unmarshal_extrasize = checksize_Tattach,
- r.unmarshal = unmarshal_Tattach,
- r.marshal = (_marshal_fn_t)marshal_Tattach,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tattach),
+ .unmarshal_extrasize = checksize_Tattach,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tattach,
+ .marshal = (_marshal_fn_t)marshal_Tattach,
},
[LIB9P_TYP_Rattach] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rattach),
- r.unmarshal_extrasize = checksize_Rattach,
- r.unmarshal = unmarshal_Rattach,
- r.marshal = (_marshal_fn_t)marshal_Rattach,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rattach),
+ .unmarshal_extrasize = checksize_Rattach,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rattach,
+ .marshal = (_marshal_fn_t)marshal_Rattach,
},
[LIB9P_TYP_Rerror] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rerror),
- r.unmarshal_extrasize = checksize_Rerror,
- r.unmarshal = unmarshal_Rerror,
- r.marshal = (_marshal_fn_t)marshal_Rerror,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rerror),
+ .unmarshal_extrasize = checksize_Rerror,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rerror,
+ .marshal = (_marshal_fn_t)marshal_Rerror,
},
[LIB9P_TYP_Tflush] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tflush),
- r.unmarshal_extrasize = checksize_Tflush,
- r.unmarshal = unmarshal_Tflush,
- r.marshal = (_marshal_fn_t)marshal_Tflush,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tflush),
+ .unmarshal_extrasize = checksize_Tflush,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tflush,
+ .marshal = (_marshal_fn_t)marshal_Tflush,
},
[LIB9P_TYP_Rflush] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rflush),
- r.unmarshal_extrasize = checksize_Rflush,
- r.unmarshal = unmarshal_Rflush,
- r.marshal = (_marshal_fn_t)marshal_Rflush,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rflush),
+ .unmarshal_extrasize = checksize_Rflush,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rflush,
+ .marshal = (_marshal_fn_t)marshal_Rflush,
},
[LIB9P_TYP_Twalk] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Twalk),
- r.unmarshal_extrasize = checksize_Twalk,
- r.unmarshal = unmarshal_Twalk,
- r.marshal = (_marshal_fn_t)marshal_Twalk,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Twalk),
+ .unmarshal_extrasize = checksize_Twalk,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Twalk,
+ .marshal = (_marshal_fn_t)marshal_Twalk,
},
[LIB9P_TYP_Rwalk] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rwalk),
- r.unmarshal_extrasize = checksize_Rwalk,
- r.unmarshal = unmarshal_Rwalk,
- r.marshal = (_marshal_fn_t)marshal_Rwalk,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rwalk),
+ .unmarshal_extrasize = checksize_Rwalk,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rwalk,
+ .marshal = (_marshal_fn_t)marshal_Rwalk,
},
[LIB9P_TYP_Topen] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Topen),
- r.unmarshal_extrasize = checksize_Topen,
- r.unmarshal = unmarshal_Topen,
- r.marshal = (_marshal_fn_t)marshal_Topen,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Topen),
+ .unmarshal_extrasize = checksize_Topen,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Topen,
+ .marshal = (_marshal_fn_t)marshal_Topen,
},
[LIB9P_TYP_Ropen] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Ropen),
- r.unmarshal_extrasize = checksize_Ropen,
- r.unmarshal = unmarshal_Ropen,
- r.marshal = (_marshal_fn_t)marshal_Ropen,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Ropen),
+ .unmarshal_extrasize = checksize_Ropen,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Ropen,
+ .marshal = (_marshal_fn_t)marshal_Ropen,
},
[LIB9P_TYP_Tcreate] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tcreate),
- r.unmarshal_extrasize = checksize_Tcreate,
- r.unmarshal = unmarshal_Tcreate,
- r.marshal = (_marshal_fn_t)marshal_Tcreate,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tcreate),
+ .unmarshal_extrasize = checksize_Tcreate,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tcreate,
+ .marshal = (_marshal_fn_t)marshal_Tcreate,
},
[LIB9P_TYP_Rcreate] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rcreate),
- r.unmarshal_extrasize = checksize_Rcreate,
- r.unmarshal = unmarshal_Rcreate,
- r.marshal = (_marshal_fn_t)marshal_Rcreate,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rcreate),
+ .unmarshal_extrasize = checksize_Rcreate,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rcreate,
+ .marshal = (_marshal_fn_t)marshal_Rcreate,
},
[LIB9P_TYP_Tread] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tread),
- r.unmarshal_extrasize = checksize_Tread,
- r.unmarshal = unmarshal_Tread,
- r.marshal = (_marshal_fn_t)marshal_Tread,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tread),
+ .unmarshal_extrasize = checksize_Tread,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tread,
+ .marshal = (_marshal_fn_t)marshal_Tread,
},
[LIB9P_TYP_Rread] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rread),
- r.unmarshal_extrasize = checksize_Rread,
- r.unmarshal = unmarshal_Rread,
- r.marshal = (_marshal_fn_t)marshal_Rread,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rread),
+ .unmarshal_extrasize = checksize_Rread,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rread,
+ .marshal = (_marshal_fn_t)marshal_Rread,
},
[LIB9P_TYP_Twrite] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Twrite),
- r.unmarshal_extrasize = checksize_Twrite,
- r.unmarshal = unmarshal_Twrite,
- r.marshal = (_marshal_fn_t)marshal_Twrite,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Twrite),
+ .unmarshal_extrasize = checksize_Twrite,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Twrite,
+ .marshal = (_marshal_fn_t)marshal_Twrite,
},
[LIB9P_TYP_Rwrite] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rwrite),
- r.unmarshal_extrasize = checksize_Rwrite,
- r.unmarshal = unmarshal_Rwrite,
- r.marshal = (_marshal_fn_t)marshal_Rwrite,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rwrite),
+ .unmarshal_extrasize = checksize_Rwrite,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rwrite,
+ .marshal = (_marshal_fn_t)marshal_Rwrite,
},
[LIB9P_TYP_Tclunk] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tclunk),
- r.unmarshal_extrasize = checksize_Tclunk,
- r.unmarshal = unmarshal_Tclunk,
- r.marshal = (_marshal_fn_t)marshal_Tclunk,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tclunk),
+ .unmarshal_extrasize = checksize_Tclunk,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tclunk,
+ .marshal = (_marshal_fn_t)marshal_Tclunk,
},
[LIB9P_TYP_Rclunk] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rclunk),
- r.unmarshal_extrasize = checksize_Rclunk,
- r.unmarshal = unmarshal_Rclunk,
- r.marshal = (_marshal_fn_t)marshal_Rclunk,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rclunk),
+ .unmarshal_extrasize = checksize_Rclunk,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rclunk,
+ .marshal = (_marshal_fn_t)marshal_Rclunk,
},
[LIB9P_TYP_Tremove] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tremove),
- r.unmarshal_extrasize = checksize_Tremove,
- r.unmarshal = unmarshal_Tremove,
- r.marshal = (_marshal_fn_t)marshal_Tremove,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tremove),
+ .unmarshal_extrasize = checksize_Tremove,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tremove,
+ .marshal = (_marshal_fn_t)marshal_Tremove,
},
[LIB9P_TYP_Rremove] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rremove),
- r.unmarshal_extrasize = checksize_Rremove,
- r.unmarshal = unmarshal_Rremove,
- r.marshal = (_marshal_fn_t)marshal_Rremove,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rremove),
+ .unmarshal_extrasize = checksize_Rremove,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rremove,
+ .marshal = (_marshal_fn_t)marshal_Rremove,
},
[LIB9P_TYP_Tstat] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tstat),
- r.unmarshal_extrasize = checksize_Tstat,
- r.unmarshal = unmarshal_Tstat,
- r.marshal = (_marshal_fn_t)marshal_Tstat,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tstat),
+ .unmarshal_extrasize = checksize_Tstat,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tstat,
+ .marshal = (_marshal_fn_t)marshal_Tstat,
},
[LIB9P_TYP_Rstat] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rstat),
- r.unmarshal_extrasize = checksize_Rstat,
- r.unmarshal = unmarshal_Rstat,
- r.marshal = (_marshal_fn_t)marshal_Rstat,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rstat),
+ .unmarshal_extrasize = checksize_Rstat,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rstat,
+ .marshal = (_marshal_fn_t)marshal_Rstat,
},
[LIB9P_TYP_Twstat] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Twstat),
- r.unmarshal_extrasize = checksize_Twstat,
- r.unmarshal = unmarshal_Twstat,
- r.marshal = (_marshal_fn_t)marshal_Twstat,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Twstat),
+ .unmarshal_extrasize = checksize_Twstat,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Twstat,
+ .marshal = (_marshal_fn_t)marshal_Twstat,
},
[LIB9P_TYP_Rwstat] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rwstat),
- r.unmarshal_extrasize = checksize_Rwstat,
- r.unmarshal = unmarshal_Rwstat,
- r.marshal = (_marshal_fn_t)marshal_Rwstat,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rwstat),
+ .unmarshal_extrasize = checksize_Rwstat,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rwstat,
+ .marshal = (_marshal_fn_t)marshal_Rwstat,
},
}},
[LIB9P_VER_9P2000_e] = { .msgs = {
[LIB9P_TYP_Tversion] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tversion),
- r.unmarshal_extrasize = checksize_Tversion,
- r.unmarshal = unmarshal_Tversion,
- r.marshal = (_marshal_fn_t)marshal_Tversion,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tversion),
+ .unmarshal_extrasize = checksize_Tversion,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tversion,
+ .marshal = (_marshal_fn_t)marshal_Tversion,
},
[LIB9P_TYP_Rversion] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rversion),
- r.unmarshal_extrasize = checksize_Rversion,
- r.unmarshal = unmarshal_Rversion,
- r.marshal = (_marshal_fn_t)marshal_Rversion,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rversion),
+ .unmarshal_extrasize = checksize_Rversion,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rversion,
+ .marshal = (_marshal_fn_t)marshal_Rversion,
},
[LIB9P_TYP_Tauth] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tauth),
- r.unmarshal_extrasize = checksize_Tauth,
- r.unmarshal = unmarshal_Tauth,
- r.marshal = (_marshal_fn_t)marshal_Tauth,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tauth),
+ .unmarshal_extrasize = checksize_Tauth,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tauth,
+ .marshal = (_marshal_fn_t)marshal_Tauth,
},
[LIB9P_TYP_Rauth] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rauth),
- r.unmarshal_extrasize = checksize_Rauth,
- r.unmarshal = unmarshal_Rauth,
- r.marshal = (_marshal_fn_t)marshal_Rauth,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rauth),
+ .unmarshal_extrasize = checksize_Rauth,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rauth,
+ .marshal = (_marshal_fn_t)marshal_Rauth,
},
[LIB9P_TYP_Tattach] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tattach),
- r.unmarshal_extrasize = checksize_Tattach,
- r.unmarshal = unmarshal_Tattach,
- r.marshal = (_marshal_fn_t)marshal_Tattach,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tattach),
+ .unmarshal_extrasize = checksize_Tattach,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tattach,
+ .marshal = (_marshal_fn_t)marshal_Tattach,
},
[LIB9P_TYP_Rattach] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rattach),
- r.unmarshal_extrasize = checksize_Rattach,
- r.unmarshal = unmarshal_Rattach,
- r.marshal = (_marshal_fn_t)marshal_Rattach,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rattach),
+ .unmarshal_extrasize = checksize_Rattach,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rattach,
+ .marshal = (_marshal_fn_t)marshal_Rattach,
},
[LIB9P_TYP_Rerror] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rerror),
- r.unmarshal_extrasize = checksize_Rerror,
- r.unmarshal = unmarshal_Rerror,
- r.marshal = (_marshal_fn_t)marshal_Rerror,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rerror),
+ .unmarshal_extrasize = checksize_Rerror,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rerror,
+ .marshal = (_marshal_fn_t)marshal_Rerror,
},
[LIB9P_TYP_Tflush] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tflush),
- r.unmarshal_extrasize = checksize_Tflush,
- r.unmarshal = unmarshal_Tflush,
- r.marshal = (_marshal_fn_t)marshal_Tflush,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tflush),
+ .unmarshal_extrasize = checksize_Tflush,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tflush,
+ .marshal = (_marshal_fn_t)marshal_Tflush,
},
[LIB9P_TYP_Rflush] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rflush),
- r.unmarshal_extrasize = checksize_Rflush,
- r.unmarshal = unmarshal_Rflush,
- r.marshal = (_marshal_fn_t)marshal_Rflush,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rflush),
+ .unmarshal_extrasize = checksize_Rflush,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rflush,
+ .marshal = (_marshal_fn_t)marshal_Rflush,
},
[LIB9P_TYP_Twalk] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Twalk),
- r.unmarshal_extrasize = checksize_Twalk,
- r.unmarshal = unmarshal_Twalk,
- r.marshal = (_marshal_fn_t)marshal_Twalk,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Twalk),
+ .unmarshal_extrasize = checksize_Twalk,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Twalk,
+ .marshal = (_marshal_fn_t)marshal_Twalk,
},
[LIB9P_TYP_Rwalk] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rwalk),
- r.unmarshal_extrasize = checksize_Rwalk,
- r.unmarshal = unmarshal_Rwalk,
- r.marshal = (_marshal_fn_t)marshal_Rwalk,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rwalk),
+ .unmarshal_extrasize = checksize_Rwalk,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rwalk,
+ .marshal = (_marshal_fn_t)marshal_Rwalk,
},
[LIB9P_TYP_Topen] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Topen),
- r.unmarshal_extrasize = checksize_Topen,
- r.unmarshal = unmarshal_Topen,
- r.marshal = (_marshal_fn_t)marshal_Topen,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Topen),
+ .unmarshal_extrasize = checksize_Topen,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Topen,
+ .marshal = (_marshal_fn_t)marshal_Topen,
},
[LIB9P_TYP_Ropen] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Ropen),
- r.unmarshal_extrasize = checksize_Ropen,
- r.unmarshal = unmarshal_Ropen,
- r.marshal = (_marshal_fn_t)marshal_Ropen,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Ropen),
+ .unmarshal_extrasize = checksize_Ropen,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Ropen,
+ .marshal = (_marshal_fn_t)marshal_Ropen,
},
[LIB9P_TYP_Tcreate] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tcreate),
- r.unmarshal_extrasize = checksize_Tcreate,
- r.unmarshal = unmarshal_Tcreate,
- r.marshal = (_marshal_fn_t)marshal_Tcreate,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tcreate),
+ .unmarshal_extrasize = checksize_Tcreate,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tcreate,
+ .marshal = (_marshal_fn_t)marshal_Tcreate,
},
[LIB9P_TYP_Rcreate] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rcreate),
- r.unmarshal_extrasize = checksize_Rcreate,
- r.unmarshal = unmarshal_Rcreate,
- r.marshal = (_marshal_fn_t)marshal_Rcreate,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rcreate),
+ .unmarshal_extrasize = checksize_Rcreate,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rcreate,
+ .marshal = (_marshal_fn_t)marshal_Rcreate,
},
[LIB9P_TYP_Tread] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tread),
- r.unmarshal_extrasize = checksize_Tread,
- r.unmarshal = unmarshal_Tread,
- r.marshal = (_marshal_fn_t)marshal_Tread,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tread),
+ .unmarshal_extrasize = checksize_Tread,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tread,
+ .marshal = (_marshal_fn_t)marshal_Tread,
},
[LIB9P_TYP_Rread] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rread),
- r.unmarshal_extrasize = checksize_Rread,
- r.unmarshal = unmarshal_Rread,
- r.marshal = (_marshal_fn_t)marshal_Rread,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rread),
+ .unmarshal_extrasize = checksize_Rread,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rread,
+ .marshal = (_marshal_fn_t)marshal_Rread,
},
[LIB9P_TYP_Twrite] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Twrite),
- r.unmarshal_extrasize = checksize_Twrite,
- r.unmarshal = unmarshal_Twrite,
- r.marshal = (_marshal_fn_t)marshal_Twrite,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Twrite),
+ .unmarshal_extrasize = checksize_Twrite,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Twrite,
+ .marshal = (_marshal_fn_t)marshal_Twrite,
},
[LIB9P_TYP_Rwrite] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rwrite),
- r.unmarshal_extrasize = checksize_Rwrite,
- r.unmarshal = unmarshal_Rwrite,
- r.marshal = (_marshal_fn_t)marshal_Rwrite,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rwrite),
+ .unmarshal_extrasize = checksize_Rwrite,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rwrite,
+ .marshal = (_marshal_fn_t)marshal_Rwrite,
},
[LIB9P_TYP_Tclunk] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tclunk),
- r.unmarshal_extrasize = checksize_Tclunk,
- r.unmarshal = unmarshal_Tclunk,
- r.marshal = (_marshal_fn_t)marshal_Tclunk,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tclunk),
+ .unmarshal_extrasize = checksize_Tclunk,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tclunk,
+ .marshal = (_marshal_fn_t)marshal_Tclunk,
},
[LIB9P_TYP_Rclunk] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rclunk),
- r.unmarshal_extrasize = checksize_Rclunk,
- r.unmarshal = unmarshal_Rclunk,
- r.marshal = (_marshal_fn_t)marshal_Rclunk,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rclunk),
+ .unmarshal_extrasize = checksize_Rclunk,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rclunk,
+ .marshal = (_marshal_fn_t)marshal_Rclunk,
},
[LIB9P_TYP_Tremove] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tremove),
- r.unmarshal_extrasize = checksize_Tremove,
- r.unmarshal = unmarshal_Tremove,
- r.marshal = (_marshal_fn_t)marshal_Tremove,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tremove),
+ .unmarshal_extrasize = checksize_Tremove,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tremove,
+ .marshal = (_marshal_fn_t)marshal_Tremove,
},
[LIB9P_TYP_Rremove] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rremove),
- r.unmarshal_extrasize = checksize_Rremove,
- r.unmarshal = unmarshal_Rremove,
- r.marshal = (_marshal_fn_t)marshal_Rremove,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rremove),
+ .unmarshal_extrasize = checksize_Rremove,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rremove,
+ .marshal = (_marshal_fn_t)marshal_Rremove,
},
[LIB9P_TYP_Tstat] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tstat),
- r.unmarshal_extrasize = checksize_Tstat,
- r.unmarshal = unmarshal_Tstat,
- r.marshal = (_marshal_fn_t)marshal_Tstat,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tstat),
+ .unmarshal_extrasize = checksize_Tstat,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tstat,
+ .marshal = (_marshal_fn_t)marshal_Tstat,
},
[LIB9P_TYP_Rstat] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rstat),
- r.unmarshal_extrasize = checksize_Rstat,
- r.unmarshal = unmarshal_Rstat,
- r.marshal = (_marshal_fn_t)marshal_Rstat,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rstat),
+ .unmarshal_extrasize = checksize_Rstat,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rstat,
+ .marshal = (_marshal_fn_t)marshal_Rstat,
},
[LIB9P_TYP_Twstat] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Twstat),
- r.unmarshal_extrasize = checksize_Twstat,
- r.unmarshal = unmarshal_Twstat,
- r.marshal = (_marshal_fn_t)marshal_Twstat,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Twstat),
+ .unmarshal_extrasize = checksize_Twstat,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Twstat,
+ .marshal = (_marshal_fn_t)marshal_Twstat,
},
[LIB9P_TYP_Rwstat] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rwstat),
- r.unmarshal_extrasize = checksize_Rwstat,
- r.unmarshal = unmarshal_Rwstat,
- r.marshal = (_marshal_fn_t)marshal_Rwstat,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rwstat),
+ .unmarshal_extrasize = checksize_Rwstat,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rwstat,
+ .marshal = (_marshal_fn_t)marshal_Rwstat,
},
[LIB9P_TYP_Tsession] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tsession),
- r.unmarshal_extrasize = checksize_Tsession,
- r.unmarshal = unmarshal_Tsession,
- r.marshal = (_marshal_fn_t)marshal_Tsession,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tsession),
+ .unmarshal_extrasize = checksize_Tsession,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tsession,
+ .marshal = (_marshal_fn_t)marshal_Tsession,
},
[LIB9P_TYP_Rsession] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rsession),
- r.unmarshal_extrasize = checksize_Rsession,
- r.unmarshal = unmarshal_Rsession,
- r.marshal = (_marshal_fn_t)marshal_Rsession,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rsession),
+ .unmarshal_extrasize = checksize_Rsession,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rsession,
+ .marshal = (_marshal_fn_t)marshal_Rsession,
},
[LIB9P_TYP_Tsread] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tsread),
- r.unmarshal_extrasize = checksize_Tsread,
- r.unmarshal = unmarshal_Tsread,
- r.marshal = (_marshal_fn_t)marshal_Tsread,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tsread),
+ .unmarshal_extrasize = checksize_Tsread,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tsread,
+ .marshal = (_marshal_fn_t)marshal_Tsread,
},
[LIB9P_TYP_Rsread] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rsread),
- r.unmarshal_extrasize = checksize_Rsread,
- r.unmarshal = unmarshal_Rsread,
- r.marshal = (_marshal_fn_t)marshal_Rsread,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rsread),
+ .unmarshal_extrasize = checksize_Rsread,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rsread,
+ .marshal = (_marshal_fn_t)marshal_Rsread,
},
[LIB9P_TYP_Tswrite] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tswrite),
- r.unmarshal_extrasize = checksize_Tswrite,
- r.unmarshal = unmarshal_Tswrite,
- r.marshal = (_marshal_fn_t)marshal_Tswrite,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tswrite),
+ .unmarshal_extrasize = checksize_Tswrite,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tswrite,
+ .marshal = (_marshal_fn_t)marshal_Tswrite,
},
[LIB9P_TYP_Rswrite] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rswrite),
- r.unmarshal_extrasize = checksize_Rswrite,
- r.unmarshal = unmarshal_Rswrite,
- r.marshal = (_marshal_fn_t)marshal_Rswrite,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rswrite),
+ .unmarshal_extrasize = checksize_Rswrite,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rswrite,
+ .marshal = (_marshal_fn_t)marshal_Rswrite,
},
}},
[LIB9P_VER_9P2000_u] = { .msgs = {
[LIB9P_TYP_Tversion] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tversion),
- r.unmarshal_extrasize = checksize_Tversion,
- r.unmarshal = unmarshal_Tversion,
- r.marshal = (_marshal_fn_t)marshal_Tversion,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tversion),
+ .unmarshal_extrasize = checksize_Tversion,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tversion,
+ .marshal = (_marshal_fn_t)marshal_Tversion,
},
[LIB9P_TYP_Rversion] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rversion),
- r.unmarshal_extrasize = checksize_Rversion,
- r.unmarshal = unmarshal_Rversion,
- r.marshal = (_marshal_fn_t)marshal_Rversion,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rversion),
+ .unmarshal_extrasize = checksize_Rversion,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rversion,
+ .marshal = (_marshal_fn_t)marshal_Rversion,
},
[LIB9P_TYP_Tauth] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tauth),
- r.unmarshal_extrasize = checksize_Tauth,
- r.unmarshal = unmarshal_Tauth,
- r.marshal = (_marshal_fn_t)marshal_Tauth,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tauth),
+ .unmarshal_extrasize = checksize_Tauth,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tauth,
+ .marshal = (_marshal_fn_t)marshal_Tauth,
},
[LIB9P_TYP_Rauth] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rauth),
- r.unmarshal_extrasize = checksize_Rauth,
- r.unmarshal = unmarshal_Rauth,
- r.marshal = (_marshal_fn_t)marshal_Rauth,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rauth),
+ .unmarshal_extrasize = checksize_Rauth,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rauth,
+ .marshal = (_marshal_fn_t)marshal_Rauth,
},
[LIB9P_TYP_Tattach] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tattach),
- r.unmarshal_extrasize = checksize_Tattach,
- r.unmarshal = unmarshal_Tattach,
- r.marshal = (_marshal_fn_t)marshal_Tattach,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tattach),
+ .unmarshal_extrasize = checksize_Tattach,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tattach,
+ .marshal = (_marshal_fn_t)marshal_Tattach,
},
[LIB9P_TYP_Rattach] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rattach),
- r.unmarshal_extrasize = checksize_Rattach,
- r.unmarshal = unmarshal_Rattach,
- r.marshal = (_marshal_fn_t)marshal_Rattach,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rattach),
+ .unmarshal_extrasize = checksize_Rattach,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rattach,
+ .marshal = (_marshal_fn_t)marshal_Rattach,
},
[LIB9P_TYP_Rerror] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rerror),
- r.unmarshal_extrasize = checksize_Rerror,
- r.unmarshal = unmarshal_Rerror,
- r.marshal = (_marshal_fn_t)marshal_Rerror,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rerror),
+ .unmarshal_extrasize = checksize_Rerror,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rerror,
+ .marshal = (_marshal_fn_t)marshal_Rerror,
},
[LIB9P_TYP_Tflush] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tflush),
- r.unmarshal_extrasize = checksize_Tflush,
- r.unmarshal = unmarshal_Tflush,
- r.marshal = (_marshal_fn_t)marshal_Tflush,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tflush),
+ .unmarshal_extrasize = checksize_Tflush,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tflush,
+ .marshal = (_marshal_fn_t)marshal_Tflush,
},
[LIB9P_TYP_Rflush] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rflush),
- r.unmarshal_extrasize = checksize_Rflush,
- r.unmarshal = unmarshal_Rflush,
- r.marshal = (_marshal_fn_t)marshal_Rflush,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rflush),
+ .unmarshal_extrasize = checksize_Rflush,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rflush,
+ .marshal = (_marshal_fn_t)marshal_Rflush,
},
[LIB9P_TYP_Twalk] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Twalk),
- r.unmarshal_extrasize = checksize_Twalk,
- r.unmarshal = unmarshal_Twalk,
- r.marshal = (_marshal_fn_t)marshal_Twalk,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Twalk),
+ .unmarshal_extrasize = checksize_Twalk,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Twalk,
+ .marshal = (_marshal_fn_t)marshal_Twalk,
},
[LIB9P_TYP_Rwalk] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rwalk),
- r.unmarshal_extrasize = checksize_Rwalk,
- r.unmarshal = unmarshal_Rwalk,
- r.marshal = (_marshal_fn_t)marshal_Rwalk,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rwalk),
+ .unmarshal_extrasize = checksize_Rwalk,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rwalk,
+ .marshal = (_marshal_fn_t)marshal_Rwalk,
},
[LIB9P_TYP_Topen] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Topen),
- r.unmarshal_extrasize = checksize_Topen,
- r.unmarshal = unmarshal_Topen,
- r.marshal = (_marshal_fn_t)marshal_Topen,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Topen),
+ .unmarshal_extrasize = checksize_Topen,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Topen,
+ .marshal = (_marshal_fn_t)marshal_Topen,
},
[LIB9P_TYP_Ropen] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Ropen),
- r.unmarshal_extrasize = checksize_Ropen,
- r.unmarshal = unmarshal_Ropen,
- r.marshal = (_marshal_fn_t)marshal_Ropen,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Ropen),
+ .unmarshal_extrasize = checksize_Ropen,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Ropen,
+ .marshal = (_marshal_fn_t)marshal_Ropen,
},
[LIB9P_TYP_Tcreate] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tcreate),
- r.unmarshal_extrasize = checksize_Tcreate,
- r.unmarshal = unmarshal_Tcreate,
- r.marshal = (_marshal_fn_t)marshal_Tcreate,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tcreate),
+ .unmarshal_extrasize = checksize_Tcreate,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tcreate,
+ .marshal = (_marshal_fn_t)marshal_Tcreate,
},
[LIB9P_TYP_Rcreate] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rcreate),
- r.unmarshal_extrasize = checksize_Rcreate,
- r.unmarshal = unmarshal_Rcreate,
- r.marshal = (_marshal_fn_t)marshal_Rcreate,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rcreate),
+ .unmarshal_extrasize = checksize_Rcreate,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rcreate,
+ .marshal = (_marshal_fn_t)marshal_Rcreate,
},
[LIB9P_TYP_Tread] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tread),
- r.unmarshal_extrasize = checksize_Tread,
- r.unmarshal = unmarshal_Tread,
- r.marshal = (_marshal_fn_t)marshal_Tread,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tread),
+ .unmarshal_extrasize = checksize_Tread,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tread,
+ .marshal = (_marshal_fn_t)marshal_Tread,
},
[LIB9P_TYP_Rread] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rread),
- r.unmarshal_extrasize = checksize_Rread,
- r.unmarshal = unmarshal_Rread,
- r.marshal = (_marshal_fn_t)marshal_Rread,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rread),
+ .unmarshal_extrasize = checksize_Rread,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rread,
+ .marshal = (_marshal_fn_t)marshal_Rread,
},
[LIB9P_TYP_Twrite] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Twrite),
- r.unmarshal_extrasize = checksize_Twrite,
- r.unmarshal = unmarshal_Twrite,
- r.marshal = (_marshal_fn_t)marshal_Twrite,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Twrite),
+ .unmarshal_extrasize = checksize_Twrite,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Twrite,
+ .marshal = (_marshal_fn_t)marshal_Twrite,
},
[LIB9P_TYP_Rwrite] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rwrite),
- r.unmarshal_extrasize = checksize_Rwrite,
- r.unmarshal = unmarshal_Rwrite,
- r.marshal = (_marshal_fn_t)marshal_Rwrite,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rwrite),
+ .unmarshal_extrasize = checksize_Rwrite,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rwrite,
+ .marshal = (_marshal_fn_t)marshal_Rwrite,
},
[LIB9P_TYP_Tclunk] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tclunk),
- r.unmarshal_extrasize = checksize_Tclunk,
- r.unmarshal = unmarshal_Tclunk,
- r.marshal = (_marshal_fn_t)marshal_Tclunk,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tclunk),
+ .unmarshal_extrasize = checksize_Tclunk,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tclunk,
+ .marshal = (_marshal_fn_t)marshal_Tclunk,
},
[LIB9P_TYP_Rclunk] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rclunk),
- r.unmarshal_extrasize = checksize_Rclunk,
- r.unmarshal = unmarshal_Rclunk,
- r.marshal = (_marshal_fn_t)marshal_Rclunk,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rclunk),
+ .unmarshal_extrasize = checksize_Rclunk,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rclunk,
+ .marshal = (_marshal_fn_t)marshal_Rclunk,
},
[LIB9P_TYP_Tremove] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tremove),
- r.unmarshal_extrasize = checksize_Tremove,
- r.unmarshal = unmarshal_Tremove,
- r.marshal = (_marshal_fn_t)marshal_Tremove,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tremove),
+ .unmarshal_extrasize = checksize_Tremove,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tremove,
+ .marshal = (_marshal_fn_t)marshal_Tremove,
},
[LIB9P_TYP_Rremove] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rremove),
- r.unmarshal_extrasize = checksize_Rremove,
- r.unmarshal = unmarshal_Rremove,
- r.marshal = (_marshal_fn_t)marshal_Rremove,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rremove),
+ .unmarshal_extrasize = checksize_Rremove,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rremove,
+ .marshal = (_marshal_fn_t)marshal_Rremove,
},
[LIB9P_TYP_Tstat] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Tstat),
- r.unmarshal_extrasize = checksize_Tstat,
- r.unmarshal = unmarshal_Tstat,
- r.marshal = (_marshal_fn_t)marshal_Tstat,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Tstat),
+ .unmarshal_extrasize = checksize_Tstat,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Tstat,
+ .marshal = (_marshal_fn_t)marshal_Tstat,
},
[LIB9P_TYP_Rstat] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rstat),
- r.unmarshal_extrasize = checksize_Rstat,
- r.unmarshal = unmarshal_Rstat,
- r.marshal = (_marshal_fn_t)marshal_Rstat,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rstat),
+ .unmarshal_extrasize = checksize_Rstat,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rstat,
+ .marshal = (_marshal_fn_t)marshal_Rstat,
},
[LIB9P_TYP_Twstat] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Twstat),
- r.unmarshal_extrasize = checksize_Twstat,
- r.unmarshal = unmarshal_Twstat,
- r.marshal = (_marshal_fn_t)marshal_Twstat,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Twstat),
+ .unmarshal_extrasize = checksize_Twstat,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Twstat,
+ .marshal = (_marshal_fn_t)marshal_Twstat,
},
[LIB9P_TYP_Rwstat] = {
- r.unmarshal_basesize = sizeof(struct lib9p_msg_Rwstat),
- r.unmarshal_extrasize = checksize_Rwstat,
- r.unmarshal = unmarshal_Rwstat,
- r.marshal = (_marshal_fn_t)marshal_Rwstat,
+ .unmarshal_basesize = sizeof(struct lib9p_msg_Rwstat),
+ .unmarshal_extrasize = checksize_Rwstat,
+ .unmarshal = (_unmarshal_fn_t)unmarshal_Rwstat,
+ .marshal = (_marshal_fn_t)marshal_Rwstat,
},
}},
};
diff --git a/lib9p/types.gen b/lib9p/types.gen
index 0de5068..48f8107 100755
--- a/lib9p/types.gen
+++ b/lib9p/types.gen
@@ -222,7 +222,7 @@ def gen_h(idprefix: str, versions: set[str], structs: list[Struct]) -> str:
#ifndef {guard}
#define {guard}
-#include <stdint.h>
+#include <stdint.h> /* for uint{{n}}_t types */
"""
ret += f"""
@@ -322,6 +322,9 @@ def gen_c(idprefix: str, versions: set[str], structs: list[Struct]) -> str:
ret = f"""/* Generated by `{' '.join(sys.argv)}`. DO NOT EDIT! */
#include <stdbool.h>
+#include <stddef.h> /* for size_t */
+#include <inttypes.h> /* for PRI* macros */
+#include <string.h> /* for memset() */
#include <lib9p/9p.h>
@@ -390,20 +393,20 @@ static inline bool _checksize_list(struct _checksize_ctx *ctx,
# this, but let's make it obvious.
ret += "\n"
ret += "\tuint32_t base_offset = ctx->net_offset;\n"
- ret += "\tif (_checksize_4(ctx))\n"
+ ret += "\tif (checksize_4(ctx))\n"
ret += "\t\treturn true;\n"
ret += "\tuint32_t len = decode_u32le(&ctx->net_bytes[base_offset]);\n"
- ret += "\treturn checksize_net(ctx, len) || checksize_host(ctx, len);\n"
+ ret += "\treturn _checksize_net(ctx, len) || _checksize_host(ctx, len);\n"
ret += "}\n"
case "s":
# Add an extra nul-byte on the host, and validate
# UTF-8 (also, similar optimization to "d").
ret += "\n"
ret += "\tuint32_t base_offset = ctx->net_offset;\n"
- ret += "\tif (_checksize_2(ctx))\n"
+ ret += "\tif (checksize_2(ctx))\n"
ret += "\t\treturn true;\n"
ret += "\tuint16_t len = decode_u16le(&ctx->net_bytes[base_offset]);\n"
- ret += "\tif (checksize_net(ctx, len) || checksize_host(ctx, ((size_t)len)+1))\n"
+ ret += "\tif (_checksize_net(ctx, len) || _checksize_host(ctx, ((size_t)len)+1))\n"
ret += "\t\treturn true;\n"
ret += "\tif (!is_valid_utf8_without_nul(&ctx->net_bytes[base_offset+2], len))\n"
ret += '\t\treturn lib9p_error(ctx->ctx, LINUX_EBADMSG, "message contains invalid UTF-8");\n'
@@ -442,22 +445,22 @@ static inline bool _checksize_list(struct _checksize_ctx *ctx,
ret += """
/* unmarshal_* ****************************************************************/
-static inline vold unmarshal_1(struct _unmarshal_ctx *ctx, uint8_t *out) {
+static inline void unmarshal_1(struct _unmarshal_ctx *ctx, uint8_t *out) {
*out = decode_u8le(&ctx->net_bytes[ctx->net_offset]);
ctx->net_offset += 1;
}
-static inline vold unmarshal_2(struct _unmarshal_ctx *ctx, uint16_t *out) {
+static inline void unmarshal_2(struct _unmarshal_ctx *ctx, uint16_t *out) {
*out = decode_u16le(&ctx->net_bytes[ctx->net_offset]);
ctx->net_offset += 2;
}
-static inline vold unmarshal_4(struct _unmarshal_ctx *ctx, uint32_t *out) {
+static inline void unmarshal_4(struct _unmarshal_ctx *ctx, uint32_t *out) {
*out = decode_u32le(&ctx->net_bytes[ctx->net_offset]);
ctx->net_offset += 4;
}
-static inline vold unmarshal_8(struct _unmarshal_ctx *ctx, uint64_t *out) {
+static inline void unmarshal_8(struct _unmarshal_ctx *ctx, uint64_t *out) {
*out = decode_u64le(&ctx->net_bytes[ctx->net_offset]);
ctx->net_offset += 8;
}
@@ -466,7 +469,7 @@ static inline vold unmarshal_8(struct _unmarshal_ctx *ctx, uint64_t *out) {
inline = " inline" if struct.msgid is None else ""
argfn = used if struct.members else unused
ret += "\n"
- ret += f"static{inline} void unmarshal_{struct.name}(struct _unmarshal_ctx *{argfn('ctx')}, {c_typename(idprefix, struct)} *{argfn('out')}) {{\n"
+ ret += f"static{inline} void unmarshal_{struct.name}(struct _unmarshal_ctx *{argfn('ctx')}, {c_typename(idprefix, struct)} *out) {{\n"
ret += "\tmemset(out, 0, sizeof(*out));\n"
if struct.members:
@@ -489,8 +492,8 @@ static inline vold unmarshal_8(struct _unmarshal_ctx *ctx, uint64_t *out) {
if member.cnt:
if member.ver != struct_versions:
ret += "{\n"
- ret += f"{prefix}out->{member.name} = ctx->host_extra;\n"
- ret += f"{prefix}ctx->host_extra += sizeof(out->{member.name}[0]) * out->{member.cnt};\n"
+ ret += f"{prefix}out->{member.name} = ctx->extra;\n"
+ ret += f"{prefix}ctx->extra += sizeof(out->{member.name}[0]) * out->{member.cnt};\n"
ret += f"{prefix}for (typeof(out->{member.cnt}) i = 0; i < out->{member.cnt}; i++)\n"
ret += f"{prefix}\tunmarshal_{member.typ.name}(ctx, &out->{member.name}[i]);\n"
if member.ver != struct_versions:
@@ -504,43 +507,43 @@ static inline vold unmarshal_8(struct _unmarshal_ctx *ctx, uint64_t *out) {
/* marshal_* ******************************************************************/
static inline bool _marshal_too_large(struct _marshal_ctx *ctx) {
- lib9p_errorf(ctx->ctx, "%s too large to marshal into %s limit (limit=%"PRIu32")",
+ lib9p_errorf(ctx->ctx, LINUX_EMSGSIZE, "%s too large to marshal into %s limit (limit=%"PRIu32")",
(ctx->net_bytes[4] % 2 == 0) ? "T-message" : "R-message",
ctx->ctx->version ? "negotiated" : ((ctx->net_bytes[4] % 2 == 0) ? "client" : "server"),
- ctx->ctx->max_msg_size));
- return true;
+ ctx->ctx->max_msg_size);
+ return true;
}
static inline bool marshal_1(struct _marshal_ctx *ctx, uint8_t *val) {
- if (ctx->net_offset + 1 > ctx->max_msg_size)
- return _marshal_too_large(ctx);
- out_net_bytes[ctx->net_offset] = *val;
+ if (ctx->net_offset + 1 > ctx->ctx->max_msg_size)
+ return _marshal_too_large(ctx);
+ ctx->net_bytes[ctx->net_offset] = *val;
ctx->net_offset += 1;
- return false;
+ return false;
}
static inline bool marshal_2(struct _marshal_ctx *ctx, uint16_t *val) {
- if (ctx->net_offset + 2 > ctx->max_msg_size)
- return _marshal_too_large(ctx);
- encode_u16le(*val, &out_net_bytes[ctx->net_offset]);
+ if (ctx->net_offset + 2 > ctx->ctx->max_msg_size)
+ return _marshal_too_large(ctx);
+ encode_u16le(*val, &ctx->net_bytes[ctx->net_offset]);
ctx->net_offset += 2;
- return false;
+ return false;
}
static inline bool marshal_4(struct _marshal_ctx *ctx, uint32_t *val) {
- if (ctx->net_offset + 4 > ctx->max_msg_size)
+ if (ctx->net_offset + 4 > ctx->ctx->max_msg_size)
return true;
- encode_u32le(*val, &out_net_bytes[ctx->net_offset]);
+ encode_u32le(*val, &ctx->net_bytes[ctx->net_offset]);
ctx->net_offset += 4;
- return false;
+ return false;
}
static inline bool marshal_8(struct _marshal_ctx *ctx, uint64_t *val) {
- if (ctx->net_offset + 8 > ctx->max_msg_size)
+ if (ctx->net_offset + 8 > ctx->ctx->max_msg_size)
return true;
- encode_u64le(*val, &out_net_bytes[ctx->net_offset]);
+ encode_u64le(*val, &ctx->net_bytes[ctx->net_offset]);
ctx->net_offset += 8;
- return false;
+ return false;
}
"""
for struct in structs:
@@ -563,7 +566,7 @@ static inline bool marshal_8(struct _marshal_ctx *ctx, uint64_t *val) {
ret += f"\n{prefix }({{"
ret += f"\n{prefix2}\tbool err = false;"
ret += f"\n{prefix2}\tfor (typeof(val->{member.cnt}) i = 0; i < val->{member.cnt} && !err; i++)"
- ret += f"\n{prefix2}\t\terr = marshal_{member.typ.name}(ctx, &val->{member.name}[i]));"
+ ret += f"\n{prefix2}\t\terr = marshal_{member.typ.name}(ctx, &val->{member.name}[i]);"
ret += f"\n{prefix2}\terr;"
ret += f"\n{prefix2}}})"
else:
@@ -575,10 +578,10 @@ static inline bool marshal_8(struct _marshal_ctx *ctx, uint64_t *val) {
def msg_entry(msg: Struct) -> str:
ret = ""
ret += f"\t\t[{idprefix.upper()}TYP_{msg.name}] = {{\n"
- ret += f"\t\t\tr.unmarshal_basesize = sizeof({c_typename(idprefix, msg)}),\n"
- ret += f"\t\t\tr.unmarshal_extrasize = checksize_{msg.name},\n"
- ret += f"\t\t\tr.unmarshal = unmarshal_{msg.name},\n"
- ret += f"\t\t\tr.marshal = (_marshal_fn_t)marshal_{msg.name},\n"
+ ret += f"\t\t\t.unmarshal_basesize = sizeof({c_typename(idprefix, msg)}),\n"
+ ret += f"\t\t\t.unmarshal_extrasize = checksize_{msg.name},\n"
+ ret += f"\t\t\t.unmarshal = (_unmarshal_fn_t)unmarshal_{msg.name},\n"
+ ret += f"\t\t\t.marshal = (_marshal_fn_t)marshal_{msg.name},\n"
ret += "\t\t}"
return ret