diff --git a/src/groupchat.c b/src/groupchat.c index cf55170..8fde2bb 100644 --- a/src/groupchat.c +++ b/src/groupchat.c @@ -121,7 +121,7 @@ static void groupchat_onGroupNamelistChange(ToxWindow *self, Tox *m, int groupnu groupchats[groupnum].num_peers = MIN(tox_group_number_peers(m, groupnum), MAX_GROUP_PEERS); tox_group_copy_names(m, groupnum, groupchats[groupnum].peer_names, groupchats[groupnum].num_peers); - //qsort(groupchats[groupnum].peer_names, + qsort(groupchats[groupnum].peer_names, groupchats[groupnum].num_peers, TOX_MAX_NAME_LENGTH, name_compare); } static void groupchat_onKey(ToxWindow *self, Tox *m, wint_t key) diff --git a/src/misc_tools.c b/src/misc_tools.c index 2d6c05b..2221b7d 100644 --- a/src/misc_tools.c +++ b/src/misc_tools.c @@ -113,3 +113,24 @@ void alert_window(ToxWindow *self) self->blink = true; beep(); } + +/* case-insensitive string compare function for use with qsort - same return logic as strcmp */ +int name_compare(const void *nick1, const void *nick2) +{ + char s[strlen(nick1)]; + char t[strlen(nick2)]; + strcpy(s, (const char*) nick1); + strcpy(t, (const char*) nick2); + + int i; + + for (i = 0; s[i] != '\0' && t[i] != '\0'; ++i) { + s[i] = tolower(s[i]); + t[i] = tolower(t[i]); + + if (s[i] != t[i]) + break; + } + + return s[i] - t[i]; +} \ No newline at end of file diff --git a/src/misc_tools.h b/src/misc_tools.h index 597b50d..ccda726 100644 --- a/src/misc_tools.h +++ b/src/misc_tools.h @@ -27,3 +27,6 @@ bool timed_out(uint64_t timestamp, uint64_t timeout, uint64_t curtime); /* Beeps and makes window tab blink */ void alert_window(ToxWindow *self); + +/* case-insensitive string compare function for use with qsort - same return logic as strcmp */ +int name_compare(const void *nick1, const void *nick2); \ No newline at end of file