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

WEB邮件程序

开发平台:

C/C++

  1. /*
  2. ** Copyright 1998 - 1999 Double Precision, Inc.  See COPYING for
  3. ** distribution information.
  4. */
  5. /*
  6. ** $Id: sqconfig.c,v 1.4 1999/12/08 06:00:38 mrsam Exp $
  7. */
  8. #include "sqwebmail.h"
  9. #include "sqconfig.h"
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include <string.h>
  13. #if HAVE_UNISTD_H
  14. #include <unistd.h>
  15. #endif
  16. #include <sys/types.h>
  17. #include <sys/stat.h>
  18. /* Assume all configuration data fits in 256 char buffer. */
  19. static char linebuf[256];
  20. const char *read_sqconfig(const char *dir, const char *configfile, time_t *mtime)
  21. {
  22. char *p=malloc(strlen(dir) + strlen(configfile) + 2);
  23. struct stat stat_buf;
  24. FILE *f;
  25. if (!p) enomem();
  26. strcat(strcat(strcpy(p, dir), "/"), configfile);
  27. f=fopen(p, "r");
  28. free(p);
  29. if (!f) return (0);
  30. if (fstat(fileno(f), &stat_buf) != 0 ||
  31. !fgets(linebuf, sizeof(linebuf), f))
  32. {
  33. fclose(f);
  34. return (0);
  35. }
  36. fclose(f);
  37. if (mtime) *mtime=stat_buf.st_mtime;
  38. linebuf[sizeof(linebuf)-1]=0;
  39. if ((p=strchr(linebuf, 'n')) != 0) *p=0;
  40. return (linebuf);
  41. }
  42. void write_sqconfig(const char *dir, const char *configfile, const char *val)
  43. {
  44. char *p=malloc(strlen(dir) + strlen(configfile) + 2);
  45. FILE *f;
  46. if (!p) enomem();
  47. strcat(strcat(strcpy(p, dir), "/"), configfile);
  48. if (!val)
  49. unlink(p);
  50. else
  51. {
  52. f=fopen(p, "w");
  53. if (!f) enomem();
  54. fprintf(f, "%sn", val);
  55. fflush(f);
  56. if (ferror(f)) enomem();
  57. fclose(f);
  58. /* Note - umask should already turn off the 077 bits, but
  59. ** just in case someone screwed up previously, I'll fix it
  60. ** myself */
  61. chmod(p, 0600);
  62. }
  63. free(p);
  64. }