diff --git a/include/alisp/sv.h b/include/alisp/sv.h index aac6777..72f7f07 100644 --- a/include/alisp/sv.h +++ b/include/alisp/sv.h @@ -29,8 +29,8 @@ typedef struct sv_t sv_copy(sv_t); sv_t sv_chop_left(sv_t, u64 size); sv_t sv_chop_right(sv_t, u64 size); -sv_t sv_substr(sv_t, u64 position, u64 size); sv_t sv_truncate(sv_t, u64 newsize); +sv_t sv_substr(sv_t, u64 position, u64 size); sv_t sv_till(sv_t, const char *reject); sv_t sv_while(sv_t, const char *accept); diff --git a/src/sv.c b/src/sv.c index e9e8073..d295af7 100644 --- a/src/sv.c +++ b/src/sv.c @@ -36,18 +36,19 @@ sv_t sv_chop_right(sv_t sv, u64 size) return SV(sv.data, sv.size - size); } -sv_t sv_substr(sv_t sv, u64 position, u64 size) -{ - return sv_truncate(sv_chop_left(sv, position), size); -} - sv_t sv_truncate(sv_t sv, u64 newsize) { - if (newsize >= sv.size) - return sv; + if (newsize > sv.size) + return SV(NULL, 0); return SV(sv.data, newsize); } +sv_t sv_substr(sv_t sv, u64 position, u64 size) +{ + sv_t result = sv_truncate(sv_chop_left(sv, position), size); + return result; +} + sv_t sv_till(sv_t sv, const char *reject) { if (sv.size == 0 || !sv.data)