static svn_error_t * test_spillbuf_reader(apr_pool_t *pool) { svn_spillbuf_reader_t *sbr = svn_spillbuf__reader_create(4 /* blocksize */, 100 /* maxsize */, pool); apr_size_t amt; char buf[10]; SVN_ERR(svn_spillbuf__reader_write(sbr, "abcdef", 6, pool)); /* Get a buffer from the underlying reader, and grab a couple bytes. */ SVN_ERR(svn_spillbuf__reader_read(&amt, sbr, buf, 2, pool)); SVN_TEST_ASSERT(amt == 2 && memcmp(buf, "ab", 2) == 0); /* Trigger the internal "save" feature of the SBR. */ SVN_ERR(svn_spillbuf__reader_write(sbr, "ghijkl", 6, pool)); /* Read from the save buffer, and from the internal blocks. */ SVN_ERR(svn_spillbuf__reader_read(&amt, sbr, buf, 10, pool)); SVN_TEST_ASSERT(amt == 10 && memcmp(buf, "cdefghijkl", 10) == 0); /* Should be done. */ SVN_ERR(svn_spillbuf__reader_read(&amt, sbr, buf, 10, pool)); SVN_TEST_ASSERT(amt == 0); return SVN_NO_ERROR; }
static svn_error_t * write_handler_spillbuf(void *baton, const char *data, apr_size_t *len) { struct spillbuf_baton *sb = baton; SVN_ERR(svn_spillbuf__reader_write(sb->reader, data, *len, sb->scratch_pool)); svn_pool_clear(sb->scratch_pool); return SVN_NO_ERROR; }