projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed bug #14822.
[pspp]
/
src
/
str.c
diff --git
a/src/str.c
b/src/str.c
index 2a766520b135f8d01b01b7ca0a638c589fe459de..fe9ad814680590df36575e9e18fc482c48631cf3 100644
(file)
--- a/
src/str.c
+++ b/
src/str.c
@@
-306,6
+306,7
@@
void
ds_destroy (struct string *st)
{
free (st->string);
ds_destroy (struct string *st)
{
free (st->string);
+ st->string = NULL;
}
/* Truncates ST to zero length. */
}
/* Truncates ST to zero length. */
@@
-452,7
+453,9
@@
ds_vprintf (struct string *st, const char *format, va_list args)
been written. */
int avail, needed;
been written. */
int avail, needed;
+ va_list a1;
+ va_copy(a1, args);
avail = st->capacity - st->length + 1;
needed = vsnprintf (st->string + st->length, avail, format, args);
avail = st->capacity - st->length + 1;
needed = vsnprintf (st->string + st->length, avail, format, args);
@@
-461,17
+464,22
@@
ds_vprintf (struct string *st, const char *format, va_list args)
{
ds_extend (st, st->length + needed);
{
ds_extend (st, st->length + needed);
- vsprintf (st->string + st->length, format, a
rgs
);
+ vsprintf (st->string + st->length, format, a
1
);
}
else
while (needed == -1)
{
}
else
while (needed == -1)
{
+ va_list a2;
+ va_copy(a2, a1);
+
ds_extend (st, (st->capacity + 1) * 2);
avail = st->capacity - st->length + 1;
ds_extend (st, (st->capacity + 1) * 2);
avail = st->capacity - st->length + 1;
- needed = vsnprintf (st->string + st->length, avail, format, args);
+ needed = vsnprintf (st->string + st->length, avail, format, a2);
+ va_end(a2);
}
}
+ va_end(a1);
st->length += needed;
}
st->length += needed;
}