maildirpurgetmp.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. #if HAVE_DIRENT_H
  10. #include <dirent.h>
  11. #define NAMLEN(dirent) strlen((dirent)->d_name)
  12. #else
  13. #define dirent direct
  14. #define NAMLEN(dirent) (dirent)->d_namlen
  15. #if HAVE_SYS_NDIR_H
  16. #include <sys/ndir.h>
  17. #endif
  18. #if HAVE_SYS_DIR_H
  19. #include <sys/dir.h>
  20. #endif
  21. #if HAVE_NDIR_H
  22. #include <ndir.h>
  23. #endif
  24. #endif
  25. #include <sys/types.h>
  26. #include <sys/stat.h>
  27. #include <string.h>
  28. #include <stdlib.h>
  29. #include <time.h>
  30. #if HAVE_UNISTD_H
  31. #include <unistd.h>
  32. #endif
  33. #include "maildirmisc.h"
  34. static void dopurge(const char *m, unsigned nage)
  35. {
  36. time_t current_time;
  37. DIR *dirp;
  38. struct dirent *de;
  39. time (&current_time);
  40. dirp=opendir(m);
  41. while (dirp && (de=readdir(dirp)) != 0)
  42. {
  43. char *z;
  44. struct stat stat_buf;
  45. if (de->d_name[0] == '.') continue;
  46. z=malloc(strlen(m)+strlen(de->d_name)+2);
  47. if (!z) continue;
  48. strcat(strcat(strcpy(z, m), "/"), de->d_name);
  49. if (stat(z, &stat_buf) == 0
  50. && stat_buf.st_ctime < current_time - nage)
  51. unlink(z);
  52. free(z);
  53. }
  54. if (dirp) closedir(dirp);
  55. }
  56. void maildir_purgetmp(const char *maildir)
  57. {
  58. char *m=malloc(strlen(maildir)+sizeof("/tmp"));
  59. if (!m) return;
  60. strcat(strcpy(m, maildir), "/tmp");
  61. dopurge(m, 60 * 60 * 36);
  62. free(m);
  63. }
  64. void maildir_purge(const char *maildir, unsigned nage)
  65. {
  66. char *m=malloc(strlen(maildir)+sizeof("/cur"));
  67. if (!m) return;
  68. strcat(strcpy(m, maildir), "/cur");
  69. dopurge(m, nage);
  70. free(m);
  71. }