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

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 <stdio.h>
  28. #include <string.h>
  29. #include <stdlib.h>
  30. #include <time.h>
  31. #if HAVE_UNISTD_H
  32. #include <unistd.h>
  33. #endif
  34. #include "maildirmisc.h"
  35. static const char rcsid[]="$Id: maildirgetnew.c,v 1.1 2000/02/14 05:11:39 mrsam Exp $";
  36. static void do_maildir_getnew(const char *, const char *);
  37. void maildir_getnew(const char *maildir, const char *folder)
  38. {
  39. char *dir=maildir_folderdir(maildir, folder);
  40. char *newd, *curd;
  41. if (!dir) return;
  42. newd=malloc(strlen(dir)+sizeof("/new"));
  43. curd=malloc(strlen(dir)+sizeof("/cur"));
  44. if (newd && curd)
  45. {
  46. strcat(strcpy(newd, dir), "/new");
  47. strcat(strcpy(curd, dir), "/cur");
  48. do_maildir_getnew(newd, curd);
  49. }
  50. if (newd) free(newd);
  51. if (curd) free(curd);
  52. free(dir);
  53. }
  54. static void do_maildir_getnew(const char *newd, const char *curd)
  55. {
  56. DIR *dirp;
  57. struct dirent *de;
  58. dirp=opendir(newd);
  59. while (dirp && (de=readdir(dirp)) != 0)
  60. {
  61. char *np, *cp;
  62. if (de->d_name[0] == '.') continue;
  63. if ((np=malloc(strlen(newd)+strlen(de->d_name)+2)) != 0)
  64. {
  65. if ((cp=malloc(strlen(curd)+strlen(de->d_name)
  66. + sizeof("/:2,"))) != 0)
  67. {
  68. char *a;
  69. strcat(strcat(strcpy(np, newd), "/"),
  70. de->d_name);
  71. strcat(strcat(strcpy(cp, curd), "/"),
  72. de->d_name);
  73. a=strchr(cp+strlen(curd), ':');
  74. if (a && strncmp(a, ":2,", 3))
  75. {
  76. *a=0;
  77. a=0;
  78. }
  79. if (!a) strcat(cp, ":2,");
  80. rename(np, cp);
  81. free(cp);
  82. }
  83. free(np);
  84. }
  85. }
  86. if (dirp) closedir(dirp);
  87. }