Beispiel #1
0
/* ヘッダのフィールド名を取得。 */
int stream_take_headname(stream_t* buff, char* dst, int len)
{
    if (stream_skip(buff) == ERR_FATAL
            || stream_update(buff) == ERR_FATAL) {
        return ERR_FATAL;
    }
    int i;
    for (i = 0; i < len; i++) {
        switch (buff->buff[buff->tail]) {
        case ' ':
        case '\t':
        case '\n':
        case '\r':
        case ':':
            dst[i] = '\0';
            if (stream_skip(buff) == ERR_FATAL
                    || stream_take(buff, ":", 1) == ERR_FATAL) {
                return ERR_FATAL;
            } else {
                return 1;
            }
        default:
            dst[i] = tolower(buff->buff[buff->tail]);
            break;
        }
        buff->tail += 1;
        if (buff->tail == BUFF_SIZE) {
            buff->tail = 0;
        }
    }
    // reset and throw error
    buff->tail -= i;
    fprintf(stderr, "stream_take_headname: too large header name.\n");
    return 0;
}
Beispiel #2
0
void test_stream_take(void) {
	stream_t *st;
	
	st = stream_range(1, 1000, 1);
	st = stream_take(st, 10);
	CU_ASSERT(stream_length(st) == 10);
	
	return;
}
Beispiel #3
0
/* CRLFを読む。 */
int stream_take_newline(stream_t* buff)
{
    return stream_take(buff, "\r\n", 1);
}