wsbuffer.c
上传用户:gzpyjq
上传日期:2013-01-31
资源大小:1852k
文件大小:1k
源码类别:

手机WAP编程

开发平台:

WINDOWS

  1. /*
  2.  *
  3.  * wsbuffer.c
  4.  *
  5.  * Author: Markku Rossi <mtr@iki.fi>
  6.  *
  7.  * Copyright (c) 1999-2000 WAPIT OY LTD.
  8.  *  All rights reserved.
  9.  *
  10.  * A multipurpose buffer.
  11.  *
  12.  */
  13. #include "wsint.h"
  14. /********************* Global functions *********************************/
  15. void ws_buffer_init(WsBuffer *buffer)
  16. {
  17.     buffer->len = 0;
  18.     buffer->data = NULL;
  19. }
  20. void ws_buffer_uninit(WsBuffer *buffer)
  21. {
  22.     ws_free(buffer->data);
  23.     buffer->len = 0;
  24.     buffer->data = NULL;
  25. }
  26. WsBuffer *ws_buffer_alloc()
  27. {
  28.     return ws_calloc(1, sizeof(WsBuffer));
  29. }
  30. void ws_buffer_free(WsBuffer *buffer)
  31. {
  32.     ws_free(buffer->data);
  33.     ws_free(buffer);
  34. }
  35. WsBool ws_buffer_append(WsBuffer *buffer, unsigned char *data, size_t len)
  36. {
  37.     unsigned char *p;
  38.     if (!ws_buffer_append_space(buffer, &p, len))
  39.         return WS_FALSE;
  40.     memcpy(p, data, len);
  41.     return WS_TRUE;
  42. }
  43. WsBool ws_buffer_append_space(WsBuffer *buffer, unsigned char **p, size_t size)
  44. {
  45.     unsigned char *ndata = ws_realloc(buffer->data, buffer->len + size);
  46.     if (ndata == NULL)
  47.         return WS_FALSE;
  48.     buffer->data = ndata;
  49.     if (p)
  50.         *p = buffer->data + buffer->len;
  51.     buffer->len += size;
  52.     return WS_TRUE;
  53. }
  54. unsigned char *ws_buffer_ptr(WsBuffer *buffer)
  55. {
  56.     return buffer->data;
  57. }
  58. size_t ws_buffer_len(WsBuffer *buffer)
  59. {
  60.     return buffer->len;
  61. }
  62. unsigned char *ws_buffer_steal(WsBuffer *buffer)
  63. {
  64.     unsigned char *p = buffer->data;
  65.     buffer->data = NULL;
  66.     buffer->len = 0;
  67.     return p;
  68. }