else {
/* Multiple character line break or forced cut */
if (linelength > 0) {
- newtextlen = textlen + (textlen/linelength + 1) * breakcharlen + 1;
+ /* Add extra 10% to accomodate strings with unpredicatable number of breaks */
+ newtextlen = textlen + (textlen/linelength + 1) * breakcharlen * 1.1 + 1;
}
else {
newtextlen = textlen * (breakcharlen + 1) + 1;
}
newtext = emalloc(newtextlen);
-
+
/* now keep track of the actual new text length */
newtextlen = 0;
}
newtext[newtextlen] = '\0';
+ /* free unused memory */
+ newtext = erealloc(newtext, newtextlen+1);
RETURN_STRINGL(newtext, newtextlen, 0);
}