Add wrbuf_cstr_null
[yaz-moved-to-github.git] / include / yaz / wrbuf.h
index eca8663..1d4f83b 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2012 Index Data.
+ * Copyright (C) Index Data.
  * All rights reserved.
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -139,7 +139,22 @@ YAZ_EXPORT void wrbuf_printf(WRBUF b, const char *fmt, ...)
 #endif
         ;
 
-/** \brief general writer of string using iconv and cdata
+/** \brief General writer of string using iconv and cdata
+    \param b WRBUF
+    \param cd iconv handle (0 for no conversion)
+    \param buf buffer
+    \param size size of buffer
+    \param wfunc write handler (that takes WRBUF only)
+    \returns -1 if invalid sequence was encountered (truncation in effect)
+    \returns 0 if buffer could be converted and written
+*/
+int wrbuf_iconv_write2(WRBUF b, yaz_iconv_t cd, const char *buf,
+                       size_t size,
+                       void (*wfunc)(WRBUF, const char *, size_t));
+
+/** \brief writer of string using iconv and cdata
+
+    Obsolete: use wrbuf_iconv_write2 instead.
     \param b WRBUF
     \param cd iconv handle (0 for no conversion)
     \param buf buffer
@@ -149,9 +164,13 @@ YAZ_EXPORT void wrbuf_printf(WRBUF b, const char *fmt, ...)
     \returns 0 if buffer could be converted and written
 */
 int wrbuf_iconv_write_x(WRBUF b, yaz_iconv_t cd, const char *buf,
-                        size_t size, int cdata);
+                        size_t size, int cdata)
+#ifdef __GNUC__
+    __attribute__ ((deprecated))
+#endif
+    ;
 
-/** \brief iconv converts buffer and appends to WRBUF
+/** \brief Converts buffer using iconv and appends to WRBUF
     \param b WRBUF
     \param cd iconv handle
     \param buf buffer
@@ -160,7 +179,7 @@ int wrbuf_iconv_write_x(WRBUF b, yaz_iconv_t cd, const char *buf,
 YAZ_EXPORT void wrbuf_iconv_write(WRBUF b, yaz_iconv_t cd, const char *buf,
                                  size_t size);
 
-/** \brief iconv converts buffer and appends to WRBUF as XML CDATA
+/** \brief Converts buffer using iconv and appends to WRBUF as XML CDATA
     \param b WRBUF
     \param cd iconv handle
     \param buf buffer
@@ -223,15 +242,68 @@ YAZ_EXPORT int wrbuf_grow(WRBUF b, size_t minsize);
 #define wrbuf_buf(b) ((b)->buf)
 
 /** \brief returns WRBUF content as C-string
-    \param b WRBUF
+    \param b WRBUF (may not be NULL)
     \returns C-string
 */
 YAZ_EXPORT const char *wrbuf_cstr(WRBUF b);
 
+/** \brief returns WRBUF content as C-string or NULL
+    \param b WRBUF
+    \returns C-string or NULL
+
+    This function returns NULL if either b is NULL or length of buffer is 0
+*/
+YAZ_EXPORT
+const char *wrbuf_cstr_null(WRBUF b);
+
 #define wrbuf_putc(b, c) \
     ((void) ((b)->pos >= (b)->size ? wrbuf_grow(b, 1) : 0),  \
     (b)->buf[(b)->pos++] = (c), 0)
 
+
+/** \brief writes JSON text to WRBUF with escaping
+    \param b result
+    \param str input string to be encoded
+*/
+YAZ_EXPORT
+void wrbuf_json_puts(WRBUF b, const char *str);
+
+/** \brief writes JSON text to WRBUF with escaping
+    \param b result
+    \param cp char buffer
+    \param sz size of char buffer
+*/
+YAZ_EXPORT
+void wrbuf_json_write(WRBUF b, const char *cp, size_t sz);
+
+YAZ_EXPORT
+void wrbuf_iconv_json_write(WRBUF b, yaz_iconv_t cd,
+                            const char *buf, size_t size);
+
+YAZ_EXPORT
+void wrbuf_iconv_json_puts(WRBUF b, yaz_iconv_t cd, const char *strz);
+
+/** \brief writes SHA1 text to WRBUF
+    \param b result
+    \param cp char buffer
+    \param sz size of char buffer
+    \param hexit 1=hex mode; 0=binary
+    \returns 0 if successful
+    \returns -1 on error
+*/
+YAZ_EXPORT
+int wrbuf_sha1_write(WRBUF b, const char *cp, size_t sz, int hexit);
+
+/** \brief writes SHA1 text to WRBUF
+    \param b result
+    \param cp C-string
+    \param hexit 1=hex mode; 0=binary
+    \returns 0 if successful
+    \returns -1 on error
+*/
+YAZ_EXPORT
+int wrbuf_sha1_puts(WRBUF b, const char *cp, int hexit);
+
 YAZ_END_CDECL
 
 #endif