summaryrefslogtreecommitdiff
path: root/toxcore/Messenger.c
diff options
context:
space:
mode:
Diffstat (limited to 'toxcore/Messenger.c')
-rw-r--r--toxcore/Messenger.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/toxcore/Messenger.c b/toxcore/Messenger.c
index e468a60a..cbbc80bf 100644
--- a/toxcore/Messenger.c
+++ b/toxcore/Messenger.c
@@ -1640,6 +1640,50 @@ int Messenger_load(Messenger *m, uint8_t *data, uint32_t length)
1640 return Messenger_load_old(m, data, length); 1640 return Messenger_load_old(m, data, length);
1641} 1641}
1642 1642
1643/* Return the number of friends in the instance m.
1644 * You should use this to determine how much memory to allocate
1645 * for copy_friendlist. */
1646size_t count_friendlist(Messenger *m)
1647{
1648 size_t ret = 0;
1649 uint32_t i;
1650 for (i = 0; i < m->numfriends; i++) {
1651 if (m->friendlist[i].status > 0) {
1652 ret++;
1653 }
1654 }
1655 return ret;
1656}
1657
1658/* Copy a list of valid friend IDs into the array out_list.
1659 * If out_list is NULL, returns -1.
1660 * Otherwise, returns the number of elements copied.
1661 * If the array was too small, the contents
1662 * of out_list will be truncated to list_size. */
1663size_t copy_friendlist(Messenger *m, int *out_list, size_t list_size)
1664{
1665 if (!out_list)
1666 return -1;
1667
1668 if (m->numfriends == 0) {
1669 return 0;
1670 }
1671
1672 uint32_t i;
1673 size_t ret = 0;
1674 for (i = 0; i < m->numfriends; i++) {
1675 if (i >= list_size) {
1676 break; /* Abandon ship */
1677 }
1678 if (m->friendlist[i].status > 0) {
1679 out_list[i] = i;
1680 ret++;
1681 }
1682 }
1683
1684 return ret;
1685}
1686
1643/* Allocate and return a list of valid friend id's. List must be freed by the 1687/* Allocate and return a list of valid friend id's. List must be freed by the
1644 * caller. 1688 * caller.
1645 * 1689 *