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

手机WAP编程

开发平台:

WINDOWS

  1. /*
  2.  *
  3.  * wsstream_data.c
  4.  *
  5.  * Author: Markku Rossi <mtr@iki.fi>
  6.  *
  7.  * Copyright (c) 1999-2000 WAPIT OY LTD.
  8.  *  All rights reserved.
  9.  *
  10.  * Implementation of the data streams.
  11.  *
  12.  */
  13. #include "wmlscript/wsint.h"
  14. /********************* Types and definitions ****************************/
  15. struct WsStreamDataInputCtxRec
  16. {
  17.     const unsigned char *data;
  18.     size_t data_len;
  19.     size_t data_pos;
  20. };
  21. typedef struct WsStreamDataInputCtxRec WsStreamDataInputCtx;
  22. /********************* Static method functions **************************/
  23. static size_t data_input(void *context, WsUInt32 *buf, size_t buflen)
  24. {
  25.     WsStreamDataInputCtx *ctx = (WsStreamDataInputCtx *) context;
  26.     size_t read;
  27.     for (read = 0;
  28.          read < buflen && ctx->data_pos < ctx->data_len;
  29.          read++, ctx->data_pos++)
  30.         buf[read] = ctx->data[ctx->data_pos];
  31.     return read;
  32. }
  33. static void data_close(void *context)
  34. {
  35.     WsStreamDataInputCtx *ctx = (WsStreamDataInputCtx *) context;
  36.     ws_free(ctx);
  37. }
  38. /********************* Global functions *********************************/
  39. WsStream *ws_stream_new_data_input(const unsigned char *data, size_t data_len)
  40. {
  41.     WsStreamDataInputCtx *ctx = ws_calloc(1, sizeof(*ctx));
  42.     WsStream *stream;
  43.     if (ctx == NULL)
  44.         return NULL;
  45.     ctx->data = data;
  46.     ctx->data_len = data_len;
  47.     stream = ws_stream_new(ctx, data_input, NULL, data_close);
  48.     if (stream == NULL)
  49.         /* The stream creation failed.  Close the stream context. */
  50.         data_close(ctx);
  51.     return stream;
  52. }