maildircreateh.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. #include "maildircreate.h"
  6. #include <sys/types.h>
  7. #if HAVE_SYS_STAT_H
  8. #include <sys/stat.h>
  9. #endif
  10. #include <time.h>
  11. #if HAVE_UNISTD_H
  12. #include <unistd.h>
  13. #endif
  14. #include <string.h>
  15. #include <errno.h>
  16. #include <stdio.h>
  17. #include <stdlib.h>
  18. #include "numlib/numlib.h"
  19. static const char rcsid[]="$Id: maildircreateh.c,v 1.5 2000/05/24 03:42:00 mrsam Exp $";
  20. int maildir_try_create_hostname(const char *m, /* Maildir */
  21. const char *u, /* Unique when creating multiple msgs by one pid */
  22. unsigned long s, /* If >0, we know the size of the message */
  23. const char *h, /* Hostname */
  24. char **tptr, /* On exit, filename in tmp */
  25. char **nptr) /* On exit, filename in new */
  26. {
  27. time_t t;
  28. pid_t p;
  29. unsigned l=strlen(m)+strlen(h)+(u ? strlen(u)+1:0)+200;
  30. struct stat stat_buf;
  31. char tbuf[NUMBUFSIZE];
  32. char pbuf[NUMBUFSIZE];
  33. time(&t);
  34. p=getpid();
  35. if ( (*tptr=(char *)malloc(l)) == 0 ) return (-1);
  36. if ( (*nptr=(char *)malloc(l)) == 0 )
  37. {
  38. free(*tptr);
  39. return (-1);
  40. }
  41. strcpy(*tptr, m);
  42. l=strlen(*tptr);
  43. if (l && (*tptr)[l-1] == '/') --l;
  44. sprintf( (*tptr)+l,
  45. (s ? "/tmp/%s.%s%s%s.%s,S=%lu":"/tmp/%s.%s%s%s.%s"),
  46. str_time_t(t, tbuf),
  47. str_pid_t(p, pbuf),
  48. (u && u ? "_":""),
  49. (u && u ? u:""),
  50. h,
  51. s);
  52. strcpy( (*nptr), (*tptr) );
  53. memcpy( (*nptr)+l+1, "new", 3);
  54. if (stat( (*nptr), &stat_buf) < 0)
  55. return (0);
  56. free( *nptr );
  57. free( *tptr );
  58. return (1);
  59. }