From 4f535d301fd8181ae3fbfeb023f4e016a91064d9 Mon Sep 17 00:00:00 2001
From: Ben Pfaff <blp@gnu.org>
Date: Sun, 20 Dec 2009 20:05:24 -0800
Subject: [PATCH] str: New function ds_steal_cstr.

---
 src/libpspp/str.c | 11 +++++++++++
 src/libpspp/str.h |  1 +
 2 files changed, 12 insertions(+)

diff --git a/src/libpspp/str.c b/src/libpspp/str.c
index 8243aa06..79f3c912 100644
--- a/src/libpspp/str.c
+++ b/src/libpspp/str.c
@@ -1222,6 +1222,17 @@ ds_cstr (const struct string *st_)
   return st->ss.string;
 }
 
+/* Returns the value of ST as a null-terminated string and then
+   reinitialized ST as an empty string.  The caller must free the
+   returned string with free(). */
+char *
+ds_steal_cstr (struct string *st)
+{
+  char *s = ds_cstr (st);
+  ds_init_empty (st);
+  return s;
+}
+
 /* Reads characters from STREAM and appends them to ST, stopping
    after MAX_LENGTH characters, after appending a newline, or
    after an I/O error or end of file was encountered, whichever
diff --git a/src/libpspp/str.h b/src/libpspp/str.h
index a134079f..0b57f736 100644
--- a/src/libpspp/str.h
+++ b/src/libpspp/str.h
@@ -203,6 +203,7 @@ char *ds_xstrdup (const struct string *);
 
 size_t ds_capacity (const struct string *);
 char *ds_cstr (const struct string *);
+char *ds_steal_cstr (struct string *);
 
 /* File input. */
 bool ds_read_line (struct string *, FILE *, size_t max_length);
-- 
2.30.2