dictionary: Allow dict_set_documents() argument to reference old documents.
[pspp] / src / data / dictionary.c
index ab4642a4da493c536b499a60e71479cbb14f7670..4fbcdf2a1e16f237b2988b10d80800a3752c7343 100644 (file)
@@ -1471,12 +1471,15 @@ dict_get_documents (const struct dictionary *d)
 void
 dict_set_documents (struct dictionary *d, const struct string_array *new_docs)
 {
-  size_t i;
-
-  dict_clear_documents (d);
+  /* Swap out the old documents, instead of destroying them immediately, to
+     allow the new documents to include pointers into the old ones. */
+  struct string_array old_docs = STRING_ARRAY_INITIALIZER;
+  string_array_swap (&d->documents, &old_docs);
 
-  for (i = 0; i < new_docs->n; i++)
+  for (size_t i = 0; i < new_docs->n; i++)
     dict_add_document_line (d, new_docs->strings[i], false);
+
+  string_array_destroy (&old_docs);
 }
 
 /* Replaces the documents for D by UTF-8 encoded string NEW_DOCS, dividing it