From ba756e316e68f066e22cafb8b9c8038532523e6b Mon Sep 17 00:00:00 2001 From: Benjamin Vedder Date: Thu, 10 Nov 2022 15:40:15 +0100 Subject: [PATCH] Made str-len into extension that also looks for null-char --- lispBM/lispif_vesc_dynamic_loader.c | 2 -- lispBM/lispif_vesc_extensions.c | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lispBM/lispif_vesc_dynamic_loader.c b/lispBM/lispif_vesc_dynamic_loader.c index 4e9e67fb..8b4d97a9 100644 --- a/lispBM/lispif_vesc_dynamic_loader.c +++ b/lispBM/lispif_vesc_dynamic_loader.c @@ -64,8 +64,6 @@ static const char* functions[] = { "(filter-rec f lst nil)" "))", -"(defun str-len (str) (- (buflen str) 1))", - "(defun sort (f lst)" "(let ((insert (lambda (elt f sorted-lst)" "(if (eq sorted-lst nil) (list elt)" diff --git a/lispBM/lispif_vesc_extensions.c b/lispBM/lispif_vesc_extensions.c index cf8c088d..c6ae2658 100644 --- a/lispBM/lispif_vesc_extensions.c +++ b/lispBM/lispif_vesc_extensions.c @@ -2870,6 +2870,19 @@ static lbm_value ext_to_str_delim(lbm_value *args, lbm_uint argn) { return to_str(delim, args + 1, argn - 1); } +static lbm_value ext_str_len(lbm_value *args, lbm_uint argn) { + CHECK_ARGN(1); + + char *str = lbm_dec_str(args[0]); + if (!str) { + return ENC_SYM_EERROR; + } + + lbm_array_header_t *array = (lbm_array_header_t *)lbm_car(args[0]); + + return lbm_enc_i(strnlen(str, array->size)); +} + // Configuration static lbm_value ext_conf_set(lbm_value *args, lbm_uint argn) { @@ -4342,6 +4355,7 @@ void lispif_load_vesc_extensions(void) { lbm_add_extension("str-cmp", ext_str_cmp); lbm_add_extension("to-str", ext_to_str); lbm_add_extension("to-str-delim", ext_to_str_delim); + lbm_add_extension("str-len", ext_str_len); // Configuration lbm_add_extension("conf-set", ext_conf_set);