02110-1301, USA. */
#include <config.h>
+
#include "str.h"
-#include "message.h"
+
#include <ctype.h>
#include <limits.h>
#include <stdlib.h>
-#include "alloc.h"
-#include "message.h"
+
+#include <libpspp/alloc.h>
+#include <libpspp/message.h>
+
#include "minmax.h"
#include "size_max.h"
\f
for (; *s != '\0'; s++)
*s = tolower ((unsigned char) *s);
}
+
+/* Formats FORMAT into DST, as with sprintf(), and returns the
+ address of the terminating null written to DST. */
+char *
+spprintf (char *dst, const char *format, ...)
+{
+ va_list args;
+ int count;
+
+ va_start (args, format);
+ count = vsprintf (dst, format, args);
+ va_end (args);
+
+ return dst + count;
+}
\f
/* Initializes ST with initial contents S. */
void
strcpy (st->string, s);
}
-/* Initializes ST, making room for at least CAPACITY characters. */
+/* Initializes ST as an empty string. */
void
-ds_init (struct string *st, size_t capacity)
+ds_init (struct string *st)
{
st->length = 0;
- st->capacity = MAX (8, capacity);
- st->string = xmalloc (st->capacity + 1);
+ st->capacity = 0;
+ st->string = NULL;
}
/* Frees ST. */
const struct string *src, size_t idx, size_t cnt)
{
assert (dst != src);
- ds_init (dst, cnt);
+ ds_init (dst);
ds_assign_substring (dst, src, idx, cnt);
}
st->length += len;
}
-/* Returns ds_end(ST) and THEN increases the length by INCR */
+/* 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 );
+ char *end;
- ds_extend(st, ds_length(st) + incr + 1);
+ ds_extend(st, ds_length(st) + incr);
end = ds_end(st);
int avail, needed;
va_list args;
-#ifndef va_copy
-#define va_copy(DST, SRC) (DST) = (SRC)
-#endif
-
va_copy (args, args_);
avail = st->string != NULL ? st->capacity - st->length + 1 : 0;
needed = vsnprintf (st->string + st->length, avail, format, args);