Back to index

courier  0.68.2
comorigaddr.c
Go to the documentation of this file.
00001 /*
00002 ** Copyright 1998 - 1999 Double Precision, Inc.
00003 ** See COPYING for distribution information.
00004 */
00005 
00006 #include      "courier.h"
00007 
00008 #include      <stdlib.h>
00009 
00010 
00011 char *dsnencodeorigaddr(const char *address)
00012 {
00013 int l=0;
00014 char *p=0, *q=0;
00015 const char *r;
00016 int pass;
00017 
00018 static const char x[16]="0123456789ABCDEF";
00019 
00020        for (pass=0; pass<2; pass++)
00021        {
00022               if (pass)     p=q=courier_malloc(l);
00023               l=1;
00024 
00025               for (r="rfc822;"; *r; r++)
00026               {
00027                      if (pass)     *q++= *r;
00028                      ++l;
00029               }
00030 
00031               for (r=address; *r; r++)
00032               {
00033                      if ( *r < '!' || *r > '~' || *r == '+' || *r == '=')
00034                      {
00035                             if (pass)
00036                             {
00037                                    *q++='+';
00038                                    *q++= x[ (int) (((*r) >> 4) & 0x0F) ];
00039                                    *q++= x[ (int)((*r) & 0x0F) ];
00040                             }
00041                             l += 3;
00042                      }
00043                      else
00044                      {
00045                             if (pass) *q++= *r;
00046                             ++l;
00047                      }
00048               }
00049        }
00050        *q=0;
00051        return (p);
00052 }
00053