/* $Cambridge: exim/exim-src/src/lookups/lf_quote.c,v 1.4 2007/01/08 10:50:19 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
*************************************************/
/* Copyright (c) University of Cambridge 1995 - 2007 */
/* See the file NOTICE for conditions of use and distribution. */
#include "../exim.h"
#include "lf_functions.h"
/*************************************************
* Add string to result, quoting if necessary *
*************************************************/
/* This function is called by some lookups that create name=value result
strings, to handle the quoting of the data. It adds "name=" to the result,
followed by appropriately quoted data, followed by a single space.
Arguments:
name the field name
value the data value
vlength the data length
result the result pointer
asize points to the size variable
aoffset points to the offset variable
Returns: the result pointer (possibly updated)
*/
uschar *
lf_quote(uschar *name, uschar *value, int vlength, uschar *result, int *asize,
int *aoffset)
{
result = string_append(result, asize, aoffset, 2, name, US"=");
/* NULL is handled as an empty string */
if (value == NULL) value = US"";
/* Quote the value if it is empty, contains white space, or starts with a quote
character. */
if (value[0] == 0 || Ustrpbrk(value, " \t\n\r") != NULL || value[0] == '\"')
{
int j;
result = string_cat(result, asize, aoffset, US"\"", 1);
for (j = 0; j < vlength; j++)
{
if (value[j] == '\"' || value[j] == '\\')
result = string_cat(result, asize, aoffset, US"\\", 1);
result = string_cat(result, asize, aoffset, US value+j, 1);
}
result = string_cat(result, asize, aoffset, US"\"", 1);
}
else
{
result = string_cat(result, asize, aoffset, US value, vlength);
}
return string_cat(result, asize, aoffset, US" ", 1);
}
/* End of lf_quote.c */
syntax highlighted by Code2HTML, v. 0.9.1