summaryrefslogtreecommitdiff
path: root/lib9p/9p.gen
diff options
context:
space:
mode:
Diffstat (limited to 'lib9p/9p.gen')
-rwxr-xr-xlib9p/9p.gen11
1 files changed, 7 insertions, 4 deletions
diff --git a/lib9p/9p.gen b/lib9p/9p.gen
index 2b7745e..4a8e4d1 100755
--- a/lib9p/9p.gen
+++ b/lib9p/9p.gen
@@ -750,11 +750,11 @@ static ALWAYS_INLINE void unmarshal_8(struct _unmarshal_ctx *ctx, uint64_t *out)
prefix = "\t\t"
if member.cnt:
if member.ver != struct_versions:
- ret += "{\n"
- ret += f"{prefix}out->{member.name} = ctx->extra;\n"
+ ret += f"{{\n{prefix}"
+ ret += f"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"
- if typ.name in ['d', 's']: # SPECIAL
+ if typ.name in ["d", "s"]: # SPECIAL
ret += f"{prefix}\tunmarshal_{member.typ.name}(ctx, (uint8_t *)&out->{member.name}[i]);\n"
else:
ret += f"{prefix}\tunmarshal_{member.typ.name}(ctx, &out->{member.name}[i]);\n"
@@ -764,6 +764,9 @@ static ALWAYS_INLINE void unmarshal_8(struct _unmarshal_ctx *ctx, uint64_t *out)
ret += (
f"unmarshal_{member.typ.name}(ctx, &out->{member.name});\n"
)
+ if typ.name == "s": # SPECIAL
+ ret += "\tctx->extra++;\n"
+ ret += "\tout->utf8[out->len] = '\\0';\n"
ret += "}\n"
# marshal_* ################################################################
@@ -853,7 +856,7 @@ static ALWAYS_INLINE bool marshal_8(struct _marshal_ctx *ctx, uint64_t *val) {
ret += "({"
ret += f"\n{prefix2}\tbool err = false;"
ret += f"\n{prefix2}\tfor (typeof(val->{member.cnt}) i = 0; i < val->{member.cnt} && !err; i++)"
- if typ.name in ['d', 's']: # SPECIAL
+ if typ.name in ["d", "s"]: # SPECIAL
ret += f"\n{prefix2}\t\terr = marshal_{member.typ.name}(ctx, (uint8_t *)&val->{member.name}[i]);"
else:
ret += f"\n{prefix2}\t\terr = marshal_{member.typ.name}(ctx, &val->{member.name}[i]);"