📄 htxparse.c
字号:
/* HTXParse.c** EXTPARSE CLASS**** (c) COPYRIGHT MIT 1995.** Please first read the full copyright statement in the file COPYRIGH.** @(#) $Id: HTXParse.c,v 2.21 1999/02/22 22:10:12 frystyk Exp $**** AUTHORS:** HWL 23/8/94**** HISTORY:** HWL 5/12/95: Added NUL-terminatio, changed name from Ext to X*//* Library include files */#include "wwwsys.h"#include "WWWUtil.h"#include "WWWCore.h"#include "HTXParse.h" /* defines HTStreamClass */#include "HTEPtoCl.h" /* defines dummy routine for talking to client */struct _HTStream { const HTStreamClass * isa; HTXParseStruct * eps;};PRIVATE int HTXParse_put_character (HTStream * me, char c){ while ((me->eps->used + 1) > (me->eps->length + 1)) { me->eps->length += INPUT_BUFFER_SIZE; } if ((me->eps->buffer = (char *) HT_REALLOC(me->eps->buffer, (me->eps->length + 1))) == NULL) HT_OUTOFMEM("me->eps->buffer "); *(me->eps->buffer + me->eps->used) = c; me->eps->used++; me->eps->buffer[me->eps->used] = '\0'; /* null-terminate string */ return HT_OK;}PRIVATE int HTXParse_put_string (HTStream * me, const char * s){ int l = strlen(s); HTTRACE(STREAM_TRACE, "HTXParse_put_string, %s\n" _ s); while ((me->eps->used + l) > (me->eps->length + 1)) { me->eps->length += INPUT_BUFFER_SIZE; } if ((me->eps->buffer = (char *) HT_REALLOC(me->eps->buffer, (me->eps->length + 1))) == NULL) HT_OUTOFMEM("me->eps->buffer "); memcpy( (me->eps->buffer + me->eps->used), s, l); me->eps->used += l; me->eps->buffer[me->eps->used] = '\0'; /* null-terminate string */ return HT_OK;}PRIVATE int HTXParse_write (HTStream * me, const char * s, int l){ while ((me->eps->used + l) > (me->eps->length + 1)) { me->eps->length += INPUT_BUFFER_SIZE; } if ((me->eps->buffer = (char *) HT_REALLOC(me->eps->buffer, (me->eps->length + 1))) == NULL) HT_OUTOFMEM("me->eps->buffer "); memcpy( (me->eps->buffer + me->eps->used), s, l); me->eps->used += l; me->eps->buffer[me->eps->used] = '\0'; /* null-terminate string */ (*(me->eps->call_client))(me->eps); /* client can give status info */ HTTRACE(STREAM_TRACE, "HTXParse_write, l=%d, used = %d\n" _ l _ me->eps->used); return HT_OK;}PRIVATE int HTXParse_flush (HTStream * me){ HTTRACE(STREAM_TRACE, "HTXParse_flush\n"); return HT_OK;}PRIVATE int HTXParse_free (HTStream * me){ HTTRACE(STREAM_TRACE, "HTXParse_free\n"); me->eps->finished = YES; (*(me->eps->call_client))(me->eps); /* client will free buffer */ HT_FREE(me->eps); HT_FREE(me); return HT_OK;}PRIVATE int HTXParse_abort (HTStream * me, HTList * e){ HTTRACE(STREAM_TRACE, "HTXParse_abort\n"); HTXParse_free(me); /* Henrik Nov 2 94 */ return HT_ERROR;}/* XParse stream** -----------------*/PRIVATE const HTStreamClass HTXParseClass ={ "XParse", HTXParse_flush, HTXParse_free, HTXParse_abort, HTXParse_put_character, HTXParse_put_string, HTXParse_write}; PUBLIC HTStream* HTXParse (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream){ HTStream* me; #ifdef HTDEBUG if (STREAM_TRACE) { HTTRACE(STREAM_TRACE, "HTXConvert.."); if (input_format && input_format->name) HTTRACE(STREAM_TRACE, ".. input format is %s" _ input_format->name); if (output_format && output_format->name) HTTRACE(STREAM_TRACE, ".. output format is %s" _ output_format->name); HTTRACE(STREAM_TRACE, "\n"); }#endif /* HTDEBUG */ if ((me = (HTStream *) HT_CALLOC(1, sizeof(*me))) == NULL) HT_OUTOFMEM("HTXConvert"); me->isa = &HTXParseClass; if ((me->eps = (HTXParseStruct *) HT_CALLOC(1, sizeof(HTXParseStruct))) == NULL) HT_OUTOFMEM("HTXConvert"); if (input_format) me->eps->content_type = input_format->name; me->eps->call_client = HTCallClient; if ((me->eps->buffer = (char *) HT_CALLOC(INPUT_BUFFER_SIZE,1)) == NULL) HT_OUTOFMEM("HTXParse"); me->eps->used = 0; me->eps->finished = NO; me->eps->length = INPUT_BUFFER_SIZE; me->eps->request = request; return me;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -