/*
- * Copyright (c) 1995-1999, Index Data.
+ * Copyright (c) 1995-2002, Index Data.
* See the file LICENSE for details.
* Sebastian Hammer, Adam Dickmeiss
*
- * $Log: wrbuf.c,v $
- * Revision 1.5 1999-08-27 09:40:32 adam
- * Renamed logf function to yaz_log. Removed VC++ project files.
- *
- * Revision 1.4 1998/02/11 11:53:36 adam
- * Changed code so that it compiles as C++.
- *
- * Revision 1.3 1997/05/01 15:08:15 adam
- * Added log_mask_str_x routine.
- *
- * Revision 1.2 1995/11/01 13:55:06 quinn
- * Minor adjustments
- *
- * Revision 1.1 1995/10/06 08:51:25 quinn
- * Added Write-buffer.
- *
- *
+ * $Id: wrbuf.c,v 1.11 2002-10-22 14:40:21 adam Exp $
*/
/*
* Growing buffer for writing various stuff.
*/
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <stdarg.h>
-#include <wrbuf.h>
+#include <yaz/wrbuf.h>
WRBUF wrbuf_alloc(void)
{
int wrbuf_write(WRBUF b, const char *buf, int size)
{
+ if (size <= 0)
+ return 0;
if (b->pos + size >= b->size)
wrbuf_grow(b, size);
memcpy(b->buf + b->pos, buf, size);
b->pos += size;
return 0;
}
+
+int wrbuf_puts(WRBUF b, const char *buf)
+{
+ wrbuf_write(b, buf, strlen(buf)+1); /* '\0'-terminate as well */
+ (b->pos)--; /* don't include '\0' in count */
+ return 0;
+}
+
+void wrbuf_printf(WRBUF b, const char *fmt, ...)
+{
+ va_list ap;
+ char buf[4096];
+
+ va_start(ap, fmt);
+#ifdef WIN32
+ _vsnprintf(buf, sizeof(buf)-1, fmt, ap);
+#else
+/* !WIN32 */
+#if HAVE_VSNPRINTF
+ vsnprintf(buf, sizeof(buf)-1, fmt, ap);
+#else
+ vsprintf(buf, fmt, ap);
+#endif
+#endif
+ wrbuf_puts (b, buf);
+
+ va_end(ap);
+}
+