static int l_cat (lua_State *L) { const char *path = luaL_checkstring (L, 1); svn_opt_revision_t peg_revision; svn_opt_revision_t revision; peg_revision.kind = svn_opt_revision_unspecified; if (lua_gettop (L) < 2 || lua_isnil (L, 2)) { revision.kind = get_revision_kind (path); } else { revision.kind = svn_opt_revision_number; revision.value.number = lua_tointeger (L, 2); } apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; init_function (&ctx, &pool, L); path = svn_path_canonicalize (path, pool); svn_stream_t *stream; stream = svn_stream_empty (pool); svn_stream_set_write (stream, write_fn); svn_stringbuf_t *buffer = svn_stringbuf_create ("\0", pool); svn_stream_set_baton (stream, buffer); err = svn_client_cat2 (stream, path, &peg_revision, &revision, ctx, pool); IF_ERROR_RETURN (err, pool, L); lua_pushstring (L, buffer->data); svn_pool_destroy (pool); return 1; }
svn_ra_svn__stream_t * svn_ra_svn__stream_create(void *baton, svn_read_fn_t read_cb, svn_write_fn_t write_cb, ra_svn_timeout_fn_t timeout_cb, ra_svn_pending_fn_t pending_cb, apr_pool_t *pool) { svn_ra_svn__stream_t *s = apr_palloc(pool, sizeof(*s)); s->stream = svn_stream_empty(pool); svn_stream_set_baton(s->stream, baton); if (read_cb) svn_stream_set_read(s->stream, read_cb); if (write_cb) svn_stream_set_write(s->stream, write_cb); s->baton = baton; s->timeout_fn = timeout_cb; s->pending_fn = pending_cb; return s; }