view src/lib-mail/quoted-printable.c @ 956:26cafa3dc09c HEAD

minor optimization
author Timo Sirainen <tss@iki.fi>
date Sun, 12 Jan 2003 01:49:45 +0200
parents fd8888f6f037
children cad379bd76d6
line wrap: on
line source

/* Copyright (C) 2002 Timo Sirainen */

#include "lib.h"
#include "buffer.h"
#include "hex-binary.h"
#include "quoted-printable.h"

void quoted_printable_decode(const unsigned char *src, size_t src_size,
			     size_t *src_pos_r, buffer_t *dest)
{
	char hexbuf[3];
	size_t src_pos, next;

	hexbuf[2] = '\0';

	next = 0;
	for (src_pos = 0; src_pos < src_size; src_pos++) {
		if (src[src_pos] != '_' && src[src_pos] != '=')
			continue;

		buffer_append(dest, src + next, src_pos - next);

		if (src[src_pos] == '_') {
			buffer_append_c(dest, ' ');
			next = src_pos+1;
		} else {
			/* =<hex> */
			if (src_pos+2 >= src_size)
				break;

			hexbuf[0] = src[src_pos+1];
			hexbuf[1] = src[src_pos+2];

			if (hex_to_binary(hexbuf, dest) == 1) {
				src_pos += 2;
				next = src_pos+1;
			} else {
				/* non-hex data */
				next = src_pos;
			}
		}
	}

	buffer_append(dest, src + next, src_size - next);

	if (src_pos_r != NULL)
		*src_pos_r = src_pos;
}