return __pakfire_string_format(s, length, "%s", value);
}
+int __pakfire_string_setn(char* s, const size_t length, const char* value, const size_t l) {
+ // Fail if we don't have enough space
+ if (l >= length)
+ return -ENOBUFS;
+
+ // Copy the data
+ memcpy(s, value, l);
+
+ // Terminate the result buffer
+ s[l] = '\0';
+
+ return l;
+}
+
int pakfire_string_startswith(const char* s, const char* prefix) {
// Validate input
if (!s || !prefix)
__pakfire_string_set(s, sizeof(s), value)
int __pakfire_string_set(char* s, const size_t length, const char* value);
+#define pakfire_string_setn(s, value, l) \
+ __pakfire_string_setn(s, sizeof(s), value, l)
+int __pakfire_string_setn(char* s, const size_t length, const char* value, const size_t l);
+
int pakfire_string_startswith(const char* s, const char* prefix);
int pakfire_string_endswith(const char* s, const char* suffix);
int pakfire_string_matches(const char* s, const char* pattern);
return EXIT_FAILURE;
}
+static int test_string_setn(const struct test* t) {
+ char buffer[8];
+
+ // Some test data to copy
+ const char* s1 = "ABCDEFG";
+ const char* s2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+ // Write a string into a buffer which just has just enough space
+ ASSERT(pakfire_string_setn(buffer, s1, strlen(s1)) == strlen(s1));
+ ASSERT_STRING_EQUALS(buffer, s1);
+
+ // Write a string which would not fit
+ ASSERT_ERROR(pakfire_string_setn(buffer, s2, strlen(s2)), ENOBUFS);
+
+ return EXIT_SUCCESS;
+
+FAIL:
+ return EXIT_FAILURE;
+}
+
static int test_string_startswith(const struct test* t) {
ASSERT_TRUE(pakfire_string_startswith("ABC", "A"));
ASSERT_FALSE(pakfire_string_startswith("ABC", "B"));
int main(int argc, const char* argv[]) {
testsuite_add_test(test_string_set, 0);
+ testsuite_add_test(test_string_setn, 0);
testsuite_add_test(test_string_startswith, 0);
testsuite_add_test(test_string_endswith, 0);
testsuite_add_test(test_string_matches, 0);