diff options
Diffstat (limited to 'apps/tagcache.c')
-rw-r--r-- | apps/tagcache.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/apps/tagcache.c b/apps/tagcache.c index 87810da93b..08d6894e57 100644 --- a/apps/tagcache.c +++ b/apps/tagcache.c | |||
@@ -578,6 +578,17 @@ long tagcache_get_numeric(const struct tagcache_search *tcs, int tag) | |||
578 | return check_virtual_tags(tag, &idx); | 578 | return check_virtual_tags(tag, &idx); |
579 | } | 579 | } |
580 | 580 | ||
581 | inline static bool str_ends_with(const char *str1, const char *str2) | ||
582 | { | ||
583 | int str_len = strlen(str1); | ||
584 | int clause_len = strlen(str2); | ||
585 | |||
586 | if (clause_len > str_len) | ||
587 | return false; | ||
588 | |||
589 | return !strcasecmp(&str1[str_len - clause_len], str2); | ||
590 | } | ||
591 | |||
581 | static bool check_against_clause(long numeric, const char *str, | 592 | static bool check_against_clause(long numeric, const char *str, |
582 | const struct tagcache_search_clause *clause) | 593 | const struct tagcache_search_clause *clause) |
583 | { | 594 | { |
@@ -610,13 +621,13 @@ static bool check_against_clause(long numeric, const char *str, | |||
610 | case clause_begins_with: | 621 | case clause_begins_with: |
611 | return (strcasestr(str, clause->str) == str); | 622 | return (strcasestr(str, clause->str) == str); |
612 | case clause_not_begins_with: | 623 | case clause_not_begins_with: |
613 | return (strcasestr(str, clause->str) != str); | 624 | return (strcasestr(str, clause->str) != str); |
614 | case clause_ends_with: /* Not supported yet */ | 625 | case clause_ends_with: |
615 | return false; | 626 | return str_ends_with(str, clause->str); |
616 | case clause_not_ends_with: /* Not supported yet */ | 627 | case clause_not_ends_with: |
617 | return false; | 628 | return !str_ends_with(str, clause->str); |
618 | } | 629 | } |
619 | 630 | ||
620 | return false; | 631 | return false; |
621 | } | 632 | } |
622 | 633 | ||