Imported upstream version 0.59.3
[hcoop/debian/courier-authlib.git] / rfc822 / rfc822_getaddr.c
1 /*
2 ** Copyright 1998 - 1999 Double Precision, Inc.
3 ** See COPYING for distribution information.
4 */
5
6 /*
7 ** $Id: rfc822_getaddr.c,v 1.6 2000/10/22 05:23:50 mrsam Exp $
8 */
9 #include "rfc822.h"
10 #include <stdlib.h>
11
12 static void cntlen(char c, void *p)
13 {
14 if (c != '\n')
15 ++ *(size_t *)p;
16 }
17
18 static void saveaddr(char c, void *p)
19 {
20 if (c != '\n')
21 {
22 char **cp=(char **)p;
23
24 *(*cp)++=c;
25 }
26 }
27
28 char *rfc822_getaddr(const struct rfc822a *rfc, int n)
29 {
30 size_t addrbuflen=0;
31 char *addrbuf, *ptr;
32
33 rfc822_praddr(rfc, n, &cntlen, &addrbuflen);
34 if (!(addrbuf=malloc(addrbuflen+1)))
35 return (0);
36
37 ptr=addrbuf;
38 rfc822_praddr(rfc, n, &saveaddr, &ptr);
39 addrbuf[addrbuflen]=0;
40 return (addrbuf);
41 }
42
43 char *rfc822_getname(const struct rfc822a *rfc, int n)
44 {
45 char *p, *q;
46 size_t addrbuflen=0;
47 char *addrbuf, *ptr;
48
49 rfc822_prname(rfc, n, &cntlen, &addrbuflen);
50 if (!(addrbuf=malloc(addrbuflen+1)))
51 return (0);
52
53 ptr=addrbuf;
54 rfc822_prname(rfc, n, &saveaddr, &ptr);
55 addrbuf[addrbuflen]=0;
56
57 /* Get rid of surrounding quotes */
58
59 for (p=q=addrbuf; *p; p++)
60 if (*p != '"') *q++=*p;
61 *q=0;
62 return (addrbuf);
63 }
64
65 char *rfc822_getname_orlist(const struct rfc822a *rfc, int n)
66 {
67 char *p, *q;
68 size_t addrbuflen=0;
69 char *addrbuf, *ptr;
70
71 rfc822_prname_orlist(rfc, n, &cntlen, &addrbuflen);
72 if (!(addrbuf=malloc(addrbuflen+1)))
73 return (0);
74
75 ptr=addrbuf;
76 rfc822_prname_orlist(rfc, n, &saveaddr, &ptr);
77 addrbuf[addrbuflen]=0;
78
79 /* Get rid of surrounding quotes */
80
81 for (p=q=addrbuf; *p; p++)
82 if (*p != '"') *q++=*p;
83 *q=0;
84 return (addrbuf);
85 }
86
87 char *rfc822_gettok(const struct rfc822token *t)
88 {
89 size_t addrbuflen=0;
90 char *addrbuf, *ptr;
91
92 rfc822tok_print(t, &cntlen, &addrbuflen);
93
94 if (!(addrbuf=malloc(addrbuflen+1)))
95 return (0);
96
97 ptr=addrbuf;
98 rfc822tok_print(t, &saveaddr, &ptr);
99 addrbuf[addrbuflen]=0;
100 return (addrbuf);
101 }