int strncmp(const char *s1, const char *s2, size_t n) {
while (1) {
if (n <= 0)
return 0;
if (*s1 != *s2)
return *s1 - *s2;
if (*s1 == 0)
return 0;
s1++;
s2++;
n--;
}
}
gboolean g_str_has_suffix(const gchar *str, const gchar *suffix) {
size_t str_length;
size_t suffix_length;
g_return_val_if_fail(str != NULL, FALSE);
g_return_val_if_fail(suffix != NULL, FALSE);
str_length = strlen(str);
suffix_length = strlen(suffix);
return suffix_length <= str_length ?
strncmp(str + str_length - suffix_length, suffix, suffix_length) == 0 :
FALSE;
}
gboolean g_str_has_prefix(const gchar *str, const gchar *prefix) {
size_t str_length;
size_t prefix_length;
g_return_val_if_fail(str != NULL, FALSE);
g_return_val_if_fail(prefix != NULL, FALSE);
str_length = strlen(str);
prefix_length = strlen(prefix);
return prefix_length <= str_length ?
strncmp(str, prefix, prefix_length) == 0 :
FALSE;
}