diff options
| author | Wez Furlong <wez@php.net> | 2001-05-20 11:11:28 +0000 |
|---|---|---|
| committer | Wez Furlong <wez@php.net> | 2001-05-20 11:11:28 +0000 |
| commit | 6468f8b492040c8e973608fa41c5c64a6e2434b2 (patch) | |
| tree | 2d1737225dd746b4c20c0474598fca3f55c25c95 /ext/mailparse/rfc822_getaddr.c | |
| parent | 83b18832aa9f252a8f9f47536867a982d143e030 (diff) | |
| download | php-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.c | 99 |
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); +} |
