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