view plugins/crazychat/crazychat.c @ 14141:5f656a0a82b7

[gaim-migrate @ 16783] Whitespace and warning fixes: gtkaccount.c: In function ¡Æicon_select_cb¡Ç: gtkaccount.c:289: warning: passing argument 1 of ¡Ægaim_gtk_buddy_icon_chooser_new¡Ç from incompatible pointer type gtkaccount.c:289: warning: passing argument 2 of ¡Ægaim_gtk_buddy_icon_chooser_new¡Ç from incompatible pointer type gtkstatusbox.c: In function ¡Æicon_box_press_cb¡Ç: gtkstatusbox.c:951: warning: passing argument 2 of ¡Ægaim_gtk_buddy_icon_chooser_new¡Ç from incompatible pointer type gtkstatusbox.c:951: warning: ISO C90 forbids mixed declarations and code gtkstatusbox.c: In function ¡Æicon_box_enter_cb¡Ç: gtkstatusbox.c:960: warning: passing argument 1 of ¡Ægtk_image_set_from_pixbuf¡Ç from incompatible pointer type gtkstatusbox.c: In function ¡Æicon_box_leave_cb¡Ç: gtkstatusbox.c:968: warning: passing argument 1 of ¡Ægtk_image_set_from_pixbuf¡Ç from incompatible pointer type gtkstatusbox.c: In function ¡Ægtk_gaim_status_box_size_allocate¡Ç: gtkstatusbox.c:1183: warning: passing argument 1 of ¡Ægtk_image_set_from_pixbuf¡Ç from incompatible pointer type gtkstatusbox.c: In function ¡Ægtk_gaim_status_box_set_buddy_icon¡Ç: gtkstatusbox.c:1338: warning: passing argument 1 of ¡Ægtk_image_set_from_pixbuf¡Ç from incompatible pointer type gtkutils.c: In function ¡Ægaim_gtk_convert_buddy_icon¡Ç: gtkutils.c:2463: warning: ISO C90 forbids mixed declarations and code committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Wed, 16 Aug 2006 06:31:59 +0000
parents ed017b9c532d
children
line wrap: on
line source

#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include "cc_interface.h"

struct cc_session_node {
	struct cc_session session;
	struct cc_session_node *next;
};

struct cc_session *cc_find_session(struct crazychat *cc, char *handle)
{
	struct cc_session_node *curr;

	assert(cc);
	assert(handle);

	curr = cc->sessions;
	while (curr) {
		struct cc_session *session = &curr->session;
		if (!strncmp(session->name, handle, strlen(session->name))) {
			return session;
		}
		curr = curr->next;
	}
	return NULL;
}

struct cc_session *cc_add_session(struct crazychat *cc, char *handle)
{
	struct cc_session_node *curr;

	assert(cc);
	assert(handle);

	if (!cc->sessions) {
		cc->sessions = (struct cc_session_node*)
			malloc(sizeof(*cc->sessions));
		memset(cc->sessions, 0, sizeof(*cc->sessions));
		cc->sessions->session.cc = cc;
		cc->sessions->session.name = strdup(handle);
		return &cc->sessions->session;
	} else {
		if (!strncmp(cc->sessions->session.name, handle,
				strlen(cc->sessions->session.name))) {
			return &cc->sessions->session;
		}
	}

	curr = cc->sessions;
	while (curr->next) {
		struct cc_session *session = &curr->next->session;
		if (!strncmp(session->name, handle, strlen(session->name))) {
			return session;
		}
		curr = curr->next;
	}
	curr->next = (struct cc_session_node*)malloc(sizeof(*curr->next));
	memset(curr->next, 0, sizeof(*curr->next));
	curr->next->session.cc = cc;
	curr->next->session.name = strdup(handle);
	return &curr->next->session;
}

void cc_remove_session(struct crazychat *cc, struct cc_session *session)
{
	struct cc_session_node *curr, *prev;
	
	assert(cc);
	assert(session);

	assert(cc->sessions);

	curr = cc->sessions;
	prev = NULL;

	while (curr) {
		if (&curr->session == session) {
			if (prev) {
				prev->next = curr->next;
			} else {
				cc->sessions = curr->next;
			}
			/* destroy curr */
			free(curr);
			g_source_remove(session->timer_id);
			free(session->name);
			free(session);
			return;
		}
		prev = curr;
		curr = curr->next;
	}

	assert(0);
}