rfc822_getaddr.c
上传用户:s81996212
上传日期:2007-01-04
资源大小:722k
文件大小:1k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. /*
  2. ** Copyright 1998 - 1999 Double Precision, Inc.
  3. ** See COPYING for distribution information.
  4. */
  5. /*
  6. ** $Id: rfc822_getaddr.c,v 1.5 1999/12/06 13:29:49 mrsam Exp $
  7. */
  8. #include "rfc822.h"
  9. #include <stdlib.h>
  10. static void cntlen(char c, void *p)
  11. {
  12. if (c != 'n')
  13. ++ *(size_t *)p;
  14. }
  15. static void saveaddr(char c, void *p)
  16. {
  17. if (c != 'n')
  18. {
  19. char **cp=(char **)p;
  20. *(*cp)++=c;
  21. }
  22. }
  23. char *rfc822_getaddr(const struct rfc822a *rfc, int n)
  24. {
  25. size_t addrbuflen=0;
  26. char *addrbuf, *ptr;
  27. rfc822_praddr(rfc, n, &cntlen, &addrbuflen);
  28. if (!(addrbuf=malloc(addrbuflen+1)))
  29. return (0);
  30. ptr=addrbuf;
  31. rfc822_praddr(rfc, n, &saveaddr, &ptr);
  32. addrbuf[addrbuflen]=0;
  33. return (addrbuf);
  34. }
  35. char *rfc822_getname(const struct rfc822a *rfc, int n)
  36. {
  37. char *p, *q;
  38. size_t addrbuflen=0;
  39. char *addrbuf, *ptr;
  40. rfc822_prname(rfc, n, &cntlen, &addrbuflen);
  41. if (!(addrbuf=malloc(addrbuflen+1)))
  42. return (0);
  43. ptr=addrbuf;
  44. rfc822_prname(rfc, n, &saveaddr, &ptr);
  45. addrbuf[addrbuflen]=0;
  46. /* Get rid of surrounding quotes */
  47. for (p=q=addrbuf; *p; p++)
  48. if (*p != '"') *q++=*p;
  49. *q=0;
  50. return (addrbuf);
  51. }
  52. char *rfc822_gettok(const struct rfc822token *t)
  53. {
  54. size_t addrbuflen=0;
  55. char *addrbuf, *ptr;
  56. rfc822tok_print(t, &cntlen, &addrbuflen);
  57. if (!(addrbuf=malloc(addrbuflen+1)))
  58. return (0);
  59. ptr=addrbuf;
  60. rfc822tok_print(t, &saveaddr, &ptr);
  61. addrbuf[addrbuflen]=0;
  62. return (addrbuf);
  63. }