/*
- * Copyright (c) 1995-1999, Index Data.
+ * Copyright (c) 1995-2003, Index Data.
* See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: wrbuf.c,v $
- * Revision 1.8 1999-11-30 13:47:12 adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.7 1999/11/03 09:05:56 adam
- * Implemented wrbuf_puts.
- *
- * Revision 1.6 1999/10/28 11:36:40 adam
- * wrbuf_write allows zero buffer length.
- *
- * 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.13 2003-07-14 12:58:18 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 <yaz/wrbuf.h>
(b->pos)--; /* don't include '\0' in count */
return 0;
}
+
+int wrbuf_xmlputs(WRBUF b, const char *cp)
+{
+ while (*cp)
+ {
+ switch(*cp)
+ {
+ case '<':
+ wrbuf_puts(b, "<");
+ break;
+ case '>':
+ wrbuf_puts(b, ">");
+ break;
+ case '&':
+ wrbuf_puts(b, "&");
+ break;
+ case '"':
+ wrbuf_puts(b, """);
+ break;
+ case '\'':
+ wrbuf_puts(b, "'");
+ break;
+ default:
+ wrbuf_putc(b, *cp);
+ }
+ cp++;
+ }
+ wrbuf_putc(b, 0);
+ (b->pos)--;
+ 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);
+}
+