New functions ds_truncate(), ds_last().
authorBen Pfaff <blp@nicira.com>
Tue, 19 Aug 2008 18:12:59 +0000 (11:12 -0700)
committerBen Pfaff <blp@nicira.com>
Tue, 26 Aug 2008 18:51:17 +0000 (11:51 -0700)
include/dynamic-string.h
lib/dynamic-string.c

index c85756d..7c1b046 100644 (file)
@@ -50,6 +50,7 @@ struct ds {
 
 void ds_init(struct ds *);
 void ds_clear(struct ds *);
+void ds_truncate(struct ds *, size_t new_length);
 void ds_reserve(struct ds *, size_t min_length);
 void ds_put_char(struct ds *, char);
 void ds_put_cstr(struct ds *, const char *);
@@ -62,4 +63,6 @@ void ds_put_hex_dump(struct ds *ds, const void *buf_, size_t size,
 char *ds_cstr(struct ds *);
 void ds_destroy(struct ds *);
 
+int ds_last(const struct ds *);
+
 #endif /* dynamic-string.h */
index ca14178..4b83681 100644 (file)
@@ -52,6 +52,15 @@ ds_clear(struct ds *ds)
     ds->length = 0;
 }
 
+void
+ds_truncate(struct ds *ds, size_t new_length)
+{
+    if (ds->length > new_length) {
+        ds->length = new_length;
+        ds->string[new_length] = '\0';
+    }
+}
+
 void
 ds_reserve(struct ds *ds, size_t min_length)
 {
@@ -200,3 +209,9 @@ ds_put_hex_dump(struct ds *ds, const void *buf_, size_t size,
       size -= n;
     }
 }
+
+int
+ds_last(const struct ds *ds)
+{
+    return ds->length > 0 ? (unsigned char) ds->string[ds->length - 1] : EOF;
+}