diff options
author | James Booth <boothj5@gmail.com> | 2012-07-01 14:47:09 +0100 |
---|---|---|
committer | James Booth <boothj5@gmail.com> | 2012-07-01 14:47:09 +0100 |
commit | 30ca6cac3d7f86e4a43410ba361793cd99d97a10 (patch) | |
tree | df0c1fa32c36b1b5ce7e2129892646547a28435e /src/contact.c | |
parent | 9e686c0e01520c238b53b5620f936cebc7d5ba88 (diff) | |
download | profani-tty-30ca6cac3d7f86e4a43410ba361793cd99d97a10.tar.gz |
Added autobuild tools
Diffstat (limited to 'src/contact.c')
-rw-r--r-- | src/contact.c | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/src/contact.c b/src/contact.c new file mode 100644 index 00000000..f9d9727e --- /dev/null +++ b/src/contact.c @@ -0,0 +1,108 @@ +/* + * contact.c + * + * Copyright (C) 2012 James Booth <boothj5@gmail.com> + * + * This file is part of Profanity. + * + * Profanity is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Profanity is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Profanity. If not, see <http://www.gnu.org/licenses/>. + * + */ + +#include <stdlib.h> +#include <string.h> + +#include <glib.h> + +#include "contact.h" + +struct p_contact_t { + char *name; + char *show; + char *status; +}; + +PContact p_contact_new(const char * const name, const char * const show, + const char * const status) +{ + PContact contact = malloc(sizeof(struct p_contact_t)); + contact->name = strdup(name); + + if (show == NULL || (strcmp(show, "") == 0)) + contact->show = strdup("online"); + else + contact->show = strdup(show); + + if (status != NULL) + contact->status = strdup(status); + else + contact->status = NULL; + + return contact; +} + +PContact p_contact_copy(PContact contact) +{ + PContact copy = malloc(sizeof(struct p_contact_t)); + copy->name = strdup(contact->name); + copy->show = strdup(contact->show); + + if (contact->status != NULL) + copy->status = strdup(contact->status); + else + copy->status = NULL; + + return copy; +} + +void p_contact_free(PContact contact) +{ + free(contact->name); + + if (contact->show != NULL) { + free(contact->show); + contact->show = NULL; + } + if (contact->status != NULL) { + free(contact->status); + contact->status = NULL; + } + + free(contact); + contact = NULL; +} + +const char * p_contact_name(const PContact contact) +{ + return contact->name; +} + +const char * p_contact_show(const PContact contact) +{ + return contact->show; +} + +const char * p_contact_status(const PContact contact) +{ + return contact->status; +} + +int p_contacts_equal_deep(const PContact c1, const PContact c2) +{ + int name_eq = (g_strcmp0(c1->name, c2->name) == 0); + int show_eq = (g_strcmp0(c1->show, c2->show) == 0); + int status_eq = (g_strcmp0(c1->status, c2->status) == 0); + + return (name_eq && show_eq && status_eq); +} |