For SNAT, don't store the pre-fragment L2 header before actions are applied.
[sliver-openvswitch.git] / lib / dynamic-string.c
index 1df85ac..03efac0 100644 (file)
@@ -94,6 +94,12 @@ ds_put_char_multiple(struct ds *ds, char c, size_t n)
     memset(ds_put_uninit(ds, n), c, n);
 }
 
+void
+ds_put_buffer(struct ds *ds, const char *s, size_t n)
+{
+    memcpy(ds_put_uninit(ds, n), s, n);
+}
+
 void
 ds_put_cstr(struct ds *ds, const char *s)
 {
@@ -172,6 +178,22 @@ ds_put_strftime(struct ds *ds, const char *template, const struct tm *tm)
     }
 }
 
+int
+ds_get_line(struct ds *ds, FILE *file)
+{
+    ds_clear(ds);
+    for (;;) {
+        int c = getc(file);
+        if (c == EOF) {
+            return ds->length ? 0 : EOF;
+        } else if (c == '\n') {
+            return 0;
+        } else {
+            ds_put_char(ds, c);
+        }
+    }
+}
+
 char *
 ds_cstr(struct ds *ds)
 {