25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
26 * POSSIBILITY OF SUCH DAMAGE. |
26 * POSSIBILITY OF SUCH DAMAGE. |
27 */ |
27 */ |
28 |
28 |
29 /** |
29 /** |
30 * \file streams.h |
30 * @file streams.h |
31 * |
31 * |
32 * \brief Utility functions for data streams. |
32 * @brief Utility functions for data streams. |
33 * |
33 * |
34 * \author Mike Becker |
34 * @author Mike Becker |
35 * \author Olaf Wintermann |
35 * @author Olaf Wintermann |
36 * \copyright 2-Clause BSD License |
36 * @copyright 2-Clause BSD License |
37 */ |
37 */ |
38 |
38 |
39 #ifndef UCX_STREAMS_H |
39 #ifndef UCX_STREAMS_H |
40 #define UCX_STREAMS_H |
40 #define UCX_STREAMS_H |
41 |
41 |
50 * |
50 * |
51 * @param src the source stream |
51 * @param src the source stream |
52 * @param dest the destination stream |
52 * @param dest the destination stream |
53 * @param rfnc the read function |
53 * @param rfnc the read function |
54 * @param wfnc the write function |
54 * @param wfnc the write function |
55 * @param buf a pointer to the copy buffer or \c NULL if a buffer |
55 * @param buf a pointer to the copy buffer or @c NULL if a buffer |
56 * shall be implicitly created on the heap |
56 * shall be implicitly created on the heap |
57 * @param bufsize the size of the copy buffer - if \p buf is \c NULL you can |
57 * @param bufsize the size of the copy buffer - if @p buf is @c NULL you can |
58 * set this to zero to let the implementation decide |
58 * set this to zero to let the implementation decide |
59 * @param n the maximum number of bytes that shall be copied. |
59 * @param n the maximum number of bytes that shall be copied. |
60 * If this is larger than \p bufsize, the content is copied over multiple |
60 * If this is larger than @p bufsize, the content is copied over multiple |
61 * iterations. |
61 * iterations. |
62 * @return the total number of bytes copied |
62 * @return the total number of bytes copied |
63 */ |
63 */ |
64 cx_attr_nonnull_arg(1, 2, 3, 4) |
64 cx_attr_nonnull_arg(1, 2, 3, 4) |
65 cx_attr_access_r(1) |
65 cx_attr_access_r(1) |
76 ); |
76 ); |
77 |
77 |
78 /** |
78 /** |
79 * Reads data from a stream and writes it to another stream. |
79 * Reads data from a stream and writes it to another stream. |
80 * |
80 * |
81 * @param src the source stream |
81 * @param src (@c void*) the source stream |
82 * @param dest the destination stream |
82 * @param dest (@c void*) the destination stream |
83 * @param rfnc the read function |
83 * @param rfnc (@c cx_read_func) the read function |
84 * @param wfnc the write function |
84 * @param wfnc (@c cx_write_func) the write function |
85 * @param buf a pointer to the copy buffer or \c NULL if a buffer |
85 * @param buf (@c char*) a pointer to the copy buffer or @c NULL if a buffer |
86 * shall be implicitly created on the heap |
86 * shall be implicitly created on the heap |
87 * @param bufsize the size of the copy buffer - if \p buf is \c NULL you can |
87 * @param bufsize (@c size_t) the size of the copy buffer - if @p buf is |
88 * set this to zero to let the implementation decide |
88 * @c NULL you can set this to zero to let the implementation decide |
89 * @return total number of bytes copied |
89 * @return total number of bytes copied |
90 */ |
90 */ |
91 #define cx_stream_bcopy(src, dest, rfnc, wfnc, buf, bufsize) \ |
91 #define cx_stream_bcopy(src, dest, rfnc, wfnc, buf, bufsize) \ |
92 cx_stream_bncopy(src, dest, rfnc, wfnc, buf, bufsize, SIZE_MAX) |
92 cx_stream_bncopy(src, dest, rfnc, wfnc, buf, bufsize, SIZE_MAX) |
93 |
93 |
117 /** |
117 /** |
118 * Reads data from a stream and writes it to another stream. |
118 * Reads data from a stream and writes it to another stream. |
119 * |
119 * |
120 * The data is temporarily stored in a stack allocated buffer. |
120 * The data is temporarily stored in a stack allocated buffer. |
121 * |
121 * |
122 * @param src the source stream |
122 * @param src (@c void*) the source stream |
123 * @param dest the destination stream |
123 * @param dest (@c void*) the destination stream |
124 * @param rfnc the read function |
124 * @param rfnc (@c cx_read_func) the read function |
125 * @param wfnc the write function |
125 * @param wfnc (@c cx_write_func) the write function |
126 * @return total number of bytes copied |
126 * @return total number of bytes copied |
127 */ |
127 */ |
128 #define cx_stream_copy(src, dest, rfnc, wfnc) \ |
128 #define cx_stream_copy(src, dest, rfnc, wfnc) \ |
129 cx_stream_ncopy(src, dest, rfnc, wfnc, SIZE_MAX) |
129 cx_stream_ncopy(src, dest, rfnc, wfnc, SIZE_MAX) |
130 |
130 |