#include "write-po.h"
#include "format.h"
#include "xalloc.h"
+#include "obstack.h"
#include "strstr.h"
#include "exit.h"
#include "strcase.h"
#define _(str) gettext (str)
+#define obstack_chunk_alloc xmalloc
+#define obstack_chunk_free free
+
/* If true do not print unneeded messages. */
static bool quiet;
const char *string;
size_t len;
} header_fields[UNKNOWN + 1];
+ struct obstack pool;
const char *cp;
char *newp;
size_t len, cnt;
/* Clear all fields. */
memset (header_fields, '\0', sizeof (header_fields));
+ /* Prepare a temporary memory pool. */
+ obstack_init (&pool);
+
cp = def->msgstr;
while (*cp != '\0')
{
len = endp - cp + 1;
- copy = (char *) alloca (len + 1);
+ copy = (char *) obstack_alloc (&pool, len + 1);
stpcpy (stpcpy (copy, cp), "\n");
cp = copy;
}
/* It's an unknown field. Append content to what is already
known. */
char *extended =
- (char *) alloca (header_fields[UNKNOWN].len + len + 1);
+ (char *) obstack_alloc (&pool,
+ header_fields[UNKNOWN].len + len + 1);
memcpy (extended, header_fields[UNKNOWN].string,
header_fields[UNKNOWN].len);
memcpy (&extended[header_fields[UNKNOWN].len], cp, len);
char *extended;
endp = strchr (msgid_bugs_ptr, '\0');
msgid_bugs_len = (endp - msgid_bugs_ptr) + 1;
- extended = (char *) alloca (msgid_bugs_len + 1);
+ extended = (char *) obstack_alloc (&pool, msgid_bugs_len + 1);
stpcpy (stpcpy (extended, msgid_bugs_ptr), "\n");
msgid_bugs_ptr = extended;
}
char *extended;
endp = strchr (pot_date_ptr, '\0');
pot_date_len = (endp - pot_date_ptr) + 1;
- extended = (char *) alloca (pot_date_len + 1);
+ extended = (char *) obstack_alloc (&pool, pot_date_len + 1);
stpcpy (stpcpy (extended, pot_date_ptr), "\n");
pot_date_ptr = extended;
}
#undef IF_FILLED
+ /* Free the temporary memory pool. */
+ obstack_free (&pool, NULL);
+
msgstr = cp;
msgstr_len = strlen (cp) + 1;
}