netdev-pltap: Make access to AF_INET socket thread-safe.
[sliver-openvswitch.git] / lib / dynamic-string.c
index ba9aa6d..9b3e7ba 100644 (file)
@@ -238,14 +238,21 @@ ds_get_line(struct ds *ds, FILE *file)
  * Deletes comments introduced by "#" and skips lines that contains only white
  * space (after deleting comments).
  *
+ * If 'line_numberp' is nonnull, increments '*line_numberp' by the number of
+ * lines read from 'file'.
+ *
  * Returns 0 if successful, EOF if no non-blank line was found. */
 int
-ds_get_preprocessed_line(struct ds *ds, FILE *file)
+ds_get_preprocessed_line(struct ds *ds, FILE *file, int *line_numberp)
 {
     while (!ds_get_line(ds, file)) {
         char *line = ds_cstr(ds);
         char *comment;
 
+        if (line_numberp) {
+            ++*line_numberp;
+        }
+
         /* Delete comments. */
         comment = strchr(line, '#');
         if (comment) {
@@ -358,48 +365,50 @@ void
 ds_put_hex_dump(struct ds *ds, const void *buf_, size_t size,
                 uintptr_t ofs, bool ascii)
 {
-  const uint8_t *buf = buf_;
-  const size_t per_line = 16; /* Maximum bytes per line. */
-
-  while (size > 0)
-    {
-      size_t start, end, n;
-      size_t i;
-
-      /* Number of bytes on this line. */
-      start = ofs % per_line;
-      end = per_line;
-      if (end - start > size)
-        end = start + size;
-      n = end - start;
-
-      /* Print line. */
-      ds_put_format(ds, "%08jx  ", (uintmax_t) ROUND_DOWN(ofs, per_line));
-      for (i = 0; i < start; i++)
-        ds_put_format(ds, "   ");
-      for (; i < end; i++)
-        ds_put_format(ds, "%02hhx%c",
-                buf[i - start], i == per_line / 2 - 1? '-' : ' ');
-      if (ascii)
-        {
-          for (; i < per_line; i++)
+    const uint8_t *buf = buf_;
+    const size_t per_line = 16; /* Maximum bytes per line. */
+
+    while (size > 0) {
+        size_t start, end, n;
+        size_t i;
+
+        /* Number of bytes on this line. */
+        start = ofs % per_line;
+        end = per_line;
+        if (end - start > size)
+            end = start + size;
+        n = end - start;
+
+        /* Print line. */
+        ds_put_format(ds, "%08jx  ", (uintmax_t) ROUND_DOWN(ofs, per_line));
+        for (i = 0; i < start; i++) {
             ds_put_format(ds, "   ");
-          ds_put_format(ds, "|");
-          for (i = 0; i < start; i++)
-            ds_put_format(ds, " ");
-          for (; i < end; i++) {
-              int c = buf[i - start];
-              ds_put_char(ds, c >= 32 && c < 127 ? c : '.');
-          }
-          for (; i < per_line; i++)
-            ds_put_format(ds, " ");
-          ds_put_format(ds, "|");
         }
-      ds_put_format(ds, "\n");
+        for (; i < end; i++) {
+            ds_put_format(ds, "%02hhx%c",
+                          buf[i - start], i == per_line / 2 - 1? '-' : ' ');
+        }
+        if (ascii) {
+            for (; i < per_line; i++)
+                ds_put_format(ds, "   ");
+            ds_put_format(ds, "|");
+            for (i = 0; i < start; i++)
+                ds_put_format(ds, " ");
+            for (; i < end; i++) {
+                int c = buf[i - start];
+                ds_put_char(ds, c >= 32 && c < 127 ? c : '.');
+            }
+            for (; i < per_line; i++)
+                ds_put_format(ds, " ");
+            ds_put_format(ds, "|");
+        } else {
+            ds_chomp(ds, ' ');
+        }
+        ds_put_format(ds, "\n");
 
-      ofs += n;
-      buf += n;
-      size -= n;
+        ofs += n;
+        buf += n;
+        size -= n;
     }
 }