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

WEB邮件程序

开发平台:

C/C++

  1. /*
  2. ** Copyright 1998 - 1999 Double Precision, Inc.  See COPYING for
  3. ** distribution information.
  4. */
  5. /*
  6. ** $Id: buf.c,v 1.3 2000/02/25 01:26:13 mrsam Exp $
  7. */
  8. #include <string.h>
  9. #include "buf.h"
  10. #include "sqwebmail.h"
  11. void buf_allocbuf(struct buf *b, size_t n)
  12. {
  13. if (n > b->size)
  14. {
  15. size_t c=n+64;
  16. char *p= b->ptr ? realloc(b->ptr, c):malloc(c);
  17. if (!p) enomem();
  18. b->ptr=p;
  19. b->size=c;
  20. }
  21. }
  22. void buf_cpy(struct buf *b, const char *c)
  23. {
  24. size_t l=strlen(c);
  25. buf_allocbuf(b, l+1);
  26. strcpy(b->ptr, c);
  27. b->cnt=l;
  28. }
  29. void buf_cpyn(struct buf *b, const char *c, size_t n)
  30. {
  31. size_t l;
  32. for (l=0; l<n; l++)
  33. if (c[l] == '') break;
  34. buf_allocbuf(b, l+1);
  35. memcpy(b->ptr, c, l);
  36. b->ptr[b->cnt=l]=0;
  37. }
  38. void buf_cat(struct buf *b, const char *c)
  39. {
  40. size_t l=strlen(c);
  41. buf_allocbuf(b, b->cnt+l+1);
  42. strcpy(b->ptr+b->cnt, c);
  43. b->cnt += l;
  44. }
  45. void buf_catn(struct buf *b, const char *c, size_t n)
  46. {
  47. size_t l;
  48. for (l=0; l<n; l++)
  49. if (c[l] == '') break;
  50. buf_allocbuf(b, b->cnt+l+1);
  51. memcpy(b->ptr+b->cnt, c, l);
  52. b->ptr[b->cnt += l]=0;
  53. }
  54. void buf_memcpy(struct buf *b, const char *c, size_t n)
  55. {
  56. buf_allocbuf(b, n+1);
  57. memcpy(b->ptr, c, n);
  58. b->ptr[b->cnt=n]=0;
  59. }
  60. void buf_memcat(struct buf *b, const char *c, size_t n)
  61. {
  62. buf_allocbuf(b, b->cnt+n+1);
  63. memcpy(b->ptr+b->cnt, c, n);
  64. b->ptr[b->cnt += n]=0;
  65. }
  66. void buf_trimleft(struct buf *b, size_t n)
  67. {
  68. if (n >= b->cnt)
  69. b->cnt=0;
  70. else
  71. {
  72. size_t i;
  73. for (b->cnt -= n, i=0; i<b->cnt; i++)
  74. b->ptr[i]=b->ptr[i+n];
  75. }
  76. buf_allocbuf(b, b->cnt+1);
  77. b->ptr[b->cnt]=0;
  78. }