view src/protocols/msn/command.c @ 8985:8abc99ed5d93

[gaim-migrate @ 9760] Well... I feel like this should fix the ICQ HTML problems in 0.77. I thought this was how it was for 0.76 though, and I remember that havne't some silly minor problem. We'll see. Lemme know if you're seeing HTML tags when people IM you, or if other people are seeing HTML tags when you IM them. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Thu, 20 May 2004 03:11:52 +0000
parents a7affa2e2986
children 502707ca1836
line wrap: on
line source

/**
 * @file command.c MSN command functions
 *
 * gaim
 *
 * Copyright (C) 2003, Christian Hammond <chipx86@gnupdate.org>
 *
 * This program 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 2 of the License, or
 * (at your option) any later version.
 *
 * This program 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 this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
#include "msn.h"
#include "command.h"

gboolean
is_num(char *str)
{
	char *c;
	for (c = str; *c; c++) {
		if (!(g_ascii_isdigit(*c)))
			return FALSE;
	}

	return TRUE;
}

MsnCommand *
msn_command_from_string(const char *string)
{
	MsnCommand *cmd;
	char *tmp;
	char *param_start;

	g_return_val_if_fail(string != NULL, NULL);

	tmp = g_strdup(string);
	param_start = strchr(tmp, ' ');

	cmd = g_new0(MsnCommand, 1);
	cmd->command = tmp;
	
	if (param_start)
	{
		char *param;
		int c;

		*param_start++ = '\0';
		cmd->params = g_strsplit(param_start, " ", 0);

		for (c = 0; cmd->params[c]; c++);
		cmd->param_count = c;
	
		param = cmd->params[0];

		cmd->trId = is_num(param) ? atoi(param) : 0;
	}
	else
		cmd->trId = 0;
	
	msn_command_ref(cmd);
	
	return cmd;
}

void
msn_command_destroy(MsnCommand *cmd)
{
	g_return_if_fail(cmd != NULL);
	
	if (cmd->ref_count > 0)
	{
		msn_command_unref(cmd);
		return;
	}
	
	g_free(cmd->command);
	g_strfreev(cmd->params);
	g_free(cmd);
}

MsnCommand *
msn_command_ref(MsnCommand *cmd)
{
	g_return_val_if_fail(cmd != NULL, NULL);

	cmd->ref_count++;
	return cmd;
}

MsnCommand *
msn_command_unref(MsnCommand *cmd)
{
	g_return_val_if_fail(cmd != NULL, NULL);

	if (cmd->ref_count <= 0)
		return NULL;

	cmd->ref_count--;

	if (cmd->ref_count == 0)
	{
		msn_command_destroy(cmd);
		return NULL;
	}

	return cmd;
}