/* ヘッダのフィールド名を取得。 */ 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; }
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; }
/* CRLFを読む。 */ int stream_take_newline(stream_t* buff) { return stream_take(buff, "\r\n", 1); }