[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] [PATCHv2 04/13] virbuf: add auto-indentation support



On 10/19/2011 11:51 AM, Peter Krempa wrote:
On 09/29/2011 06:22 PM, Eric Blake wrote:
Rather than having to adjust all callers in a chain to deal with
indentation, it is nicer to have virBuffer do auto-indentation.


virBufferAdd(const virBufferPtr buf, const char *str, int len)
{
unsigned int needSize;
+ int indent;
/* context for a later comment */
- if ((str == NULL) || (buf == NULL) || (len == 0))
+ if (!str || !buf || (len == 0&& buf->indent == 0))
return;

@@ -249,6 +284,9 @@ virBufferVasprintf(virBufferPtr buf, const char
*format, va_list argptr)
if (buf->error)
return;

+ if (buf->indent)
+ virBufferAdd(buf, "", -1);
+
virBufferAdd is a no-op, if this expression is true (see context above):
" if (!str || !buf || (len == 0 && buf->indent == 0))". You could save a
call to strlen and the if clause if you call virBufferAdd(buf, "", 0)
The len=0 will be automaticaly used (as the only way to accept len==0 as
a correct value is if indentation is requested). You can also save a
line with the if clause and call it directly. ( Looks like you've
prepared it for this to happen :D)

Okay, I simplified these two lines down to one.

diff --git a/tests/virbuftest.c b/tests/virbuftest.c

The tests look fine to me and it's nice to have them.

Yet they missed out on the new stuff in the meantime.


ACK,

Here's what I squashed before pushing:

diff --git i/src/util/buf.c w/src/util/buf.c
index 3dd9a72..ac5360c 100644
--- i/src/util/buf.c
+++ w/src/util/buf.c
@@ -284,8 +284,7 @@ virBufferVasprintf(virBufferPtr buf, const char *format, va_list argptr)
     if (buf->error)
         return;

-    if (buf->indent)
-        virBufferAddLit(buf, "");
+    virBufferAddLit(buf, ""); /* auto-indent */

     if (buf->size == 0 &&
         virBufferGrow(buf, 100) < 0)
@@ -500,8 +499,7 @@ virBufferURIEncodeString(virBufferPtr buf, const char *str)
     if (buf->error)
         return;

-    if (buf->indent)
-        virBufferAddLit(buf, "");
+    virBufferAddLit(buf, ""); /* auto-indent */

     for (p = str; *p; ++p) {
         if (c_isalnum(*p))
diff --git i/tests/virbuftest.c w/tests/virbuftest.c
index 2f94e1c..bc53959 100644
--- i/tests/virbuftest.c
+++ w/tests/virbuftest.c
@@ -63,7 +63,7 @@ static int testBufAutoIndent(const void *data ATTRIBUTE_UNUSED)
     virBuffer bufinit = VIR_BUFFER_INITIALIZER;
     virBufferPtr buf = &bufinit;
     const char expected[] =
-        "  1\n  2\n  3\n  4\n  5\n  6\n  7\n  &amp;\n  8\n  9\n";
+ " 1\n 2\n 3\n 4\n 5\n 6\n 7\n &amp;\n 8\n 9\n 10\n ' 11'\n";
     char *result = NULL;
     int ret = 0;

@@ -86,7 +86,7 @@ static int testBufAutoIndent(const void *data ATTRIBUTE_UNUSED)
         TEST_ERROR("Wrong indentation");
         ret = -1;
     }
-    virBufferAdjustIndent(buf, -2);
+    virBufferAdjustIndent(buf, -3);
     if (virBufferGetIndent(buf, false) != -1 ||
         virBufferGetIndent(buf, true) != -1 ||
         virBufferError(buf) != -1) {
@@ -119,6 +119,10 @@ static int testBufAutoIndent(const void *data ATTRIBUTE_UNUSED)
     virBufferEscapeSexpr(buf, "%s", "8\n");
     virBufferURIEncodeString(buf, "9");
     virBufferAddChar(buf, '\n');
+    virBufferEscapeShell(buf, "10");
+    virBufferAddChar(buf, '\n');
+    virBufferEscapeShell(buf, " 11");
+    virBufferAddChar(buf, '\n');

     result = virBufferContentAndReset(buf);
     if (!result || STRNEQ(result, expected)) {


--
Eric Blake   eblake redhat com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]