aboutgitcodelistschat:MatrixIRC
path: root/cooker/parse.c
diff options
context:
space:
mode:
authorStefano Brivio <sbrivio@redhat.com>2023-06-14 13:32:15 +0200
committerStefano Brivio <sbrivio@redhat.com>2023-06-14 13:32:15 +0200
commit54bca55ae5212002f8b5178f3d427cb4f54be233 (patch)
tree8d822634eb2ce1281ab6bce8824a8302b093f2a1 /cooker/parse.c
parent920081a68f0f1f12de37c3ad0e3727e783b71ac7 (diff)
downloadseitan-54bca55ae5212002f8b5178f3d427cb4f54be233.tar
seitan-54bca55ae5212002f8b5178f3d427cb4f54be233.tar.gz
seitan-54bca55ae5212002f8b5178f3d427cb4f54be233.tar.bz2
seitan-54bca55ae5212002f8b5178f3d427cb4f54be233.tar.lz
seitan-54bca55ae5212002f8b5178f3d427cb4f54be233.tar.xz
seitan-54bca55ae5212002f8b5178f3d427cb4f54be233.tar.zst
seitan-54bca55ae5212002f8b5178f3d427cb4f54be233.zip
cooker: Fix up debugging messages for "return"
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'cooker/parse.c')
-rw-r--r--cooker/parse.c50
1 files changed, 35 insertions, 15 deletions
diff --git a/cooker/parse.c b/cooker/parse.c
index fb2126e..46ca123 100644
--- a/cooker/parse.c
+++ b/cooker/parse.c
@@ -95,37 +95,57 @@ static void handle_write(struct gluten_ctx *g, JSON_Value *value)
static void handle_return(struct gluten_ctx *g, JSON_Value *value)
{
+ struct gluten_offset data = NULL_OFFSET, error = NULL_OFFSET;
JSON_Object *obj = json_value_get_object(value);
- struct gluten_offset data = NULL_OFFSET;
- const char *tag;
+ union value vv = NO_VALUE, ve = NO_VALUE;
+ const char *tag_error, *tag_value;
JSON_Value *jvalue;
- union value v = { .v_u64 = 0 };
- int32_t error = 0;
bool cont = false;
+ char buf[BUFSIZ];
+ size_t n;
debug(" Parsing \"return\"");
jvalue = json_object_get_value(obj, "error");
- if (json_value_get_type(jvalue) == JSONNumber)
- data = emit_data(g, U64, sizeof(v.v_u64), &v);
- else if ((tag = json_object_get_string(obj, "error")))
- data = gluten_get_tag(g, tag);
+ if (json_value_get_type(jvalue) == JSONNumber) {
+ ve.v_u32 = json_value_get_number(jvalue);
+ error = emit_data(g, U32, sizeof(ve.v_u32), &ve);
+ } else if ((tag_error = json_object_get_string(obj, "error"))) {
+ error = gluten_get_tag(g, tag_error);
+ }
jvalue = json_object_get_value(obj, "value");
- if (json_value_get_type(jvalue) == JSONNumber)
- data = emit_data(g, U64, sizeof(v.v_u64), &v);
- else if ((tag = json_object_get_string(obj, "value")))
- data = gluten_get_tag(g, tag);
+ if (json_value_get_type(jvalue) == JSONNumber) {
+ vv.v_u64 = json_value_get_number(jvalue);
+ data = emit_data(g, U64, sizeof(vv.v_u64), &vv);
+ } else if ((tag_value = json_object_get_string(obj, "value"))) {
+ data = gluten_get_tag(g, tag_value);
+ }
jvalue = json_object_get_value(obj, "continue");
if (json_value_get_type(jvalue) == JSONBoolean)
cont = json_value_get_boolean(jvalue);
- if (cont && (v.v_u64 != 0 || error != 0 || data.offset != OFFSET_NULL))
+ if (cont && (error.offset != 0 || data.offset != OFFSET_NULL))
die(" \"continue\" with non-zero value or error code");
- debug(" emit return: val=%ld errno=%d cont=%s", v.v_u64, error,
- cont ? "true" : "false");
+ if (!cont) {
+ n = snprintf(buf, BUFSIZ, " emit return: value ");
+ if (tag_value)
+ n += snprintf(buf + n, BUFSIZ - n, "tag %s", tag_value);
+ else
+ n += snprintf(buf + n, BUFSIZ - n, "%lu", vv.v_u64);
+
+ n = snprintf(buf, BUFSIZ, " , error ");
+ if (tag_error)
+ n += snprintf(buf + n, BUFSIZ - n, "tag %s", tag_error);
+ else
+ n += snprintf(buf + n, BUFSIZ - n, "%u", ve.v_u32);
+ } else {
+ snprintf(buf, BUFSIZ, " emit return: continue");
+ }
+
+ debug(buf);
emit_return(g, data, error, cont);
}