X-Git-Url: https://git.distorted.org.uk/~mdw/ezmlm/blobdiff_plain/5b62e993b0af39700031c2875d7f6654e6a02850..f8beb284087c279acfb30506f5bb32baa4949b44:/encodeQ.c diff --git a/encodeQ.c b/encodeQ.c new file mode 100644 index 0000000..080b875 --- /dev/null +++ b/encodeQ.c @@ -0,0 +1,58 @@ +/* $Id: encodeQ.c,v 1.2 1998/02/28 19:03:02 lindberg Exp $*/ +/* $Name: ezmlm-idx-040 $*/ + +#include "errtxt.h" +#include "mime.h" +#include "stralloc.h" +#include "strerr.h" + +static void die_nomem(fatal) + char *fatal; +{ + strerr_die2x(111,fatal,ERR_NOMEM); +} + +static char *hexchar = "0123456789ABCDEF"; + +void encodeQ(indata,n,outdata,fatal) +char *indata; +unsigned int n; +stralloc *outdata; +char *fatal; + + /* converts any character with the high order bit set to */ + /* quoted printable. In: n chars of indata, out: stralloc outdata*/ + +{ + register char *cpout; + register char ch; + unsigned int i; + char *cpin; + + cpin = indata; + i = 0; + /* max 3 outchars per inchar & 2 char newline per 72 chars */ + if (!stralloc_copys(outdata,"")) die_nomem(fatal); + if (!stralloc_ready(outdata,n * 3 + n/36)) die_nomem(fatal); /* worst case */ + cpout = outdata->s; + while (n--) { + ch = *cpin++; + if (ch != ' ' && ch != '\n' && ch != '\t' && + (ch > 126 || ch < 33 || ch == 61)) { + *(cpout++) = '='; + *(cpout++) = hexchar[(ch >> 4) & 0xf]; + *(cpout++) = hexchar[ch & 0xf]; + i += 3; + } else { + if (ch == '\n') + i = 0; + *(cpout++) = ch; + } + if (i >= 72) { + *(cpout++) = '='; + *(cpout++) = '\n'; + i = 0; + } + } + outdata->len = (unsigned int) (cpout - outdata->s); +}