1 // Copyright (2013) Jann Horn <jann@thejh.net>
2 // This code is licensed under the AGPLv3.
6 HEADER #define streq(a,b) (!strcmp((a),(b)))
8 PUBLIC_FN int count_char_occurences(char *s, char c) {
17 // memcpy plus terminating nullbyte
18 PUBLIC_FN void *memcpyn(void *d, const void *s, size_t n) {
25 // Wipe out whitespace characters at the end of str using nullbytes.
26 PUBLIC_FN void trim_end(char *str, char *whitespace) {
27 for (char *p = str+strlen(str)-1; p>=str; p--) {
28 if (!strchr(whitespace, *p)) break;
34 PUBLIC_FN int ends_with(char *str, char *sub) {
35 size_t str_len = strlen(str);
36 size_t sub_len = strlen(sub);
37 if (sub_len>str_len) return 0;
38 return streq(str+str_len-sub_len, sub);