aboutgitcodelistschat:MatrixIRC
diff options
context:
space:
mode:
authorAlice Frosi <afrosi@redhat.com>2023-02-16 13:48:40 +0100
committerAlice Frosi <afrosi@redhat.com>2023-02-16 14:07:12 +0100
commit3b82d1514d30db14823849a978d7fab5989f9762 (patch)
tree51cd4e655b4a0e8aa3755c54b6ceb23c15c5baa8
parent9e1bf7183af59307c2321b731c5b9f725e94eae1 (diff)
downloadseitan-3b82d1514d30db14823849a978d7fab5989f9762.tar
seitan-3b82d1514d30db14823849a978d7fab5989f9762.tar.gz
seitan-3b82d1514d30db14823849a978d7fab5989f9762.tar.bz2
seitan-3b82d1514d30db14823849a978d7fab5989f9762.tar.lz
seitan-3b82d1514d30db14823849a978d7fab5989f9762.tar.xz
seitan-3b82d1514d30db14823849a978d7fab5989f9762.tar.zst
seitan-3b82d1514d30db14823849a978d7fab5989f9762.zip
actions: add reference to a_return
The action return can return either a constant value or a reference to a value. Signed-off-by: Alice Frosi <afrosi@redhat.com>
-rw-r--r--actions.c10
-rw-r--r--gluten.h11
2 files changed, 19 insertions, 2 deletions
diff --git a/actions.c b/actions.c
index bb31732..0366916 100644
--- a/actions.c
+++ b/actions.c
@@ -198,7 +198,15 @@ int do_actions(struct action actions[], unsigned int n_actions, int pid,
resp.id = id;
resp.flags = 0;
resp.error = 0;
- resp.val = actions[i].ret.value;
+ if (actions[i].ret.type == IMMEDIATE) {
+ resp.val = actions[i].ret.value;
+ } else if (actions[i].ret.value_p != NULL) {
+ resp.val = *(actions[i].ret.value_p);
+ } else {
+ fprintf(stderr, "empty reference for the return value");
+ return -1;
+ }
+
if (send_target(&resp, notifyfd) == -1)
return -1;
break;
diff --git a/gluten.h b/gluten.h
index c6cac3c..ae5e212 100644
--- a/gluten.h
+++ b/gluten.h
@@ -52,6 +52,11 @@ enum action_type {
A_RETURN,
};
+enum value_type {
+ IMMEDIATE,
+ REFERENCE,
+};
+
struct act_call {
long nr;
void *args[6];
@@ -67,7 +72,11 @@ struct act_continue {
};
struct act_return {
- int64_t value;
+ enum value_type type;
+ union {
+ int64_t value;
+ int64_t *value_p;
+ };
};
struct act_inject {