Replace most uses of assert by ovs_assert.
[sliver-openvswitch.git] / lib / dynamic-string.c
index 8e58302..bd1cf45 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira Networks.
+ * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,7 +16,6 @@
 
 #include <config.h>
 #include "dynamic-string.h"
-#include <assert.h>
 #include <stdlib.h>
 #include <string.h>
 #include <time.h>
@@ -165,7 +164,7 @@ ds_put_format_valist(struct ds *ds, const char *format, va_list args_)
         needed = vsnprintf(&ds->string[ds->length], available, format, args);
         va_end(args);
 
-        assert(needed < available);
+        ovs_assert(needed < available);
         ds->length += needed;
     }
 }
@@ -250,6 +249,54 @@ ds_get_preprocessed_line(struct ds *ds, FILE *file)
     return EOF;
 }
 
+/* Reads a line from 'file' into 'ds' and does some preprocessing on it:
+ *
+ *    - If the line begins with #, prints it on stdout and reads the next line.
+ *
+ *    - Otherwise, if the line contains an # somewhere else, strips it and
+ *      everything following it (as a comment).
+ *
+ *    - If (after comment removal) the line contains only white space, prints
+ *      a blank line on stdout and reads the next line.
+ *
+ *    - Otherwise, returns the line to the caller.
+ *
+ * This is useful in some of the OVS tests, where we want to check that parsing
+ * and then re-formatting some kind of data does not change it, but we also
+ * want to be able to put comments in the input.
+ *
+ * Returns 0 if successful, EOF if no non-blank line was found. */
+int
+ds_get_test_line(struct ds *ds, FILE *file)
+{
+    for (;;) {
+        char *s, *comment;
+        int retval;
+
+        retval = ds_get_line(ds, file);
+        if (retval) {
+            return retval;
+        }
+
+        s = ds_cstr(ds);
+        if (*s == '#') {
+            puts(s);
+            continue;
+        }
+
+        comment = strchr(s, '#');
+        if (comment) {
+            *comment = '\0';
+        }
+        if (s[strspn(s, " \t\n")] == '\0') {
+            putchar('\n');
+            continue;
+        }
+
+        return 0;
+    }
+}
+
 char *
 ds_cstr(struct ds *ds)
 {
@@ -263,7 +310,7 @@ ds_cstr(struct ds *ds)
 const char *
 ds_cstr_ro(const struct ds *ds)
 {
-    return ds_cstr((struct ds *) ds);
+    return ds_cstr(CONST_CAST(struct ds *, ds));
 }
 
 /* Returns a null-terminated string representing the current contents of 'ds',