view src/lib-imap/imap-util.c @ 91:dc0891523276 HEAD

bugfix for sync fix
author Timo Sirainen <tss@iki.fi>
date Thu, 29 Aug 2002 01:42:00 +0300
parents 3b1985cbc908
children 4223b9ed0c80
line wrap: on
line source

/* Copyright (C) 2002 Timo Sirainen */

#include "lib.h"
#include "temp-string.h"
#include "imap-util.h"

const char *imap_write_flags(MailFlags flags, const char *custom_flags[])
{
	TempString *str;
	const char *sysflags, *name;
	int i;

	if (flags == 0)
		return "";

	sysflags = t_strconcat((flags & MAIL_ANSWERED) ? " \\Answered" : "",
			       (flags & MAIL_FLAGGED) ? " \\Flagged" : "",
			       (flags & MAIL_DELETED) ? " \\Deleted" : "",
			       (flags & MAIL_SEEN) ? " \\Seen" : "",
			       (flags & MAIL_DRAFT) ? " \\Draft" : "",
			       (flags & MAIL_RECENT)  ? " \\Recent" : "",
			       NULL);

	if (*sysflags != '\0')
		sysflags++;

	if ((flags & MAIL_CUSTOM_FLAGS_MASK) == 0)
		return sysflags;

	/* we have custom flags too */
	str = t_string_new(256);
	t_string_append(str, sysflags);

	for (i = 0; i < MAIL_CUSTOM_FLAGS_COUNT; i++) {
		if (flags & (1 << (i + MAIL_CUSTOM_FLAG_1_BIT))) {
			name = custom_flags[i];
			if (name != NULL && *name != '\0') {
				if (str->len > 0)
					t_string_append_c(str, ' ');
				t_string_append(str, name);
			}
		}
	}

	return str->str;
}

const char *imap_escape(const char *str)
{
	char *ret, *p;
	unsigned int i, esc;

	/* get length of string and number of chars to escape */
	esc = 0;
	for (i = 0; str[i] != '\0'; i++) {
		if (IS_ESCAPED_CHAR(str[i]))
			esc++;
	}

	if (esc == 0)
		return str;

	/* escape them */
	p = ret = t_malloc(i + esc + 1);
	for (; *str != '\0'; str++) {
		if (IS_ESCAPED_CHAR(str[i]))
			*p++ = '\\';
		*p++ = *str;
	}
	*p = '\0';
	return ret;
}