diff options
author | Stefano Brivio <sbrivio@redhat.com> | 2023-06-02 16:48:29 +0200 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2023-06-02 16:49:48 +0200 |
commit | 6455b9dff0554adc11e8dbe8027d134c8584bc5d (patch) | |
tree | 2c403f9e2cdb7e864ecea449f6fb7375ed5416e5 /cooker/emit.c | |
parent | fb2a89cbfc5049d360bb734b4896946e9963e39a (diff) | |
download | seitan-6455b9dff0554adc11e8dbe8027d134c8584bc5d.tar seitan-6455b9dff0554adc11e8dbe8027d134c8584bc5d.tar.gz seitan-6455b9dff0554adc11e8dbe8027d134c8584bc5d.tar.bz2 seitan-6455b9dff0554adc11e8dbe8027d134c8584bc5d.tar.lz seitan-6455b9dff0554adc11e8dbe8027d134c8584bc5d.tar.xz seitan-6455b9dff0554adc11e8dbe8027d134c8584bc5d.tar.zst seitan-6455b9dff0554adc11e8dbe8027d134c8584bc5d.zip |
cooker, seitan: OP_FD
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'cooker/emit.c')
-rw-r--r-- | cooker/emit.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/cooker/emit.c b/cooker/emit.c index 05e3f81..b518ff9 100644 --- a/cooker/emit.c +++ b/cooker/emit.c @@ -53,6 +53,31 @@ void emit_nr(struct gluten_ctx *g, struct gluten_offset number) } /** + * emit_fd() - Emit OP_FD instruction: add/set file descriptor in target + * @g: gluten context + * @desc: Pointer to file descriptors specification + */ +void emit_fd(struct gluten_ctx *g, struct fd_desc *desc) +{ + struct op *op = (struct op *)gluten_ptr(&g->g, g->ip); + struct op_fd *fd = &op->op.fd; + struct gluten_offset o; + struct fd_desc *dst; + + op->type = OP_FD; + + o = gluten_ro_alloc(g, sizeof(struct fd_desc)); + dst = (struct fd_desc *)gluten_ptr(&g->g, o); + memcpy(dst, desc, sizeof(struct fd_desc)); + fd->desc = o; + + debug(" %i: OP_FD: ...", g->ip.offset); + + if (++g->ip.offset > INST_MAX) + die("Too many instructions"); +} + +/** * emit_call() - Emit OP_CALL instruction: execute a system call * @g: gluten context * @ns: NS_SPEC_NONE-terminated array of namespaces references |