diff options
Diffstat (limited to 'src/common.c')
-rw-r--r-- | src/common.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/common.c b/src/common.c index d9c7d73f..a3893c06 100644 --- a/src/common.c +++ b/src/common.c @@ -1,7 +1,7 @@ /* * common.c * - * Copyright (C) 2012 - 2017 James Booth <boothj5@gmail.com> + * Copyright (C) 2012 - 2018 James Booth <boothj5@gmail.com> * * This file is part of Profanity. * @@ -467,11 +467,18 @@ prof_occurrences(const char *const needle, const char *const haystack, int offse gchar *needle_last_ch = g_utf8_offset_to_pointer(needle, g_utf8_strlen(needle, -1)- 1); int needle_last_ch_len = mblen(needle_last_ch, MB_CUR_MAX); - gchar *haystack_before_ch = g_utf8_prev_char(haystack_curr); - gchar *haystack_after_ch = g_utf8_next_char(haystack_curr + strlen(needle) - needle_last_ch_len); + gunichar before = 0; + gchar *haystack_before_ch = g_utf8_find_prev_char(haystack, haystack_curr); + if (haystack_before_ch) { + before = g_utf8_get_char(haystack_before_ch); + } + + gunichar after = 0; + gchar *haystack_after_ch = g_utf8_find_next_char(haystack_curr + strlen(needle) - needle_last_ch_len, NULL); + if (haystack_after_ch) { + after = g_utf8_get_char(haystack_after_ch); + } - gunichar before = g_utf8_get_char(haystack_before_ch); - gunichar after = g_utf8_get_char(haystack_after_ch); if (!g_unichar_isalnum(before) && !g_unichar_isalnum(after)) { *result = g_slist_append(*result, GINT_TO_POINTER(offset)); } |