From 7a313f60386265024634ddb59d417dcd460ce831 Mon Sep 17 00:00:00 2001 From: Calvin Rose Date: Thu, 9 May 2019 13:42:14 -0400 Subject: [PATCH] Update CHANGELOG, string/has-suffix?|prefix? string/has-suffix? and string/has-prefix? can now accept all byte data types for both arguments. --- CHANGELOG.md | 1 + src/core/string.c | 22 ++++++++++------------ 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a9a61092..75ee05cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ All notable changes to this project will be documented in this file. ## 0.5.0 - ?? +- Fix some bugs with buffers. - Add `trace` and `untrace` to the core library. - Add `string/has-prefix?` and `string/has-suffix?` to string module. - Add simple debugger to repl that activates on errors or debug signal diff --git a/src/core/string.c b/src/core/string.c index 80cd5d44..86699c6d 100644 --- a/src/core/string.c +++ b/src/core/string.c @@ -276,24 +276,22 @@ static Janet cfun_string_find(int32_t argc, Janet *argv) { static Janet cfun_string_hasprefix(int32_t argc, Janet *argv) { janet_fixarity(argc, 2); - const uint8_t *prefix = janet_getstring(argv, 0); - const uint8_t *s = janet_getstring(argv, 1); - int32_t prefix_len = janet_string_length(prefix); - int32_t s_len = janet_string_length(s); - return s_len < prefix_len + JanetByteView prefix = janet_getbytes(argv, 0); + JanetByteView str = janet_getbytes(argv, 1); + return str.len < prefix.len ? janet_wrap_false() - : janet_wrap_boolean(memcmp(prefix, s, prefix_len) == 0); + : janet_wrap_boolean(memcmp(prefix.bytes, str.bytes, prefix.len) == 0); } static Janet cfun_string_hassuffix(int32_t argc, Janet *argv) { janet_fixarity(argc, 2); - const uint8_t *suffix = janet_getstring(argv, 0); - const uint8_t *s = janet_getstring(argv, 1); - int32_t suffix_len = janet_string_length(suffix); - int32_t s_len = janet_string_length(s); - return s_len < suffix_len + JanetByteView suffix = janet_getbytes(argv, 0); + JanetByteView str = janet_getbytes(argv, 1); + return str.len < suffix.len ? janet_wrap_false() - : janet_wrap_boolean(memcmp(suffix, s + s_len - suffix_len, suffix_len) == 0); + : janet_wrap_boolean(memcmp(suffix.bytes, + str.bytes + str.len - suffix.len, + suffix.len) == 0); } static Janet cfun_string_findall(int32_t argc, Janet *argv) {