summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohnny Richard <johnny@johnnyrichard.com>2022-04-18 00:59:18 +0200
committerJohnny Richard <johnny@johnnyrichard.com>2022-04-18 00:59:18 +0200
commitd3bdadd76b59770c9402db1f2475cf760f8f682b (patch)
tree5318ef2324ed55a9d359e62d32a55396ca6560ca
parent7d5b3c1e9ae35cc2f33c05c1f24f8c9a262eb618 (diff)
string_view: Implement string_view_to_cstr
-rw-r--r--string_view.c7
-rw-r--r--string_view.h15
-rw-r--r--test/string_view_test.c17
3 files changed, 26 insertions, 13 deletions
diff --git a/string_view.c b/string_view.c
index d730627..4de1a98 100644
--- a/string_view.c
+++ b/string_view.c
@@ -19,6 +19,7 @@
#include <assert.h>
#include <stdbool.h>
+#include <stdio.h>
#include <string.h>
string_view_t
@@ -39,6 +40,12 @@ string_view_from_cstr(const char *cstr)
}
bool
+string_view_to_cstr(string_view_t *sv, char *ret)
+{
+ return sprintf(ret, "%.*s", sv->size, sv->data) < 0;
+}
+
+bool
string_view_eq(string_view_t a, string_view_t b)
{
return a.size == b.size && memcmp(a.data, b.data, a.size) == 0;
diff --git a/string_view.h b/string_view.h
index 2ac6684..413cb24 100644
--- a/string_view.h
+++ b/string_view.h
@@ -32,21 +32,10 @@ string_view_t string_view_new(const char *cstr, size_t size);
string_view_t string_view_from_cstr(const char *cstr);
+bool string_view_to_cstr(string_view_t *sv, char *ret);
+
bool string_view_eq(string_view_t a, string_view_t b);
string_view_t string_view_chop_by_delim(string_view_t *sv, char delim);
-/*
-bool string_view_index_of(string_view_t sv, char c, size_t *index);
-
-
-bool string_view_eqi(string_view_t a, string_view_t b);
-
-bool string_view_starts_with(string_view_t sv, string_view_t prefix);
-
-bool string_view_ends_with(string_view_t sv, string_view_t suffix);
-
-uint64_t string_view_to_u64(string_view_t sv);
-*/
-
#endif /* STRING_VIEW_H */
diff --git a/test/string_view_test.c b/test/string_view_test.c
index a050239..7b2400c 100644
--- a/test/string_view_test.c
+++ b/test/string_view_test.c
@@ -49,6 +49,22 @@ test_from_cstr(const MunitParameter params[],
}
static MunitResult
+test_to_cstr(const MunitParameter params[],
+ void *user_data_or_fixture)
+{
+ char *cstr = "hello world";
+
+ string_view_t sv = string_view_new(cstr, 5);
+
+ char actual[sv.size + 1];
+ string_view_to_cstr(&sv, actual);
+
+ assert_string_equal(actual, "hello");
+
+ return MUNIT_OK;
+}
+
+static MunitResult
test_eq(const MunitParameter params[],
void *user_data_or_fixture)
{
@@ -101,6 +117,7 @@ test_chop_by_delim_when_has_no_delim(const MunitParameter params[],
static MunitTest tests[] = {
{ "/test_create_new", test_create_new, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL },
{ "/test_from_cstr", test_from_cstr, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL },
+ { "/test_to_cstr", test_to_cstr, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL },
{ "/test_eq", test_eq, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL },
{ "/test_chop_by_delim_when_has_delim", test_chop_by_delim_when_has_delim, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL },
{ "/test_chop_by_delim_when_has_no_delim", test_chop_by_delim_when_has_no_delim, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL },