xref: /qemu/include/io/channel-buffer.h (revision d98e4eb7de93290f7921b0dbe869c7dd3c567945)
1*d98e4eb7SDaniel P. Berrange /*
2*d98e4eb7SDaniel P. Berrange  * QEMU I/O channels memory buffer driver
3*d98e4eb7SDaniel P. Berrange  *
4*d98e4eb7SDaniel P. Berrange  * Copyright (c) 2015 Red Hat, Inc.
5*d98e4eb7SDaniel P. Berrange  *
6*d98e4eb7SDaniel P. Berrange  * This library is free software; you can redistribute it and/or
7*d98e4eb7SDaniel P. Berrange  * modify it under the terms of the GNU Lesser General Public
8*d98e4eb7SDaniel P. Berrange  * License as published by the Free Software Foundation; either
9*d98e4eb7SDaniel P. Berrange  * version 2 of the License, or (at your option) any later version.
10*d98e4eb7SDaniel P. Berrange  *
11*d98e4eb7SDaniel P. Berrange  * This library is distributed in the hope that it will be useful,
12*d98e4eb7SDaniel P. Berrange  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13*d98e4eb7SDaniel P. Berrange  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14*d98e4eb7SDaniel P. Berrange  * Lesser General Public License for more details.
15*d98e4eb7SDaniel P. Berrange  *
16*d98e4eb7SDaniel P. Berrange  * You should have received a copy of the GNU Lesser General Public
17*d98e4eb7SDaniel P. Berrange  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
18*d98e4eb7SDaniel P. Berrange  *
19*d98e4eb7SDaniel P. Berrange  */
20*d98e4eb7SDaniel P. Berrange 
21*d98e4eb7SDaniel P. Berrange #ifndef QIO_CHANNEL_BUFFER_H__
22*d98e4eb7SDaniel P. Berrange #define QIO_CHANNEL_BUFFER_H__
23*d98e4eb7SDaniel P. Berrange 
24*d98e4eb7SDaniel P. Berrange #include "io/channel.h"
25*d98e4eb7SDaniel P. Berrange 
26*d98e4eb7SDaniel P. Berrange #define TYPE_QIO_CHANNEL_BUFFER "qio-channel-buffer"
27*d98e4eb7SDaniel P. Berrange #define QIO_CHANNEL_BUFFER(obj)                                     \
28*d98e4eb7SDaniel P. Berrange     OBJECT_CHECK(QIOChannelBuffer, (obj), TYPE_QIO_CHANNEL_BUFFER)
29*d98e4eb7SDaniel P. Berrange 
30*d98e4eb7SDaniel P. Berrange typedef struct QIOChannelBuffer QIOChannelBuffer;
31*d98e4eb7SDaniel P. Berrange 
32*d98e4eb7SDaniel P. Berrange /**
33*d98e4eb7SDaniel P. Berrange  * QIOChannelBuffer:
34*d98e4eb7SDaniel P. Berrange  *
35*d98e4eb7SDaniel P. Berrange  * The QIOChannelBuffer object provides a channel implementation
36*d98e4eb7SDaniel P. Berrange  * that is able to perform I/O to/from a memory buffer.
37*d98e4eb7SDaniel P. Berrange  *
38*d98e4eb7SDaniel P. Berrange  */
39*d98e4eb7SDaniel P. Berrange 
40*d98e4eb7SDaniel P. Berrange struct QIOChannelBuffer {
41*d98e4eb7SDaniel P. Berrange     QIOChannel parent;
42*d98e4eb7SDaniel P. Berrange     size_t capacity; /* Total allocated memory */
43*d98e4eb7SDaniel P. Berrange     size_t usage;    /* Current size of data */
44*d98e4eb7SDaniel P. Berrange     size_t offset;   /* Offset for future I/O ops */
45*d98e4eb7SDaniel P. Berrange     char *data;
46*d98e4eb7SDaniel P. Berrange };
47*d98e4eb7SDaniel P. Berrange 
48*d98e4eb7SDaniel P. Berrange 
49*d98e4eb7SDaniel P. Berrange /**
50*d98e4eb7SDaniel P. Berrange  * qio_channel_buffer_new:
51*d98e4eb7SDaniel P. Berrange  * @capacity: the initial buffer capacity to allocate
52*d98e4eb7SDaniel P. Berrange  *
53*d98e4eb7SDaniel P. Berrange  * Allocate a new buffer which is initially empty
54*d98e4eb7SDaniel P. Berrange  *
55*d98e4eb7SDaniel P. Berrange  * Returns: the new channel object
56*d98e4eb7SDaniel P. Berrange  */
57*d98e4eb7SDaniel P. Berrange QIOChannelBuffer *
58*d98e4eb7SDaniel P. Berrange qio_channel_buffer_new(size_t capacity);
59*d98e4eb7SDaniel P. Berrange 
60*d98e4eb7SDaniel P. Berrange #endif /* QIO_CHANNEL_BUFFER_H__ */
61