ucode: respect all arguments passed to send()
authorAndre Heider <a.heider@gmail.com>
Fri, 9 Dec 2022 14:16:31 +0000 (15:16 +0100)
committerJo-Philipp Wich <jo@mein.io>
Mon, 16 Jan 2023 10:21:34 +0000 (11:21 +0100)
Similar to ucode's print() this now prints any given values to stdout:
uhttpd.send(a, b, c, "\n");

Signed-off-by: Andre Heider <a.heider@gmail.com>
ucode.c

diff --git a/ucode.c b/ucode.c
index aa5d5b454fcd99ffbcb85f28249088512e6f6c0a..bbb9b00c93bd264e9738b3494af5203316ff3132 100644 (file)
--- a/ucode.c
+++ b/ucode.c
@@ -115,20 +115,22 @@ uh_ucode_recv(uc_vm_t *vm, size_t nargs)
 static uc_value_t *
 uh_ucode_send(uc_vm_t *vm, size_t nargs)
 {
-       uc_value_t *val = uc_fn_arg(0);
-       ssize_t len;
+       uc_value_t *val;
+       size_t arridx;
+       ssize_t len = 0;
        char *p;
 
-       if (ucv_type(val) == UC_STRING) {
-               len = write(STDOUT_FILENO, ucv_string_get(val), ucv_string_length(val));
-       }
-       else if (val != NULL) {
-               p = ucv_to_string(vm, val);
-               len = p ? write(STDOUT_FILENO, p, strlen(p)) : 0;
-               free(p);
-       }
-       else {
-               len = 0;
+       for (arridx = 0; arridx < nargs; arridx++) {
+               val = uc_fn_arg(arridx);
+
+               if (ucv_type(val) == UC_STRING) {
+                       len += write(STDOUT_FILENO, ucv_string_get(val), ucv_string_length(val));
+               }
+               else if (val != NULL) {
+                       p = ucv_to_string(vm, val);
+                       len += p ? write(STDOUT_FILENO, p, strlen(p)) : 0;
+                       free(p);
+               }
        }
 
        return ucv_int64_new(len);