Implement adding a friend to a group.
authorThadeu Lima de Souza Cascardo <cascardo@cascardo.info>
Wed, 17 Jul 2013 21:34:44 +0000 (18:34 -0300)
committerThadeu Lima de Souza Cascardo <cascardo@cascardo.info>
Wed, 17 Jul 2013 21:34:44 +0000 (18:34 -0300)
src/group.c

index 3566557..41bfb07 100644 (file)
@@ -19,6 +19,7 @@
 #include <sgp/group.h>
 #include <sgp/friend.h>
 #include <stdlib.h>
+#include <errno.h>
 
 struct sgp_group {
        struct sgp_friend **friends;
@@ -34,8 +35,24 @@ struct sgp_group * sgp_group_new()
        return group;
 }
 
+/*
+ * TODO: start using references. The group can't take it if we want to
+ * add a friend to more groups. A single global reference for all
+ * friends may be good enough.
+ */
 int sgp_group_add_friend(struct sgp_group *group, struct sgp_friend *friend)
 {
+       struct sgp_friend **old_friends;
+       old_friends = group->friends;
+       group->nr_friends++;
+       group->friends = realloc(old_friends,
+                               group->nr_friends * sizeof(friend));
+       if (!group->friends) {
+               group->friends = old_friends;
+               group->nr_friends--;
+               return -ENOMEM;
+       }
+       group->friends[group->nr_friends - 1] = friend;
        return 0;
 }