Skip to content

Commit 0516bf7

Browse files
authored
Merge pull request #7 from visitorckw/fix-libc
Fix reversed output and optimize base-10 conversion
2 parents 780dd18 + fe8ac14 commit 0516bf7

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

lib/libc.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -470,9 +470,6 @@ static char *__str_base10(uint32_t value, char *buffer, int *length)
470470
*length = 1;
471471
return buffer;
472472
}
473-
474-
/* Max digits for 32-bit: 4,294,967,295 (10 digits) + sign + null */
475-
char tmp[12];
476473
int pos = 0;
477474

478475
while (value > 0) {
@@ -488,15 +485,10 @@ static char *__str_base10(uint32_t value, char *buffer, int *length)
488485
q += t;
489486
r -= (((t << 2) + t) << 1);
490487

491-
tmp[pos++] = '0' + r;
488+
buffer[pos++] = '0' + r;
492489
value = q;
493490
}
494-
495-
/* Reverse digits into output buffer */
496491
*length = pos;
497-
for (int i = 0; i < pos; i++) {
498-
buffer[i] = tmp[pos - 1 - i];
499-
}
500492

501493
return buffer;
502494
}
@@ -573,6 +565,14 @@ void itoa(int32_t i, char *s, int32_t base)
573565
}
574566
} else if (base == 10) { /* Decimal conversion */
575567
__str_base10_signed(i, s, &len);
568+
569+
/* Reverse the string. */
570+
q = s + len;
571+
for (*q = 0; p <= --q; p++) {
572+
c = *p;
573+
*p = *q;
574+
*q = c;
575+
}
576576
} else { /* Other bases */
577577
if (i >= 0) {
578578
do {

0 commit comments

Comments
 (0)