diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib_string.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/lib_string.c b/src/lib_string.c index d1a60b61..c1e595c9 100644 --- a/src/lib_string.c +++ b/src/lib_string.c | |||
| @@ -850,20 +850,21 @@ LJLIB_CF(string_format) | |||
| 850 | } else { /* format item */ | 850 | } else { /* format item */ |
| 851 | char form[MAX_FMTSPEC]; /* to store the format (`%...') */ | 851 | char form[MAX_FMTSPEC]; /* to store the format (`%...') */ |
| 852 | char buff[MAX_FMTITEM]; /* to store the formatted item */ | 852 | char buff[MAX_FMTITEM]; /* to store the formatted item */ |
| 853 | int n = 0; | ||
| 853 | if (++arg > top) | 854 | if (++arg > top) |
| 854 | luaL_argerror(L, arg, lj_obj_typename[0]); | 855 | luaL_argerror(L, arg, lj_obj_typename[0]); |
| 855 | strfrmt = scanformat(L, strfrmt, form); | 856 | strfrmt = scanformat(L, strfrmt, form); |
| 856 | switch (*strfrmt++) { | 857 | switch (*strfrmt++) { |
| 857 | case 'c': | 858 | case 'c': |
| 858 | sprintf(buff, form, lj_lib_checkint(L, arg)); | 859 | n = sprintf(buff, form, lj_lib_checkint(L, arg)); |
| 859 | break; | 860 | break; |
| 860 | case 'd': case 'i': | 861 | case 'd': case 'i': |
| 861 | addintlen(form); | 862 | addintlen(form); |
| 862 | sprintf(buff, form, num2intfrm(L, arg)); | 863 | n = sprintf(buff, form, num2intfrm(L, arg)); |
| 863 | break; | 864 | break; |
| 864 | case 'o': case 'u': case 'x': case 'X': | 865 | case 'o': case 'u': case 'x': case 'X': |
| 865 | addintlen(form); | 866 | addintlen(form); |
| 866 | sprintf(buff, form, num2uintfrm(L, arg)); | 867 | n = sprintf(buff, form, num2uintfrm(L, arg)); |
| 867 | break; | 868 | break; |
| 868 | case 'e': case 'E': case 'f': case 'g': case 'G': case 'a': case 'A': { | 869 | case 'e': case 'E': case 'f': case 'g': case 'G': case 'a': case 'A': { |
| 869 | TValue tv; | 870 | TValue tv; |
| @@ -880,10 +881,10 @@ LJLIB_CF(string_format) | |||
| 880 | nbuf[len] = '\0'; | 881 | nbuf[len] = '\0'; |
| 881 | for (p = form; *p < 'A' && *p != '.'; p++) ; | 882 | for (p = form; *p < 'A' && *p != '.'; p++) ; |
| 882 | *p++ = 's'; *p = '\0'; | 883 | *p++ = 's'; *p = '\0'; |
| 883 | sprintf(buff, form, nbuf); | 884 | n = sprintf(buff, form, nbuf); |
| 884 | break; | 885 | break; |
| 885 | } | 886 | } |
| 886 | sprintf(buff, form, (double)tv.n); | 887 | n = sprintf(buff, form, (double)tv.n); |
| 887 | break; | 888 | break; |
| 888 | } | 889 | } |
| 889 | case 'q': | 890 | case 'q': |
| @@ -902,14 +903,14 @@ LJLIB_CF(string_format) | |||
| 902 | luaL_addvalue(&b); | 903 | luaL_addvalue(&b); |
| 903 | continue; | 904 | continue; |
| 904 | } | 905 | } |
| 905 | sprintf(buff, form, strdata(str)); | 906 | n = sprintf(buff, form, strdata(str)); |
| 906 | break; | 907 | break; |
| 907 | } | 908 | } |
| 908 | default: | 909 | default: |
| 909 | lj_err_callerv(L, LJ_ERR_STRFMTO, *(strfrmt -1)); | 910 | lj_err_callerv(L, LJ_ERR_STRFMTO, *(strfrmt -1)); |
| 910 | break; | 911 | break; |
| 911 | } | 912 | } |
| 912 | luaL_addlstring(&b, buff, strlen(buff)); | 913 | luaL_addlstring(&b, buff, n); |
| 913 | } | 914 | } |
| 914 | } | 915 | } |
| 915 | luaL_pushresult(&b); | 916 | luaL_pushresult(&b); |
