+ } while (--wid > 0 && i > 0);
+ if (i > 0) {
+ /* Overflowed the field (wid). */
+ charstring_push_back (rev, '?');
+ } else if (num < 0 && wid > 0) {
+ /* Shouldn't need the wid > 0 check, that's why the condition
+ at the top checks wid < max-1 when num < 0. */
+ --wid;
+ if (fill == ' ') {
+ charstring_push_back (rev, '-');
+ }
+ }
+ while (wid-- > 0 && fill != 0) {
+ charstring_push_back (rev, fill);
+ }
+ if (num < 0 && fill == '0') {
+ charstring_push_back (rev, '-');
+ }
+
+ {
+ /* Output the string in reverse. */
+ size_t b = charstring_bytes (rev);
+ const char *cp = b ? &charstring_buffer (rev)[b] : NULL;
+
+ for (; b > 0; --b) {
+ charstring_push_back (dest, *--cp);
+ }
+ }
+
+ charstring_free (rev);