3 HEADER #define streq(a,b) (!strcmp((a),(b)))
5 PUBLIC_FN int count_char_occurences(char *s, char c) {
14 // memcpy plus terminating nullbyte
15 PUBLIC_FN void *memcpyn(void *d, const void *s, size_t n) {
22 // Wipe out whitespace characters at the end of str using nullbytes.
23 PUBLIC_FN void trim_end(char *str, char *whitespace) {
24 for (char *p = str+strlen(str)-1; p>=str; p--) {
25 if (!strchr(whitespace, *p)) break;
31 PUBLIC_FN int ends_with(char *str, char *sub) {
32 size_t str_len = strlen(str);
33 size_t sub_len = strlen(sub);
34 if (sub_len>str_len) return 0;
35 return streq(str+str_len-sub_len, sub);