handle NULL text

This commit is contained in:
Rongsong Shen 2025-04-27 17:52:42 +08:00
parent 07e2126e25
commit 3a7ae150b8
4 changed files with 20 additions and 6 deletions

View file

@ -1070,9 +1070,21 @@ static void encode_member(capnp_ctx_t *ctx, struct str *func, struct field *f,
break;
case Type_text:
str_add(func, tab, -1);
str_addf(func, "d->%s.str = s->%s;\n", var, var2);
str_addf(func, "if (s->%s != NULL) {\n", var2);
str_add(func, tab, -1);
str_addf(func, "d->%s.len = strlen(s->%s);\n", var, var2);
str_addf(func, "\td->%s.str = s->%s;\n", var, var2);
str_add(func, tab, -1);
str_addf(func, "\td->%s.len = strlen(s->%s);\n", var, var2);
str_add(func, tab, -1);
str_addf(func, "}\n");
str_add(func, tab, -1);
str_addf(func, "else{\n");
str_add(func, tab, -1);
str_addf(func, "\td->%s.str = \"\";\n", var);
str_add(func, tab, -1);
str_addf(func, "\td->%s.len = 0;\n", var);
str_add(func, tab, -1);
str_addf(func, "}\n");
str_add(func, tab, -1);
str_addf(func, "d->%s.seg = NULL;\n", var);
break;
@ -1081,8 +1093,8 @@ static void encode_member(capnp_ctx_t *ctx, struct str *func, struct field *f,
if (n != NULL) {
str_add(func, tab, -1);
str_addf(func, "encode_%s_ptr(cs, &(d->%s), s->%s);\n", n->name.str,
var, var2);
str_addf(func, "encode_%s_ptr(cs, &(d->%s), s->%s);\n", n->name.str, var,
var2);
}
break;
case Type__list:
@ -1323,8 +1335,7 @@ void mk_struct_ptr_decoder(capnp_ctx_t *ctx, struct node *n) {
"%s_ptr p) {\n",
n->name.str, buf, n->name.str);
str_addf(&(ctx->SRC), "\tstruct %s s;\n", n->name.str);
str_addf(&(ctx->SRC), "\t*d = (%s *)calloc(1, sizeof(%s));\n",
buf, buf);
str_addf(&(ctx->SRC), "\t*d = (%s *)calloc(1, sizeof(%s));\n", buf, buf);
str_addf(&(ctx->SRC), "\tread_%s(&s, p);\n", n->name.str);
str_addf(&(ctx->SRC), "\tdecode_%s(*d, &s);\n", n->name.str);
str_addf(&(ctx->SRC), "}\n");