mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
Move virBuffer functions into src/buf.c,h
This commit is contained in:
@@ -13,7 +13,7 @@ libvirt_qemud_SOURCES = \
|
||||
bridge.c bridge.h \
|
||||
iptables.c iptables.h \
|
||||
uuid.c uuid.h \
|
||||
buf.c buf.h \
|
||||
../src/buf.c \
|
||||
protocol.h protocol.c \
|
||||
remote_protocol.h remote_protocol.c \
|
||||
remote.c \
|
||||
|
||||
210
qemud/buf.c
210
qemud/buf.c
@@ -1,210 +0,0 @@
|
||||
/*
|
||||
* buf.c: buffers for libvirt
|
||||
*
|
||||
* Copyright (C) 2005-2007 Red Hat, Inc.
|
||||
*
|
||||
* See COPYING.LIB for the License of this software
|
||||
*
|
||||
* Daniel Veillard <veillard@redhat.com>
|
||||
*/
|
||||
|
||||
#include "libvirt/libvirt.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
#include "buf.h"
|
||||
|
||||
/**
|
||||
* virBufferGrow:
|
||||
* @buf: the buffer
|
||||
* @len: the minimum free size to allocate on top of existing used space
|
||||
*
|
||||
* Grow the available space of a buffer to at least @len bytes.
|
||||
*
|
||||
* Returns the new available space or -1 in case of error
|
||||
*/
|
||||
static int
|
||||
virBufferGrow(virBufferPtr buf, unsigned int len)
|
||||
{
|
||||
int size;
|
||||
char *newbuf;
|
||||
|
||||
if (buf == NULL)
|
||||
return (-1);
|
||||
if (len + buf->use < buf->size)
|
||||
return (0);
|
||||
|
||||
size = buf->use + len + 1000;
|
||||
|
||||
newbuf = (char *) realloc(buf->content, size);
|
||||
if (newbuf == NULL) return -1;
|
||||
buf->content = newbuf;
|
||||
buf->size = size;
|
||||
return (buf->size - buf->use);
|
||||
}
|
||||
|
||||
/**
|
||||
* virBufferAdd:
|
||||
* @buf: the buffer to dump
|
||||
* @str: the string
|
||||
* @len: the number of bytes to add
|
||||
*
|
||||
* Add a string range to an XML buffer. if len == -1, the length of
|
||||
* str is recomputed to the full string.
|
||||
*
|
||||
* Returns 0 successful, -1 in case of internal or API error.
|
||||
*/
|
||||
int
|
||||
virBufferAdd(virBufferPtr buf, const char *str, int len)
|
||||
{
|
||||
unsigned int needSize;
|
||||
|
||||
if ((str == NULL) || (buf == NULL)) {
|
||||
return -1;
|
||||
}
|
||||
if (len == 0)
|
||||
return 0;
|
||||
|
||||
if (len < 0)
|
||||
len = strlen(str);
|
||||
|
||||
needSize = buf->use + len + 2;
|
||||
if (needSize > buf->size) {
|
||||
if (!virBufferGrow(buf, needSize - buf->use)) {
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
/* XXX: memmove() is 2x slower than memcpy(), do we really need it? */
|
||||
memmove(&buf->content[buf->use], str, len);
|
||||
buf->use += len;
|
||||
buf->content[buf->use] = 0;
|
||||
return (0);
|
||||
}
|
||||
|
||||
virBufferPtr
|
||||
virBufferNew(unsigned int size)
|
||||
{
|
||||
virBufferPtr buf;
|
||||
|
||||
if (!(buf = malloc(sizeof(*buf)))) return NULL;
|
||||
if (size && (buf->content = malloc(size))==NULL) {
|
||||
free(buf);
|
||||
return NULL;
|
||||
}
|
||||
buf->size = size;
|
||||
buf->use = 0;
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
void
|
||||
virBufferFree(virBufferPtr buf)
|
||||
{
|
||||
if (buf) {
|
||||
if (buf->content)
|
||||
free(buf->content);
|
||||
free(buf);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* virBufferContentAndFree:
|
||||
* @buf: Buffer
|
||||
*
|
||||
* Return the content from the buffer and free (only) the buffer structure.
|
||||
*/
|
||||
char *
|
||||
virBufferContentAndFree (virBufferPtr buf)
|
||||
{
|
||||
char *content = buf->content;
|
||||
|
||||
free (buf);
|
||||
return content;
|
||||
}
|
||||
|
||||
/**
|
||||
* virBufferVSprintf:
|
||||
* @buf: the buffer to dump
|
||||
* @format: the format
|
||||
* @argptr: the variable list of arguments
|
||||
*
|
||||
* Do a formatted print to an XML buffer.
|
||||
*
|
||||
* Returns 0 successful, -1 in case of internal or API error.
|
||||
*/
|
||||
int
|
||||
virBufferVSprintf(virBufferPtr buf, const char *format, ...)
|
||||
{
|
||||
int size, count;
|
||||
va_list locarg, argptr;
|
||||
|
||||
if ((format == NULL) || (buf == NULL)) {
|
||||
return (-1);
|
||||
}
|
||||
size = buf->size - buf->use - 1;
|
||||
va_start(argptr, format);
|
||||
va_copy(locarg, argptr);
|
||||
while (((count = vsnprintf(&buf->content[buf->use], size, format,
|
||||
locarg)) < 0) || (count >= size - 1)) {
|
||||
buf->content[buf->use] = 0;
|
||||
va_end(locarg);
|
||||
if (virBufferGrow(buf, 1000) < 0) {
|
||||
return (-1);
|
||||
}
|
||||
size = buf->size - buf->use - 1;
|
||||
va_copy(locarg, argptr);
|
||||
}
|
||||
va_end(locarg);
|
||||
buf->use += count;
|
||||
buf->content[buf->use] = 0;
|
||||
return (0);
|
||||
}
|
||||
|
||||
/**
|
||||
* virBufferStrcat:
|
||||
* @buf: the buffer to dump
|
||||
* @argptr: the variable list of strings, the last argument must be NULL
|
||||
*
|
||||
* Concatenate strings to an XML buffer.
|
||||
*
|
||||
* Returns 0 successful, -1 in case of internal or API error.
|
||||
*/
|
||||
int
|
||||
virBufferStrcat(virBufferPtr buf, ...)
|
||||
{
|
||||
va_list ap;
|
||||
char *str;
|
||||
|
||||
va_start(ap, buf);
|
||||
|
||||
while ((str = va_arg(ap, char *)) != NULL) {
|
||||
unsigned int len = strlen(str);
|
||||
unsigned int needSize = buf->use + len + 2;
|
||||
|
||||
if (needSize > buf->size) {
|
||||
if (!virBufferGrow(buf, needSize - buf->use))
|
||||
return -1;
|
||||
}
|
||||
memcpy(&buf->content[buf->use], str, len);
|
||||
buf->use += len;
|
||||
buf->content[buf->use] = 0;
|
||||
}
|
||||
va_end(ap);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* vim: set tabstop=4:
|
||||
* vim: set shiftwidth=4:
|
||||
* vim: set expandtab:
|
||||
*/
|
||||
/*
|
||||
* Local variables:
|
||||
* indent-tabs-mode: nil
|
||||
* c-indent-level: 4
|
||||
* c-basic-offset: 4
|
||||
* tab-width: 4
|
||||
* End:
|
||||
*/
|
||||
37
qemud/buf.h
37
qemud/buf.h
@@ -1,37 +0,0 @@
|
||||
/*
|
||||
* buf.h: buffers for libvirt
|
||||
*
|
||||
* Copyright (C) 2005-2007 Red Hat, Inc.
|
||||
*
|
||||
* See COPYING.LIB for the License of this software
|
||||
*
|
||||
* Daniel Veillard <veillard@redhat.com>
|
||||
*/
|
||||
|
||||
#ifndef __VIR_BUFFER_H__
|
||||
#define __VIR_BUFFER_H__
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
/**
|
||||
* virBuffer:
|
||||
*
|
||||
* A buffer structure.
|
||||
*/
|
||||
typedef struct _virBuffer virBuffer;
|
||||
typedef virBuffer *virBufferPtr;
|
||||
struct _virBuffer {
|
||||
char *content; /* The buffer content UTF8 */
|
||||
unsigned int use; /* The buffer size used */
|
||||
unsigned int size; /* The buffer size */
|
||||
};
|
||||
|
||||
virBufferPtr virBufferNew(unsigned int size);
|
||||
void virBufferFree(virBufferPtr buf);
|
||||
char *virBufferContentAndFree(virBufferPtr buf);
|
||||
int virBufferAdd(virBufferPtr buf, const char *str, int len);
|
||||
int virBufferVSprintf(virBufferPtr buf, const char *format, ...)
|
||||
ATTRIBUTE_FORMAT(printf, 2, 3);
|
||||
int virBufferStrcat(virBufferPtr buf, ...);
|
||||
|
||||
#endif /* __VIR_BUFFER_H__ */
|
||||
14
qemud/conf.c
14
qemud/conf.c
@@ -45,19 +45,7 @@
|
||||
#include "internal.h"
|
||||
#include "conf.h"
|
||||
#include "uuid.h"
|
||||
#include "buf.h"
|
||||
|
||||
extern void __virRaiseError(virConnectPtr conn,
|
||||
virDomainPtr dom,
|
||||
virNetworkPtr net,
|
||||
int domain,
|
||||
int code,
|
||||
virErrorLevel level,
|
||||
const char *str1,
|
||||
const char *str2,
|
||||
const char *str3,
|
||||
int int1, int int2, const char *msg, ...)
|
||||
ATTRIBUTE_FORMAT(printf, 12, 13);
|
||||
#include "../src/buf.h"
|
||||
|
||||
void qemudReportError(virConnectPtr conn,
|
||||
virDomainPtr dom,
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
#include <libvirt/virterror.h>
|
||||
|
||||
#include "event.h"
|
||||
#include "buf.h"
|
||||
#include "../src/buf.h"
|
||||
#include "driver.h"
|
||||
|
||||
static int qemudSetCloseExec(int fd) {
|
||||
|
||||
Reference in New Issue
Block a user