return (int)buffer_req;
}
+bool string_has_suffix(char const *s, char const *suffix) {
+ if (s == NULL || suffix == NULL) {
+ return false;
+ }
+
+ size_t s_len = strlen(s);
+ size_t suffix_len = strlen(suffix);
+ if (s_len < suffix_len) {
+ return false;
+ }
+
+ s += (s_len - suffix_len);
+ return strcmp(s, suffix) == 0;
+}
+
int escape_string(char *buffer, size_t buffer_size) {
char *temp;
size_t j;
int strjoin(char *dst, size_t dst_len, char **fields, size_t fields_num,
const char *sep);
+
+/* string_has_suffix returns true if s ends with suffix. If either s or suffix
+ * are NULL, false is returned. */
+bool string_has_suffix(char const *s, char const *suffix);
+
/*
* NAME
* escape_slashes
return 0;
}
+DEF_TEST(string_has_suffix) {
+ struct {
+ char const *s;
+ char const *suffix;
+ bool want;
+ } cases[] = {
+ {"foo.bar", "bar", true},
+ {"foo.qux", "bar", false},
+ {"foo.Bar", "bar", false},
+ {"foo", "foo", true},
+ {"foo", "foo.bar", false},
+ {"foo", NULL, false},
+ {NULL, "foo", false},
+ };
+ for (size_t i = 0; i < STATIC_ARRAY_SIZE(cases); i++) {
+ EXPECT_EQ_INT(cases[i].want, string_has_suffix(cases[i].s, cases[i].suffix));
+ }
+
+ return 0;
+}
+
int main(void) {
RUN_TEST(sstrncpy);
RUN_TEST(sstrdup);
RUN_TEST(strunescape);
RUN_TEST(value_to_rate);
RUN_TEST(format_values);
+ RUN_TEST(string_has_suffix);
END_TEST;
}