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