aboutsummaryrefslogtreecommitdiffstats
path: root/src/data.c
diff options
context:
space:
mode:
authorPaul Eggert2012-06-25 19:33:51 -0700
committerPaul Eggert2012-06-25 19:33:51 -0700
commit99027bdd81f63ea690394a153ef49a08f55e498d (patch)
treeb7b7083784549ae09d9e688441168627262d4b6d /src/data.c
parentcf38a720e81b545f90dc7be81891d94df6ed059a (diff)
downloademacs-99027bdd81f63ea690394a153ef49a08f55e498d.tar.gz
emacs-99027bdd81f63ea690394a153ef49a08f55e498d.zip
Use sprintf return value instead of invoking strlen on result.
In the old days this wasn't portable, since some sprintf implementations returned char *. But they died out years ago and Emacs already assumes sprintf returns int. Similarly for float_to_string. This patch speeds up (number-to-string 1000) by 3% on Fedora 15 x86-64. * ccl.c (ccl_driver): * character.c (string_escape_byte8): * data.c (Fnumber_to_string): * doprnt.c (doprnt): * print.c (print_object): * xdisp.c (message_dolog): * xfns.c (syms_of_xfns): Use sprintf or float_to_string result to avoid need to call strlen. * data.c (Fnumber_to_string): Use make_unibyte_string, since the string must be ASCII. * lisp.h, print.c (float_to_string): Now returns int length. * term.c (produce_glyphless_glyph): Use sprintf result rather than recomputing it.
Diffstat (limited to 'src/data.c')
-rw-r--r--src/data.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/src/data.c b/src/data.c
index cd4b14a9f9d..bd757cfdad1 100644
--- a/src/data.c
+++ b/src/data.c
@@ -2449,20 +2449,17 @@ Uses a minus sign if negative.
2449NUMBER may be an integer or a floating point number. */) 2449NUMBER may be an integer or a floating point number. */)
2450 (Lisp_Object number) 2450 (Lisp_Object number)
2451{ 2451{
2452 char buffer[VALBITS]; 2452 char buffer[max (FLOAT_TO_STRING_BUFSIZE, INT_BUFSIZE_BOUND (EMACS_INT))];
2453 int len;
2453 2454
2454 CHECK_NUMBER_OR_FLOAT (number); 2455 CHECK_NUMBER_OR_FLOAT (number);
2455 2456
2456 if (FLOATP (number)) 2457 if (FLOATP (number))
2457 { 2458 len = float_to_string (buffer, XFLOAT_DATA (number));
2458 char pigbuf[FLOAT_TO_STRING_BUFSIZE]; 2459 else
2459 2460 len = sprintf (buffer, "%"pI"d", XINT (number));
2460 float_to_string (pigbuf, XFLOAT_DATA (number));
2461 return build_string (pigbuf);
2462 }
2463 2461
2464 sprintf (buffer, "%"pI"d", XINT (number)); 2462 return make_unibyte_string (buffer, len);
2465 return build_string (buffer);
2466} 2463}
2467 2464
2468DEFUN ("string-to-number", Fstring_to_number, Sstring_to_number, 1, 2, 0, 2465DEFUN ("string-to-number", Fstring_to_number, Sstring_to_number, 1, 2, 0,