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

WEB邮件程序

开发平台:

C/C++

  1. /*
  2. ** Copyright 2000 Double Precision, Inc.
  3. ** See COPYING for distribution information.
  4. */
  5. #if HAVE_CONFIG_H
  6. #include "config.h"
  7. #endif
  8. #include <sys/types.h>
  9. #include <sys/stat.h>
  10. #include <string.h>
  11. #include <stdlib.h>
  12. #include <time.h>
  13. #if HAVE_UNISTD_H
  14. #include <unistd.h>
  15. #endif
  16. #include <stdio.h>
  17. #include <ctype.h>
  18. #include <errno.h>
  19. #include "maildirmisc.h"
  20. static const char rcsid[]="$Id: maildirpath.c,v 1.5 2000/03/08 17:52:46 mrsam Exp $";
  21. char *maildir_folderdir(const char *maildir, const char *foldername)
  22. {
  23. char *p;
  24. const char *r;
  25. size_t l;
  26. if (!maildir) maildir=".";
  27. l=strlen(maildir);
  28. if (foldername == 0 ||
  29. #if HAVE_STRCASECMP
  30. strcasecmp(foldername, INBOX)
  31. #else
  32. strcmp(foldername, INBOX)
  33. #endif
  34. == 0)
  35. {
  36. if ((p=malloc(l+1)) == 0) return (0);
  37. strcpy(p, maildir);
  38. return(p);
  39. }
  40. /* Rules: no leading/trailing periods, no /s */
  41. if (*foldername == '.' || strchr(foldername, '/'))
  42. {
  43. errno=EINVAL;
  44. return (0);
  45. }
  46. for (r=foldername; *r; r++)
  47. {
  48. if (*r != '.') continue;
  49. if (r[1] == 0 || r[1] == '.')
  50. {
  51. errno=EINVAL;
  52. return (0);
  53. }
  54. }
  55. if ((p=malloc(l+strlen(foldername)+3)) == 0) return (0);
  56. *p=0;
  57. if (strcmp(maildir, "."))
  58. strcat(strcpy(p, maildir), "/");
  59. return (strcat(strcat(p, "."), foldername));
  60. }