Start
[exim.git] / src / src / lookups / lf_quote.c
diff --git a/src/src/lookups/lf_quote.c b/src/src/lookups/lf_quote.c
new file mode 100644 (file)
index 0000000..9cc2917
--- /dev/null
@@ -0,0 +1,67 @@
+/* $Cambridge: exim/src/src/lookups/lf_quote.c,v 1.1 2004/10/07 13:10:01 ph10 Exp $ */
+
+/*************************************************
+*     Exim - an Internet mail transport agent    *
+*************************************************/
+
+/* Copyright (c) University of Cambridge 1995 - 2004 */
+/* 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 */