summaryrefslogtreecommitdiff
path: root/lib9p/9p.generated.c
diff options
context:
space:
mode:
authorLuke T. Shumaker <lukeshu@lukeshu.com>2025-01-28 01:35:57 -0700
committerLuke T. Shumaker <lukeshu@lukeshu.com>2025-02-12 20:55:19 -0700
commit9fc8825764cb9d860a26ac3eab59a4ff164cca71 (patch)
treedae41706581285fbdfc8ea783b33c8ae093295d9 /lib9p/9p.generated.c
parenta24a60232204702fe245c312edb0c2c8041b17a8 (diff)
lib9p: Don't copy byte-arrays when unmarshaling
Diffstat (limited to 'lib9p/9p.generated.c')
-rw-r--r--lib9p/9p.generated.c48
1 files changed, 18 insertions, 30 deletions
diff --git a/lib9p/9p.generated.c b/lib9p/9p.generated.c
index 98ec7bf..eca0666 100644
--- a/lib9p/9p.generated.c
+++ b/lib9p/9p.generated.c
@@ -431,7 +431,7 @@ LM_ALWAYS_INLINE static bool validate_s(struct _validate_ctx *ctx) {
uint16_t len;
return false
|| (validate_2(ctx) || ({ len = uint16le_decode(&ctx->net_bytes[ctx->net_offset-2]); false; }))
- || _validate_list(ctx, len, validate_1, sizeof(uint8_t))
+ || _validate_size_net(ctx, len)
|| ({ (!is_valid_utf8_without_nul(&ctx->net_bytes[ctx->net_offset-len], len)) && lib9p_error(ctx->ctx, LINUX_EBADMSG, "message contains invalid UTF-8"); })
;
}
@@ -561,7 +561,7 @@ LM_FLATTEN static bool validate_Rread(struct _validate_ctx *ctx) {
|| (validate_1(ctx) || ({ typ = ctx->net_bytes[ctx->net_offset-1]; false; }))
|| validate_tag(ctx)
|| (validate_4(ctx) || ({ count = uint32le_decode(&ctx->net_bytes[ctx->net_offset-4]); false; }))
- || _validate_list(ctx, count, validate_1, sizeof(uint8_t))
+ || _validate_size_net(ctx, count)
|| ({ uint32_t exp = ctx->net_offset - _size_offset; (((uint32_t)size) != exp) &&
lib9p_errorf(ctx->ctx, LINUX_EBADMSG, "size value is wrong (actual:%"PRIu32" != correct:%"PRIu32")", (uint32_t)size, exp); })
|| ({ uint8_t exp = 117; (((uint8_t)typ) != exp) &&
@@ -750,7 +750,7 @@ LM_FLATTEN static bool validate_Rreaddir(struct _validate_ctx *ctx) {
|| (validate_1(ctx) || ({ typ = ctx->net_bytes[ctx->net_offset-1]; false; }))
|| validate_tag(ctx)
|| (validate_4(ctx) || ({ count = uint32le_decode(&ctx->net_bytes[ctx->net_offset-4]); false; }))
- || _validate_list(ctx, count, validate_1, sizeof(uint8_t))
+ || _validate_size_net(ctx, count)
|| ({ uint32_t exp = ctx->net_offset - _size_offset; (((uint32_t)size) != exp) &&
lib9p_errorf(ctx->ctx, LINUX_EBADMSG, "size value is wrong (actual:%"PRIu32" != correct:%"PRIu32")", (uint32_t)size, exp); })
|| ({ uint8_t exp = 41; (((uint8_t)typ) != exp) &&
@@ -861,7 +861,7 @@ LM_FLATTEN static bool validate_Rsread(struct _validate_ctx *ctx) {
|| (validate_1(ctx) || ({ typ = ctx->net_bytes[ctx->net_offset-1]; false; }))
|| validate_tag(ctx)
|| (validate_4(ctx) || ({ count = uint32le_decode(&ctx->net_bytes[ctx->net_offset-4]); false; }))
- || _validate_list(ctx, count, validate_1, sizeof(uint8_t))
+ || _validate_size_net(ctx, count)
|| ({ uint32_t exp = ctx->net_offset - _size_offset; (((uint32_t)size) != exp) &&
lib9p_errorf(ctx->ctx, LINUX_EBADMSG, "size value is wrong (actual:%"PRIu32" != correct:%"PRIu32")", (uint32_t)size, exp); })
|| ({ uint8_t exp = 153; (((uint8_t)typ) != exp) &&
@@ -924,7 +924,7 @@ LM_FLATTEN static bool validate_Twrite(struct _validate_ctx *ctx) {
|| validate_fid(ctx)
|| (validate_8(ctx) || ({ offset = uint64le_decode(&ctx->net_bytes[ctx->net_offset-8]); false; }))
|| (validate_4(ctx) || ({ count = uint32le_decode(&ctx->net_bytes[ctx->net_offset-4]); false; }))
- || _validate_list(ctx, count, validate_1, sizeof(uint8_t))
+ || _validate_size_net(ctx, count)
|| ({ uint32_t exp = ctx->net_offset - _size_offset; (((uint32_t)size) != exp) &&
lib9p_errorf(ctx->ctx, LINUX_EBADMSG, "size value is wrong (actual:%"PRIu32" != correct:%"PRIu32")", (uint32_t)size, exp); })
|| ({ uint8_t exp = 118; (((uint8_t)typ) != exp) &&
@@ -1353,7 +1353,7 @@ LM_FLATTEN static bool validate_Tswrite(struct _validate_ctx *ctx) {
|| (validate_2(ctx) || ({ nwname = uint16le_decode(&ctx->net_bytes[ctx->net_offset-2]); false; }))
|| _validate_list(ctx, nwname, validate_s, sizeof(struct lib9p_s))
|| (validate_4(ctx) || ({ count = uint32le_decode(&ctx->net_bytes[ctx->net_offset-4]); false; }))
- || _validate_list(ctx, count, validate_1, sizeof(uint8_t))
+ || _validate_size_net(ctx, count)
|| ({ uint32_t exp = ctx->net_offset - _size_offset; (((uint32_t)size) != exp) &&
lib9p_errorf(ctx->ctx, LINUX_EBADMSG, "size value is wrong (actual:%"PRIu32" != correct:%"PRIu32")", (uint32_t)size, exp); })
|| ({ uint8_t exp = 154; (((uint8_t)typ) != exp) &&
@@ -1972,10 +1972,8 @@ LM_ALWAYS_INLINE static void unmarshal_fid(struct _unmarshal_ctx *ctx, lib9p_fid
LM_ALWAYS_INLINE static void unmarshal_s(struct _unmarshal_ctx *ctx, struct lib9p_s *out) {
memset(out, 0, sizeof(*out));
unmarshal_2(ctx, &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, (uint8_t *)&out->utf8[i]);
+ out->utf8 = (char *)&ctx->net_bytes[ctx->net_offset];
+ ctx->net_offset += out->len;
}
#endif /* CONFIG_9P_ENABLE_9P2000 || CONFIG_9P_ENABLE_9P2000_L || CONFIG_9P_ENABLE_9P2000_e || CONFIG_9P_ENABLE_9P2000_p9p || CONFIG_9P_ENABLE_9P2000_u */
@@ -2047,10 +2045,8 @@ LM_FLATTEN static void unmarshal_Rread(struct _unmarshal_ctx *ctx, struct lib9p_
ctx->net_offset += 1;
unmarshal_tag(ctx, &out->tag);
unmarshal_4(ctx, &out->count);
- out->data = ctx->extra;
- ctx->extra += sizeof(out->data[0]) * out->count;
- for (typeof(out->count) i = 0; i < out->count; i++)
- unmarshal_1(ctx, (uint8_t *)&out->data[i]);
+ out->data = (char *)&ctx->net_bytes[ctx->net_offset];
+ ctx->net_offset += out->count;
}
LM_FLATTEN static void unmarshal_Rwrite(struct _unmarshal_ctx *ctx, struct lib9p_msg_Rwrite *out) {
@@ -2145,10 +2141,8 @@ LM_FLATTEN static void unmarshal_Rreaddir(struct _unmarshal_ctx *ctx, struct lib
ctx->net_offset += 1;
unmarshal_tag(ctx, &out->tag);
unmarshal_4(ctx, &out->count);
- out->data = ctx->extra;
- ctx->extra += sizeof(out->data[0]) * out->count;
- for (typeof(out->count) i = 0; i < out->count; i++)
- unmarshal_1(ctx, (uint8_t *)&out->data[i]);
+ out->data = (char *)&ctx->net_bytes[ctx->net_offset];
+ ctx->net_offset += out->count;
}
LM_FLATTEN static void unmarshal_Rfsync(struct _unmarshal_ctx *ctx, struct lib9p_msg_Rfsync *out) {
@@ -2202,10 +2196,8 @@ LM_FLATTEN static void unmarshal_Rsread(struct _unmarshal_ctx *ctx, struct lib9p
ctx->net_offset += 1;
unmarshal_tag(ctx, &out->tag);
unmarshal_4(ctx, &out->count);
- out->data = ctx->extra;
- ctx->extra += sizeof(out->data[0]) * out->count;
- for (typeof(out->count) i = 0; i < out->count; i++)
- unmarshal_1(ctx, (uint8_t *)&out->data[i]);
+ out->data = (char *)&ctx->net_bytes[ctx->net_offset];
+ ctx->net_offset += out->count;
}
LM_FLATTEN static void unmarshal_Rswrite(struct _unmarshal_ctx *ctx, struct lib9p_msg_Rswrite *out) {
@@ -2236,10 +2228,8 @@ LM_FLATTEN static void unmarshal_Twrite(struct _unmarshal_ctx *ctx, struct lib9p
unmarshal_fid(ctx, &out->fid);
unmarshal_8(ctx, &out->offset);
unmarshal_4(ctx, &out->count);
- out->data = ctx->extra;
- ctx->extra += sizeof(out->data[0]) * out->count;
- for (typeof(out->count) i = 0; i < out->count; i++)
- unmarshal_1(ctx, (uint8_t *)&out->data[i]);
+ out->data = (char *)&ctx->net_bytes[ctx->net_offset];
+ ctx->net_offset += out->count;
}
LM_FLATTEN static void unmarshal_Tclunk(struct _unmarshal_ctx *ctx, struct lib9p_msg_Tclunk *out) {
@@ -2483,10 +2473,8 @@ LM_FLATTEN static void unmarshal_Tswrite(struct _unmarshal_ctx *ctx, struct lib9
for (typeof(out->nwname) i = 0; i < out->nwname; i++)
unmarshal_s(ctx, &out->wname[i]);
unmarshal_4(ctx, &out->count);
- out->data = ctx->extra;
- ctx->extra += sizeof(out->data[0]) * out->count;
- for (typeof(out->count) i = 0; i < out->count; i++)
- unmarshal_1(ctx, (uint8_t *)&out->data[i]);
+ out->data = (char *)&ctx->net_bytes[ctx->net_offset];
+ ctx->net_offset += out->count;
}
#endif /* CONFIG_9P_ENABLE_9P2000_e */