diff options
author | Sebastian Stal <stal@kirara.ca> | 2013-09-21 14:47:30 -0700 |
---|---|---|
committer | Sebastian Stal <stal@kirara.ca> | 2013-09-21 14:47:30 -0700 |
commit | cb68be00b0bb8802da94b877a24e68ee35b5658a (patch) | |
tree | bde4de8284321e6ac8f8c61c92b6d5eb399bb9c6 /toxcore/Messenger.c | |
parent | a6abf007cbb62f0147dd136bffaa9197736b280f (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.c | 44 |
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. */ | ||
1646 | size_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. */ | ||
1663 | size_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 | * |