9 #ifndef __AFW_STREAM_H__
10 #define __AFW_STREAM_H__
32 afw_stream_number_raw_response_body,
33 afw_stream_number_response_body,
34 afw_stream_number_console,
35 afw_stream_number_stderr,
36 afw_stream_number_stdout,
37 afw_stream_number_count
122 #define afw_stream_standard(enum_suffix, xctx) \
123 (((xctx)->stream_anchor->streams[afw_stream_number_ ## enum_suffix]) \
124 ? (xctx)->stream_anchor->streams[afw_stream_number_ ## enum_suffix] \
125 : afw_stream_standard_impl(afw_stream_number_ ## enum_suffix, xctx) )
134 #define afw_stream_standard_is_set(enum_suffix, xctx) \
135 ((xctx)->stream_anchor->streams[afw_stream_number_ ## enum_suffix] != NULL )
146 #define afw_stream_standard_set(enum_suffix, stream, xctx) \
147 if ((xctx)->stream_anchor->streams[afw_stream_number_ ## enum_suffix]) { \
148 AFW_THROW_ERROR(general, "Stream already set", xctx); \
150 (xctx)->stream_anchor->streams[afw_stream_number_ ## enum_suffix] = stream
161 #define afw_stream_standard_release(enum_suffix, xctx) \
162 if ((xctx)->stream_anchor->streams[afw_stream_number_ ## enum_suffix]) { \
163 afw_stream_release( \
164 (xctx)->stream_anchor->streams[afw_stream_number_ ## enum_suffix], \
166 *(afw_stream_t **)&(xctx)->stream_anchor-> \
167 streams[afw_stream_number_ ## enum_suffix] = NULL; \
178 #define afw_stream_write_z(writer, s_z, xctx) \
179 afw_stream_write(writer, s_z, strlen(s_z), xctx)
188 #define afw_stream_write_eol(writer, xctx) \
189 afw_stream_write(writer, "\n", strlen("\n"), xctx)
199 #define afw_stream_write_utf8(writer, S, xctx) \
200 afw_stream_write(writer, (S)->s, (S)->len, xctx)
283 afw_stream_internal_stream_anchor_create(
afw_xctx_t *xctx);
293 afw_stream_internal_release_all_streams(
afw_xctx_t *xctx);
#define AFW_DEFINE_INTERNAL(type)
Define an internal function for /src/afw/ source*.c files.
#define AFW_BEGIN_DECLARES
#define AFW_DECLARE(type)
Declare a public afw function.
Interfaceafw_interface header.
apr_size_t afw_size_t
size_t.
apr_int64_t afw_integer_t
typedef for big signed int.
const afw_stream_t * afw_stream_standard_impl(afw_stream_number_t n, afw_xctx_t *xctx)
Implementation for get xctx standard stream instance.
const afw_stream_t * afw_stream_get_by_streamNumber(const afw_integer_t streamNumber, afw_xctx_t *xctx)
Get stream by streamNumber.
afw_size_t afw_stream_set(const afw_stream_t *stream, afw_xctx_t *xctx)
Set an opening stream and get its streamNumber.
afw_size_t afw_stream_get_streamNumber_for_streamId(const afw_utf8_t *streamId, afw_xctx_t *xctx)
Get streamNumber for streamId.
const afw_stream_t * afw_stream_fd_create(FILE *fd, const afw_utf8_t *streamId, afw_boolean_t allow_read, afw_boolean_t allow_write, afw_boolean_t auto_flush, afw_boolean_t close_on_release, const afw_pool_t *p, afw_xctx_t *xctx)
Create a stream to a file descriptor.
const afw_stream_t * afw_stream_fd_open_and_create(const afw_utf8_t *streamId, const afw_utf8_t *path, const afw_utf8_t *mode, afw_boolean_t auto_flush, const afw_pool_t *p, afw_xctx_t *xctx)
Open a file and create a stream for it.
void afw_stream_get_by_streamId(const afw_utf8_t *streamId, const afw_stream_t **stream, afw_size_t *streamNumber, afw_xctx_t *xctx)
Get stream by streamId and streamNumber.
afw_stream_number_t
enum for common xctx streams
void afw_stream_write_integer(const afw_stream_t *writer, afw_integer_t integer, afw_xctx_t *xctx)
Call afw_stream_write() with an integer.
void afw_stream_write_size(const afw_stream_t *writer, afw_size_t size, afw_xctx_t *xctx)
Call afw_stream_write() with an size.
Interface afw_pool public struct.
struct for common xctx streams
Interface afw_stream public struct.
NFC normalized UTF-8 string.
Interface afw_xctx public struct.