--- /dev/null
+/*$Id: */
+/*$Name: ezmlm-idx-040 $*/
+
+#include "stralloc.h"
+#include "strerr.h"
+#include "case.h"
+#include "byte.h"
+#include "mime.h"
+#include "errtxt.h"
+
+void concatHDR(indata,n,outdata,fatal)
+char *indata;
+unsigned int n;
+stralloc *outdata;
+char *fatal;
+/* takes a concatenated string of line and continuation line, trims leading */
+/* and trailing LWSP and collapses line breaks and surrounding LWSP to ' '. */
+/* indata has to end in \n or \0 or this routine will write beyond indata! */
+/* if indata ends with \0, this will be changed to \n. */
+
+{
+ register char *cp,*cpout;
+ char *cplast;
+ if (!stralloc_copys(outdata,"")) die_nomem(fatal);
+ if (!stralloc_ready(outdata,n)) die_nomem(fatal);
+ cpout = outdata->s;
+ if (n == 0) return;
+ cplast = indata + n - 1;
+ cp = cplast;
+ while (*cplast == '\0' || *cplast == '\n') --cplast;
+ if (cp == cplast) die_nomem(fatal); /* just in case */
+ *(++cplast) = '\n'; /* have terminal '\n' */
+ cp = indata;
+ while (cp <= cplast) {
+ while (*cp == ' ' || *cp == '\t') ++cp; /* LWSP before */
+ while (*cp != '\n') *(cpout++) = *(cp++); /* text */
+ ++cp; /* skip \n */
+ --cpout; /* last char */
+ while (*cpout == ' ' || *cpout == '\t') --cpout; /* LWSP after */
+ *(++cpout) = ' '; /* replace with single ' ' */
+ ++cpout; /* point to free byte */
+ }
+ outdata->len = cpout - outdata->s;
+}
+