summaryrefslogtreecommitdiff
path: root/ext/mailparse/rfc822_getaddr.c
diff options
context:
space:
mode:
authorWez Furlong <wez@php.net>2001-05-20 11:11:28 +0000
committerWez Furlong <wez@php.net>2001-05-20 11:11:28 +0000
commit6468f8b492040c8e973608fa41c5c64a6e2434b2 (patch)
tree2d1737225dd746b4c20c0474598fca3f55c25c95 /ext/mailparse/rfc822_getaddr.c
parent83b18832aa9f252a8f9f47536867a982d143e030 (diff)
downloadphp-git-6468f8b492040c8e973608fa41c5c64a6e2434b2.tar.gz
Imported mailparse extension
@- New mailparse extension for parsing and manipulating MIME mail (Wez)
Diffstat (limited to 'ext/mailparse/rfc822_getaddr.c')
-rw-r--r--ext/mailparse/rfc822_getaddr.c99
1 files changed, 99 insertions, 0 deletions
diff --git a/ext/mailparse/rfc822_getaddr.c b/ext/mailparse/rfc822_getaddr.c
new file mode 100644
index 0000000000..7b9d204e7b
--- /dev/null
+++ b/ext/mailparse/rfc822_getaddr.c
@@ -0,0 +1,99 @@
+/* $Id$ */
+/*
+ ** Copyright 1998 - 1999 Double Precision, Inc.
+ ** See COPYING for distribution information.
+ */
+
+#include "php.h"
+#include "php_mailparse.h"
+
+static void cntlen(char c, void *p)
+{
+ if (c != '\n')
+ ++ *(size_t *)p;
+}
+
+static void saveaddr(char c, void *p)
+{
+ if (c != '\n')
+ {
+ char **cp=(char **)p;
+
+ *(*cp)++=c;
+ }
+}
+
+char *mailparse_rfc822_getaddr(const struct rfc822a *rfc, int n)
+{
+ size_t addrbuflen=0;
+ char *addrbuf, *ptr;
+
+ mailparse_rfc822_praddr(rfc, n, &cntlen, &addrbuflen);
+ if (!(addrbuf=emalloc(addrbuflen+1)))
+ return (0);
+
+ ptr=addrbuf;
+ mailparse_rfc822_praddr(rfc, n, &saveaddr, &ptr);
+ addrbuf[addrbuflen]=0;
+ return (addrbuf);
+}
+
+char *mailparse_rfc822_getname(const struct rfc822a *rfc, int n)
+{
+ char *p, *q;
+ size_t addrbuflen=0;
+ char *addrbuf, *ptr;
+
+ mailparse_rfc822_prname(rfc, n, &cntlen, &addrbuflen);
+ if (!(addrbuf=emalloc(addrbuflen+1)))
+ return (0);
+
+ ptr=addrbuf;
+ mailparse_rfc822_prname(rfc, n, &saveaddr, &ptr);
+ addrbuf[addrbuflen]=0;
+
+ /* Get rid of surrounding quotes */
+
+ for (p=q=addrbuf; *p; p++)
+ if (*p != '"') *q++=*p;
+ *q=0;
+ return (addrbuf);
+}
+
+char *mailparse_rfc822_getname_orlist(const struct rfc822a *rfc, int n)
+{
+ char *p, *q;
+ size_t addrbuflen=0;
+ char *addrbuf, *ptr;
+
+ mailparse_rfc822_prname_orlist(rfc, n, &cntlen, &addrbuflen);
+ if (!(addrbuf=emalloc(addrbuflen+1)))
+ return (0);
+
+ ptr=addrbuf;
+ mailparse_rfc822_prname_orlist(rfc, n, &saveaddr, &ptr);
+ addrbuf[addrbuflen]=0;
+
+ /* Get rid of surrounding quotes */
+
+ for (p=q=addrbuf; *p; p++)
+ if (*p != '"') *q++=*p;
+ *q=0;
+ return (addrbuf);
+}
+
+char *mailparse_rfc822_gettok(const struct rfc822token *t)
+{
+ size_t addrbuflen=0;
+ char *addrbuf, *ptr;
+
+ mailparse_rfc822tok_print(t, &cntlen, &addrbuflen);
+
+ if (!(addrbuf=emalloc(addrbuflen+1)))
+ return (0);
+
+ ptr=addrbuf;
+ mailparse_rfc822tok_print(t, &saveaddr, &ptr);
+ addrbuf[addrbuflen]=0;
+ return (addrbuf);
+}