#undef NDEBUG #include #include #include #include int main(int argc, char **argv) { static sbuf sb_static; FILE *f; sbuf *sb; size_t len; void *p; char *r; sb = sbuf_init(); printf("=== 1\n"); sbuf_add(sb, "\r\nONE\r\n\r\nTWO\r\n\r\nTHREE\r\n"); r = sbuf_fetch(sb, 0, "\r\n", &len, 3); printf("[%s]: ", r?r:""); printf("%d\n", len); r = sbuf_fetch(sb, 0, "\r\n", &len, 3); printf("[%s]: ", r?r:""); printf("%d\n", len); r = sbuf_fetch(sb, 0, "\r\n", &len, 3); printf("[%s]: ", r?r:""); printf("%d\n", len); r = sbuf_fetch(sb, 0, "\r\n", &len, 3); printf("[%s]: ", r?r:""); printf("%d\n", len); r = sbuf_detach(sb, NULL, NULL); printf("[%s]\n", r?r:""); sbuf_zero(sb); printf("=== 2\n"); sbuf_add(sb, "\r\nONE\r\n\r\nTWO\r\n\r\nTHREE\r\n"); r = sbuf_fetch(sb, 0, "\r\n", &len, 2); printf("[%s]: ", r?r:""); printf("%d\n", len); r = sbuf_fetch(sb, 0, "\r\n", &len, 2); printf("[%s]: ", r?r:""); printf("%d\n", len); r = sbuf_fetch(sb, 0, "\r\n", &len, 2); printf("[%s]: ", r?r:""); printf("%d\n", len); r = sbuf_fetch(sb, 0, "\r\n", &len, 2); printf("[%s]: ", r?r:""); printf("%d\n", len); r = sbuf_fetch(sb, 0, "\r\n", &len, 2); printf("[%s]: ", r?r:""); printf("%d\n", len); r = sbuf_fetch(sb, 0, "\r\n", &len, 2); printf("[%s]: ", r?r:""); printf("%d\n", len); r = sbuf_fetch(sb, 0, "\r\n", &len, 2); printf("[%s]: ", r?r:""); printf("%d\n", len); r = sbuf_fetch(sb, 0, "\r\n", &len, 2); printf("[%s]: ", r?r:""); printf("%d\n", len); r = sbuf_fetch(sb, 0, "\r\n", &len, 2); printf("[%s]: ", r?r:""); printf("%d\n", len); r = sbuf_fetch(sb, 0, "\r\n", &len, 2); printf("[%s]: ", r?r:""); printf("%d\n", len); r = sbuf_detach(sb, NULL, NULL); printf("[%s]\n", r ? r : ""); sbuf_zero(sb); printf("=== 3\n"); sbuf_add(sb, "\r\nONE\r\n\r\nTWO\r\n\r\nTHREE\r\n"); printf("[%s]: ", sbuf_fetch(sb, 0, "\r\n", &len, 1)); printf("%d\n", len); printf("[%s]: ", sbuf_fetch(sb, 0, "\r\n", &len, 1)); printf("%d\n", len); printf("[%s]: ", sbuf_fetch(sb, 0, "\r\n", &len, 1)); printf("%d\n", len); r = sbuf_fetch(sb, 0, "\r\n", &len, 1); printf("[%s]: ", r ? r : ""); printf("%d\n", len); printf("[%s]\n", sbuf_detach(sb, NULL, NULL)); sbuf_zero(sb); printf("=== 4\n"); sbuf_add(sb, "\r\nONE\r\n\r\nTWO\r\n\r\nTHREE\r\n"); printf("[%s]: ", sbuf_fetch(sb, 0, "\r\n", &len, 0)); printf("%d\n", len); printf("[%s]: ", sbuf_fetch(sb, 0, "\r\n", &len, 0)); printf("%d\n", len); printf("[%s]: ", sbuf_fetch(sb, 0, "\r\n", &len, 0)); printf("%d\n", len); printf("[%s]: ", sbuf_fetch(sb, 0, "\r\n", &len, 0)); printf("%d\n", len); printf("[%s]: ", sbuf_fetch(sb, 0, "\r\n", &len, 0)); printf("%d\n", len); printf("[%s]: ", sbuf_fetch(sb, 0, "\r\n", &len, 0)); printf("%d\n", len); r = sbuf_fetch(sb, 0, "\r\n", &len, 0); printf("[%s]: ", r ? r : ""); printf("%d\n", len); r = sbuf_fetch(sb, 0, "\r\n", &len, 0); printf("[%s]: ", r ? r : ""); printf("%d\n", len); r = sbuf_fetch(sb, 0, "\r\n", &len, 0); printf("[%s]: ", r ? r : ""); printf("%d\n", len); printf("[%s]\n", sbuf_detach(sb, NULL, NULL)); sbuf_zero(sb); /* * Check sbuf_trim(). */ sbuf_add(sb, "123"); len = sbuf_trim(sb, 0, 10); assert(len == 3); sbuf_add(sb, "123"); len = sbuf_trim(sb, 1, 10); assert(len == 3); sbuf_add(sb, "123"); len = sbuf_trim(sb, 1, 1); assert(len == 1); assert((sb->len - sb->off) == 2); assert(strcmp(sbuf2ptr(sb), "23") == 0); len = sbuf_trim(sb, 0, 1); assert(len == 1); assert((sb->len - sb->off) == 1); assert(strcmp(sbuf2ptr(sb), "2") == 0); /* * Check offset movements. */ sbuf_zero(sb); sbuf_add2(sb, "1234567890", 10); assert(sb->off == 0); assert(sb->len == 10); assert(sb->size == 16); sb->off = 7; sbuf_add2(sb, "123456", 6); assert(sb->off == 0); assert(sb->len == 9); assert(sb->size == 16); assert(!strcmp(sb->buf, "890123456")); sb->off = 8; sbuf_sprintf(sb, "1234567"); assert(sb->off == 0); assert(sb->len == 8); assert(sb->size == 16); sb->off = 1; sbuf_sprintf(sb, "123456789"); assert(sb->off == 1); assert(sb->len == 17); assert(sb->size == 32); sbuf_sprintf(sb, "1234"); assert(sb->off == 1); assert(sb->len == 21); assert(sb->size == 32); sbuf_sprintf(sb, "1234567890"); assert(sb->off == 1); assert(sb->len == 31); assert(sb->size == 32); sb->off = 10; sbuf_sprintf(sb, "1234567890"); assert(sb->off == 0); assert(sb->len == 31); assert(sb->size == 32); /* * Check extends. */ memset(&sb_static, 0, sizeof(sb_static)); sbuf_extend(&sb_static, 4096); printf("size = %d\n", sb_static.size); assert(sb_static.size == 4096); memset(&sb_static, 0, sizeof(sb_static)); sbuf_extend(&sb_static, 2); assert(sb_static.size == 16); memset(&sb_static, 0, sizeof(sb_static)); sbuf_add2(&sb_static, "abc", 3); assert(sb_static.size == 16); memset(&sb_static, 0, sizeof(sb_static)); sbuf_extend(&sb_static, 16); assert(sb_static.size == 16); sbuf_add2(&sb_static, "12345678", 8); assert(sb_static.size == 16); p = sb_static.buf; sbuf_add2(&sb_static, "12345678", 8); assert(sb_static.size > 16); #ifdef __FreeBSD__ /* Allocator with known properties */ assert(p != sb_static.buf); /* Place for implicit '\0' */ #endif /* * Check sbuf_fgets */ f = fopen("Makefile", "r"); assert(f); p = sbuf_fgets(sb, f); printf("1. sb->off = %d, sb->len = %d, sb->size = %d [%s]\n", sb->off, sb->len, sb->size, p); p = sbuf_fgets(sb, f); printf("2. sb->off = %d, sb->len = %d, sb->size = %d [%s]\n", sb->off, sb->len, sb->size, p); p = sbuf_fgets(sb, f); printf("3. sb->off = %d, sb->len = %d, sb->size = %d [%s]\n", sb->off, sb->len, sb->size, p); p = sbuf_fgets(sb, f); printf("3. sb->off = %d, sb->len = %d, sb->size = %d [%s]\n", sb->off, sb->len, sb->size, p); p = sbuf_fgets(sb, f); printf("3. sb->off = %d, sb->len = %d, sb->size = %d [%s]\n", sb->off, sb->len, sb->size, p); return 0; }