summaryrefslogtreecommitdiff
path: root/source3/lib/cbuf.c
diff options
context:
space:
mode:
authorGregor Beck <gbeck@sernet.de>2011-03-17 10:20:30 +0100
committerMichael Adam <obnox@samba.org>2011-04-04 15:57:36 +0200
commit9272614d9dad501ad95ac76b40f53e433a4878bc (patch)
tree190dd74aa1d9b7bc96b099de634a689b3ca57e86 /source3/lib/cbuf.c
parent340f20ddb01da08b6a6ad11143768ffd69b7944e (diff)
downloadsamba-9272614d9dad501ad95ac76b40f53e433a4878bc.tar.gz
samba-9272614d9dad501ad95ac76b40f53e433a4878bc.tar.bz2
samba-9272614d9dad501ad95ac76b40f53e433a4878bc.zip
s3: add function cbuf_print_quoted
Diffstat (limited to 'source3/lib/cbuf.c')
-rw-r--r--source3/lib/cbuf.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/source3/lib/cbuf.c b/source3/lib/cbuf.c
index 16dd52c292..42353f8f64 100644
--- a/source3/lib/cbuf.c
+++ b/source3/lib/cbuf.c
@@ -286,3 +286,36 @@ int cbuf_print_quoted_string(cbuf* ost, const char* s)
s++;
}
}
+
+
+int cbuf_print_quoted(cbuf* ost, const char* s, size_t len)
+{
+ int n = 1;
+ int ret;
+ cbuf_reserve(ost, len+2);
+
+ cbuf_putc(ost,'"');
+
+ while(len--) {
+ switch (*s) {
+ case '"':
+ case '\\':
+ ret = cbuf_printf(ost, "\\%c", *s);
+ break;
+ default:
+ if (isprint(*s) && ((*s == ' ') || !isspace(*s))) {
+ ret = cbuf_putc(ost, *s);
+ } else {
+ ret = cbuf_printf(ost, "\\%02x", *s);
+ }
+ }
+ s++;
+ if (ret == -1) {
+ return -1;
+ }
+ n += ret;
+ }
+ ret = cbuf_putc(ost,'"');
+
+ return (ret == -1) ? -1 : (n + ret);
+}