aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2010-08-23 20:06:36 +0200
committerMike Pall <mike>2010-08-23 20:06:36 +0200
commit55017d46268424c2a7bd8ca195c298e26e57c354 (patch)
treea066a9518a574027b39083048ccb7e462de72a4a /src
parent65b8c36defce5a1691257711e25e42d17dbc30b9 (diff)
downloadluajit-55017d46268424c2a7bd8ca195c298e26e57c354.tar.gz
luajit-55017d46268424c2a7bd8ca195c298e26e57c354.tar.bz2
luajit-55017d46268424c2a7bd8ca195c298e26e57c354.zip
Fix formatting of canonicalized number to string conversions.
Diffstat (limited to 'src')
-rw-r--r--src/lib_string.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/lib_string.c b/src/lib_string.c
index 528b3d0e..c1b584d8 100644
--- a/src/lib_string.c
+++ b/src/lib_string.c
@@ -739,14 +739,17 @@ LJLIB_CF(string_format)
739 tv.n = lj_lib_checknum(L, arg); 739 tv.n = lj_lib_checknum(L, arg);
740 if (LJ_UNLIKELY((tv.u32.hi << 1) >= 0xffe00000)) { 740 if (LJ_UNLIKELY((tv.u32.hi << 1) >= 0xffe00000)) {
741 /* Canonicalize output of non-finite values. */ 741 /* Canonicalize output of non-finite values. */
742 size_t len = lj_str_bufnum(buff, &tv); 742 char *p, nbuf[LUAI_MAXNUMBER2STR];
743 size_t len = lj_str_bufnum(nbuf, &tv);
743 if (strfrmt[-1] == 'E' || strfrmt[-1] == 'G') { 744 if (strfrmt[-1] == 'E' || strfrmt[-1] == 'G') {
744 buff[len-3] = buff[len-3] - 0x20; 745 nbuf[len-3] = nbuf[len-3] - 0x20;
745 buff[len-2] = buff[len-2] - 0x20; 746 nbuf[len-2] = nbuf[len-2] - 0x20;
746 buff[len-1] = buff[len-1] - 0x20; 747 nbuf[len-1] = nbuf[len-1] - 0x20;
747 } 748 }
748 luaL_addlstring(&b, buff, len); 749 for (p = form; *p < 'e' && *p != '.'; p++) ;
749 continue; 750 *p++ = 's'; *p = '\0';
751 sprintf(buff, form, nbuf);
752 break;
750 } 753 }
751 sprintf(buff, form, (double)tv.n); 754 sprintf(buff, form, (double)tv.n);
752 break; 755 break;