diff options
author | Luke T. Shumaker <lukeshu@lukeshu.com> | 2024-10-04 17:28:54 -0600 |
---|---|---|
committer | Luke T. Shumaker <lukeshu@lukeshu.com> | 2024-10-04 17:28:54 -0600 |
commit | 2fe787ba4db420f5b08573d77e35cfaa0d7a0793 (patch) | |
tree | b9c1264b56d713a6df9b029606f87d824f3a3d20 /lib9p/9p.gen | |
parent | b683e779ef83b88f6ffc503a1d1a4f3ec25a5cfa (diff) |
wip srv
Diffstat (limited to 'lib9p/9p.gen')
-rwxr-xr-x | lib9p/9p.gen | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/lib9p/9p.gen b/lib9p/9p.gen index cdec067..2b7745e 100755 --- a/lib9p/9p.gen +++ b/lib9p/9p.gen @@ -754,7 +754,10 @@ static ALWAYS_INLINE void unmarshal_8(struct _unmarshal_ctx *ctx, uint64_t *out) 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 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" if member.ver != struct_versions: ret += "\t}\n" else: @@ -850,7 +853,10 @@ 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++)" - ret += f"\n{prefix2}\t\terr = marshal_{member.typ.name}(ctx, &val->{member.name}[i]);" + 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]);" ret += f"\n{prefix2}\terr;" ret += f"\n{prefix2}}})" else: |