view src/protocols/msn/utils.c @ 6096:94e4cf59bacb

[gaim-migrate @ 6555] (21:55:33) Robot101: LSchiere2: while you're round, fancy renaming a file? StdAfx.h in src/win32/ to stdafx.h. (21:55:50) LSchiere2: Robot101: is there a reason? (21:55:57) Robot101: LSchiere2: yeah, try and put a vitriolic comment about windows and/or herman and his build system into the CVS message. (21:56:14) ***LSchiere2 listens for the why (21:56:33) Robot101: because it gets included as "stdafx.h" (21:56:38) LSchiere2: that's a good reason (21:56:53) SimGuy: windows filesystems and their not-caring-ness (21:57:03) Robot101: so gcc on Linux doesn't find it. just because you're building on a retarded platform doesn't mean you have to be all retarded about it. (21:57:14) Robot101: (yeah, use that as the commit message) (21:57:31) LSchiere2: how many places is it included? ie would it be easier to just change the include? (21:58:00) Robot101: we want to discourage this camelcaps as much as possible, so let's just embrace the fact he included it as lowercase. (21:58:13) ***LSchiere2 detects evasion (21:58:26) LSchiere2: you do realize do you not that cvs does NOT handle renaming a file well at all (21:58:37) Robot101: detect someone who is on a windows laptop ssh'd to a machine which doesn't have a gaim tree on (21:58:50) Robot101: the file isn't ours (21:58:55) Robot101: it's just ripped from some other project (21:58:58) zx64: mv File file; cvs remove File; cvs add file; cvs ci; done (21:59:00) Robot101: we havn't changed it much.any (21:59:04) RUBotzman left the room ("Bye all"). (21:59:11) LSchiere2: yes i'm aware of the steps involved zx64 (21:59:12) Robot101: *much/any committer: Tailor Script <tailor@pidgin.im>
author Luke Schierer <lschiere@pidgin.im>
date Sat, 12 Jul 2003 02:00:38 +0000
parents 13a37cacd10b
children 8ba58b296cc1
line wrap: on
line source

/**
 * @file utils.c Utility 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"

char *
msn_url_decode(const char *str)
{
	static char buf[MSN_BUF_LEN];
	int i, j = 0;
	char *bum;

	g_return_val_if_fail(str != NULL, NULL);

	for (i = 0; i < strlen(str); i++) {
		char hex[3];

		if (str[i] != '%')
			buf[j++] = str[i];
		else {
			strncpy(hex, str + ++i, 2);
			hex[2] = '\0';

			/* i is pointing to the start of the number */
			i++;

			/*
			 * Now it's at the end and at the start of the for loop
			 * will be at the next character.
			 */
			buf[j++] = strtol(hex, NULL, 16);
		}
	}

	buf[j] = '\0';

	if (!g_utf8_validate(buf, -1, (const char **)&bum))
		*bum = '\0';

	return buf;
}

char *
msn_url_encode(const char *str)
{
	static char buf[MSN_BUF_LEN];
	int i, j = 0;

	g_return_val_if_fail(str != NULL, NULL);

	for (i = 0; i < strlen(str); i++) {
		if (isalnum(str[i]))
			buf[j++] = str[i];
		else {
			sprintf(buf + j, "%%%02x", (unsigned char)str[i]);
			j += 3;
		}
	}

	buf[j] = '\0';

	return buf;
}

char *
msn_parse_format(const char *mime)
{
	char *cur;
	GString *ret = g_string_new(NULL);
	unsigned int colors[3];

	cur = strstr(mime, "FN=");

	if (cur && (*(cur = cur + 3) != ';')) {
		ret = g_string_append(ret, "<FONT FACE=\"");

		while (*cur && *cur != ';') {
			ret = g_string_append_c(ret, *cur);
			cur++;
		}

		ret = g_string_append(ret, "\">");
	}
	
	cur = strstr(mime, "EF=");

	if (cur && (*(cur = cur + 3) != ';')) {
		while (*cur && *cur != ';') {
			ret = g_string_append_c(ret, '<');
			ret = g_string_append_c(ret, *cur);
			ret = g_string_append_c(ret, '>');
			cur++;
		}
	}

	cur = strstr(mime, "CO=");

	if (cur && (*(cur = cur + 3) != ';')) {
		int i;

		i = sscanf(cur, "%02x%02x%02x;", &colors[0], &colors[1], &colors[2]);

		if (i > 0) {
			char tag[64];

			if (i == 1) {
				colors[2] = colors[0];
				colors[1] = 0;
				colors[0] = 0;
			}
			else if (i == 2) {
				colors[2] = colors[1];
				colors[1] = colors[0];
				colors[0] = 0;
			}

			g_snprintf(tag, sizeof(tag),
					   "<FONT COLOR=\"#%02hhx%02hhx%02hhx\">",
					   colors[2], colors[1], colors[0]);

			ret = g_string_append(ret, tag);
		}
	}

	cur = msn_url_decode(ret->str);
	g_string_free(ret, TRUE);

	return cur;
}