damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

commit 8679c9f293483c47462ae53ae8a74d3fb7d9161a
parent d541153e4cb398a06279388b0c298c438e3908b1
Author: William Casarin <jb55@jb55.com>
Date:   Tue, 28 Nov 2023 10:51:12 -0800

nostrdb/search: make search case insensitive

Signed-off-by: William Casarin <jb55@jb55.com>

Diffstat:
Mdamus-c/cursor.h | 14++++++++++++++
Mnostrdb/nostrdb.c | 4++--
2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/damus-c/cursor.h b/damus-c/cursor.h @@ -369,6 +369,20 @@ static inline int push_sized_str(struct cursor *cursor, const char *str, int len return cursor_push(cursor, (u8*)str, len); } +static inline int cursor_push_lowercase(struct cursor *cur, const char *str, int len) +{ + int i; + + if (unlikely(cur->p + len >= cur->end)) + return 0; + + for (i = 0; i < len; i++) + cur->p[i] = tolower(str[i]); + + cur->p += len; + return 1; +} + static inline int cursor_push_str(struct cursor *cursor, const char *str) { return cursor_push(cursor, (u8*)str, (int)strlen(str)); diff --git a/nostrdb/nostrdb.c b/nostrdb/nostrdb.c @@ -164,8 +164,8 @@ static int ndb_make_text_search_key(unsigned char *buf, int bufsize, if (!push_varint(&cur, word_len)) return 0; - // non-null terminated string - if (!cursor_push(&cur, (unsigned char*)str, word_len)) + // non-null terminated, lowercase string + if (!cursor_push_lowercase(&cur, str, word_len)) return 0; // the index of the word in the content so that we can do more accurate