syslog: fix syslog structured data formatting
[vpp.git] / src / vlib / buffer_funcs.h
index e9d0704..8091d83 100644 (file)
@@ -838,7 +838,7 @@ vlib_buffer_free_inline (vlib_main_t * vm, u32 * buffers, u32 n_buffers,
          n_queue = 0;
        }
 
-      if (flags & VLIB_BUFFER_NEXT_PRESENT)
+      if (maybe_next && (flags & VLIB_BUFFER_NEXT_PRESENT))
        {
          bi = next;
          goto next_in_chain;
@@ -1416,13 +1416,19 @@ vlib_buffer_chain_linearize (vlib_main_t * vm, vlib_buffer_t * b)
 
       if (dst_left == 0)
        {
-         if (db != first)
-           db->current_data = 0;
          db->current_length = dp - (u8 *) vlib_buffer_get_current (db);
          ASSERT (db->flags & VLIB_BUFFER_NEXT_PRESENT);
          db = vlib_get_buffer (vm, db->next_buffer);
          dst_left = data_size;
-         dp = db->data;
+         if (db->current_data > 0)
+           {
+             db->current_data = 0;
+           }
+         else
+           {
+             dst_left += -db->current_data;
+           }
+         dp = vlib_buffer_get_current (db);
        }
 
       while (src_left == 0)