1 /*************************************************
2 * Exim - an Internet mail transport agent *
3 *************************************************/
5 /* Copyright (c) University of Cambridge 1995 - 2018 */
6 /* See the file NOTICE for conditions of use and distribution. */
10 #include "lf_functions.h"
13 /*************************************************
14 * Add string to result, quoting if necessary *
15 *************************************************/
17 /* This function is called by some lookups that create name=value result
18 strings, to handle the quoting of the data. It adds "name=" to the result,
19 followed by appropriately quoted data, followed by a single space.
24 vlength the data length
25 result the result expanding-string
27 Returns: the result pointer (possibly updated)
31 lf_quote(uschar
*name
, uschar
*value
, int vlength
, gstring
* result
)
33 result
= string_append(result
, 2, name
, US
"=");
35 /* NULL is handled as an empty string */
43 /* Quote the value if it is empty, contains white space, or starts with a quote
46 if (value
[0] == 0 || Ustrpbrk(value
, " \t\n\r") != NULL
|| value
[0] == '\"')
48 result
= string_catn(result
, US
"\"", 1);
49 for (int j
= 0; j
< vlength
; j
++)
51 if (value
[j
] == '\"' || value
[j
] == '\\')
52 result
= string_catn(result
, US
"\\", 1);
53 result
= string_catn(result
, US value
+j
, 1);
55 result
= string_catn(result
, US
"\"", 1);
58 result
= string_catn(result
, US value
, vlength
);
60 return string_catn(result
, US
" ", 1);
63 /* End of lf_quote.c */