summaryrefslogtreecommitdiff
path: root/toxcore/Messenger.c
diff options
context:
space:
mode:
authorSebastian Stal <stal@kirara.ca>2013-09-21 14:47:30 -0700
committerSebastian Stal <stal@kirara.ca>2013-09-21 14:47:30 -0700
commitcb68be00b0bb8802da94b877a24e68ee35b5658a (patch)
treebde4de8284321e6ac8f8c61c92b6d5eb399bb9c6 /toxcore/Messenger.c
parenta6abf007cbb62f0147dd136bffaa9197736b280f (diff)
Change tox_get_friendlist API.
tox_get_friendlist() -> tox_copy_friendlist(). You now have to allocate your own memory to pass into tox_copy_friendlist. To help with this, tox_count_friendlist() has been added to get the length of the friend list.
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 *