Implemented support for very long strings a la spss v13/v14
[pspp-builds.git] / src / libpspp / str.c
index c72f19969ec8f1090f958e39c36a276f6b5b1f8f..613ecbc5455c69549c2880a3944ed124bfcaf502 100644 (file)
@@ -681,6 +681,22 @@ ds_concat (struct string *st, const char *buf, size_t len)
   st->length += len;
 }
 
+/* Returns ds_end(ST) and THEN increases the length by INCR */
+char *
+ds_append_uninit(struct string *st, size_t incr)
+{
+  char *end ;
+  assert(incr >= 0 );
+
+  ds_extend(st, ds_length(st) + incr + 1);
+
+  end = ds_end(st);
+
+  st->length += incr;
+  return end;
+}
+
 /* Formats FORMAT as a printf string and appends the result to ST. */
 void
 ds_printf (struct string *st, const char *format, ...)
@@ -704,7 +720,7 @@ ds_vprintf (struct string *st, const char *format, va_list args_)
 #endif
 
   va_copy (args, args_);
-  avail = st->capacity - st->length + 1;
+  avail = st->string != NULL ? st->capacity - st->length + 1 : 0;
   needed = vsnprintf (st->string + st->length, avail, format, args);
   va_end (args);