]> git.eshelyaron.com Git - emacs.git/commitdiff
Use make_formatted_string to avoid double length calculation.
authorDmitry Antipov <dmantipov@yandex.ru>
Mon, 9 Jul 2012 12:02:27 +0000 (16:02 +0400)
committerDmitry Antipov <dmantipov@yandex.ru>
Mon, 9 Jul 2012 12:02:27 +0000 (16:02 +0400)
* lisp.h (make_formatted_string): New prototype.
* alloc.c (make_formatted_string): New function.
* buffer.c (Fgenerate_new_buffer_name): Use it.
* dbus.c (syms_of_dbusbind): Likewise.
* editfns.c (Fcurrent_time_zone): Likewise.
* filelock.c (get_boot_time): Likewise.
* frame.c (make_terminal_frame, set_term_frame_name)
(x_report_frame_params): Likewise.
* image.c (gs_load): Likewise.
* minibuf.c (get_minibuffer): Likewise.
* msdos.c (dos_set_window_size): Likewise.
* process.c (make_process): Likewise.
* xdisp.c (ensure_echo_area_buffers): Likewise.
* xsettings.c (apply_xft_settings): Likewise.

14 files changed:
src/ChangeLog
src/alloc.c
src/buffer.c
src/dbusbind.c
src/editfns.c
src/filelock.c
src/frame.c
src/image.c
src/lisp.h
src/minibuf.c
src/msdos.c
src/process.c
src/xdisp.c
src/xsettings.c

index 1aa5f7df5c3ee867a2d0a3de590115ed8f8caccc..4e69496fadd04835f9d1c6d83efb4d014b13d811 100644 (file)
@@ -1,3 +1,21 @@
+2012-07-09  Dmitry Antipov  <dmantipov@yandex.ru>
+
+       Use make_formatted_string to avoid double length calculation.
+       * lisp.h (make_formatted_string): New prototype.
+       * alloc.c (make_formatted_string): New function.
+       * buffer.c (Fgenerate_new_buffer_name): Use it.
+       * dbus.c (syms_of_dbusbind): Likewise.
+       * editfns.c (Fcurrent_time_zone): Likewise.
+       * filelock.c (get_boot_time): Likewise.
+       * frame.c (make_terminal_frame, set_term_frame_name)
+       (x_report_frame_params): Likewise.
+       * image.c (gs_load): Likewise.
+       * minibuf.c (get_minibuffer): Likewise.
+       * msdos.c (dos_set_window_size): Likewise.
+       * process.c (make_process): Likewise.
+       * xdisp.c (ensure_echo_area_buffers): Likewise.
+       * xsettings.c (apply_xft_settings): Likewise.
+
 2012-07-09  Glenn Morris  <rgm@gnu.org>
 
        Stop ns builds polluting the environment with EMACSDATA, EMACSDOC.
index 88f96c41a1535e0974cb037788bd705a81e7bc64..739ec40c45c475139d36f665f67391abd78f2778 100644 (file)
@@ -2517,6 +2517,20 @@ make_uninit_multibyte_string (EMACS_INT nchars, EMACS_INT nbytes)
   return string;
 }
 
+/* Print arguments to BUF according to a FORMAT, then return
+   a Lisp_String initialized with the data from BUF.  */
+
+Lisp_Object
+make_formatted_string (char *buf, const char *format, ...)
+{
+  va_list ap;
+  ptrdiff_t length;
+
+  va_start (ap, format);
+  length = vsprintf (buf, format, ap);
+  va_end (ap);
+  return make_string (buf, length);
+}
 
 \f
 /***********************************************************************
index a40270c945cb5bd6617578d8251c40631996cd14..28cede3916c5003c0bc4cfa610ce6bae4f07f37f 100644 (file)
@@ -861,8 +861,9 @@ is first appended to NAME, to speed up finding a non-existent buffer.  */)
   if (!strncmp (SSDATA (name), " ", 1)) /* see bug#1229 */
     {
       /* Note fileio.c:make_temp_name does random differently.  */
-      sprintf (number, "-%"pI"d", XFASTINT (Frandom (make_number (999999))));
-      tem2 = concat2 (name, build_string (number));
+      tem2 = concat2 (name, make_formatted_string
+                     (number, "-%"pI"d", 
+                      XFASTINT (Frandom (make_number (999999)))));
       tem = Fget_buffer (tem2);
       if (NILP (tem))
        return tem2;
@@ -873,8 +874,8 @@ is first appended to NAME, to speed up finding a non-existent buffer.  */)
   count = 1;
   while (1)
     {
-      sprintf (number, "<%"pD"d>", ++count);
-      gentemp = concat2 (tem2, build_string (number));
+      gentemp = concat2 (tem2, make_formatted_string
+                        (number, "<%"pD"d>", ++count));
       tem = Fstring_equal (gentemp, ignore);
       if (!NILP (tem))
        return gentemp;
index d80bb21cd59aa487b3e9f9aea64b0ec9b51642e3..203a25c151ae049ba1c8dbe65f9c4779f6a192dd 100644 (file)
@@ -1757,8 +1757,8 @@ syms_of_dbusbind (void)
     int major, minor, micro;
     char s[sizeof ".." + 3 * INT_STRLEN_BOUND (int)];
     dbus_get_version (&major, &minor, &micro);
-    sprintf (s, "%d.%d.%d", major, minor, micro);
-    Vdbus_runtime_version = build_string (s);
+    Vdbus_runtime_version
+      = make_formatted_string (s, "%d.%d.%d", major, minor, micro);
 #else
     Vdbus_runtime_version = Qnil;
 #endif
index fe119490f3fe9c64b8cc2fac7d403eec37b2c324..f6d849fbc7a0864c0a083e2c7daabc4c79329dd6 100644 (file)
@@ -2082,8 +2082,9 @@ the data it can't find.  */)
          int m = offset / 60;
          int am = offset < 0 ? - m : m;
          char buf[sizeof "+00" + INT_STRLEN_BOUND (int)];
-         sprintf (buf, "%c%02d%02d", (offset < 0 ? '-' : '+'), am/60, am%60);
-         zone_name = build_string (buf);
+         zone_name = make_formatted_string (buf, "%c%02d%02d", 
+                                            (offset < 0 ? '-' : '+'),
+                                            am / 60, am % 60);
        }
     }
 
index 252ee3cfb1d63edbf7fba46c78845a858384f942..30258a5ffa01c654605e8237e025fa6fc8e632cb 100644 (file)
@@ -174,14 +174,14 @@ get_boot_time (void)
 
       filename = Qnil;
 
-      sprintf (cmd_string, "%s.%d", WTMP_FILE, counter);
-      tempname = build_string (cmd_string);
+      tempname = make_formatted_string
+       (cmd_string, "%s.%d", WTMP_FILE, counter);
       if (! NILP (Ffile_exists_p (tempname)))
        filename = tempname;
       else
        {
-         sprintf (cmd_string, "%s.%d.gz", WTMP_FILE, counter);
-         tempname = build_string (cmd_string);
+         tempname = make_formatted_string (cmd_string, "%s.%d.gz",
+                                           WTMP_FILE, counter);
          if (! NILP (Ffile_exists_p (tempname)))
            {
              Lisp_Object args[6];
index 4902811ecff9758bdfd7b64c5f2a4b519c8c193e..be5631da77381ea415a9088938250861ffa0ca22 100644 (file)
@@ -518,9 +518,7 @@ make_terminal_frame (struct terminal *terminal)
   XSETFRAME (frame, f);
   Vframe_list = Fcons (frame, Vframe_list);
 
-  tty_frame_count++;
-  sprintf (name, "F%"pMd, tty_frame_count);
-  f->name = build_string (name);
+  f->name = make_formatted_string (name, "F%"pMd, ++tty_frame_count);
 
   f->visible = 1;              /* FRAME_SET_VISIBLE wd set frame_garbaged. */
   f->async_visible = 1;                /* Don't let visible be cleared later. */
@@ -2028,9 +2026,7 @@ set_term_frame_name (struct frame *f, Lisp_Object name)
                            SBYTES (f->name)))
        return;
 
-      tty_frame_count++;
-      sprintf (namebuf, "F%"pMd, tty_frame_count);
-      name = build_string (namebuf);
+      name = make_formatted_string (namebuf, "F%"pMd, ++tty_frame_count);
     }
   else
     {
@@ -3049,20 +3045,16 @@ x_report_frame_params (struct frame *f, Lisp_Object *alistptr)
      actually a pointer.  Explicit casting avoids compiler
      warnings.  */
   w = (unsigned long) FRAME_X_WINDOW (f);
-  sprintf (buf, "%lu", w);
   store_in_alist (alistptr, Qwindow_id,
-                 build_string (buf));
+                 make_formatted_string (buf, "%lu", w));
 #ifdef HAVE_X_WINDOWS
 #ifdef USE_X_TOOLKIT
   /* Tooltip frame may not have this widget.  */
   if (FRAME_X_OUTPUT (f)->widget)
 #endif
-    {
-      w = (unsigned long) FRAME_OUTER_WINDOW (f);
-      sprintf (buf, "%lu", w);
-    }
+    w = (unsigned long) FRAME_OUTER_WINDOW (f);
   store_in_alist (alistptr, Qouter_window_id,
-                 build_string (buf));
+                 make_formatted_string (buf, "%lu", w));
 #endif
   store_in_alist (alistptr, Qicon_name, f->icon_name);
   FRAME_SAMPLE_VISIBILITY (f);
index 0854d01716381e7bf9428d3181390250bded6a30..b4ad329bacbd19a30a541462b3515322b622f134 100644 (file)
@@ -8549,13 +8549,13 @@ gs_load (struct frame *f, struct image *img)
      don't either.  Let the Lisp loader use `unwind-protect' instead.  */
   printnum1 = FRAME_X_WINDOW (f);
   printnum2 = img->pixmap;
-  sprintf (buffer, "%"pMu" %"pMu, printnum1, printnum2);
-  window_and_pixmap_id = build_string (buffer);
+  window_and_pixmap_id 
+    = make_formatted_string (buffer, "%"pMu" %"pMu, printnum1, printnum2);
 
   printnum1 = FRAME_FOREGROUND_PIXEL (f);
   printnum2 = FRAME_BACKGROUND_PIXEL (f);
-  sprintf (buffer, "%"pMu" %"pMu, printnum1, printnum2);
-  pixel_colors = build_string (buffer);
+  pixel_colors
+    = make_formatted_string (buffer, "%"pMu" %"pMu, printnum1, printnum2);
 
   XSETFRAME (frame, f);
   loader = image_spec_value (img->spec, QCloader, NULL);
index ca199190bc00c43f1e9f0c9c6883e3eccd00d943..466287b798aa3d39c41f8d7c53b20c03f47323ad 100644 (file)
@@ -2611,6 +2611,7 @@ extern Lisp_Object list5 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
 extern Lisp_Object allocate_misc (void);
 extern _Noreturn void string_overflow (void);
 extern Lisp_Object make_string (const char *, ptrdiff_t);
+extern Lisp_Object make_formatted_string (char *, const char *, ...);
 extern Lisp_Object make_unibyte_string (const char *, ptrdiff_t);
 extern Lisp_Object make_multibyte_string (const char *, ptrdiff_t, ptrdiff_t);
 extern Lisp_Object make_event_array (int, Lisp_Object *);
index 89390aeb0b50e50f9a2bf73745e00368cbc93b28..acf57a732689c3a2a72249873cd8e029554071fe 100644 (file)
@@ -792,8 +792,8 @@ get_minibuffer (EMACS_INT depth)
   buf = Fcar (tail);
   if (NILP (buf) || NILP (BVAR (XBUFFER (buf), name)))
     {
-      sprintf (name, " *Minibuf-%"pI"d*", depth);
-      buf = Fget_buffer_create (build_string (name));
+      buf = Fget_buffer_create
+       (make_formatted_string (name, " *Minibuf-%"pI"d*", depth));
 
       /* Although the buffer's name starts with a space, undo should be
         enabled in it.  */
index 64fc671fa4360697f27837197e7c681bf38b9970..8a6a150a956bd64b7e30a1eb5176c3eb504bcccc 100644 (file)
@@ -520,8 +520,10 @@ dos_set_window_size (int *rows, int *cols)
 
   /* If the user specified a special video mode for these dimensions,
      use that mode.  */
-  sprintf (video_name, "screen-dimensions-%dx%d", *rows, *cols);
-  video_mode = Fsymbol_value (Fintern_soft (build_string (video_name), Qnil));
+  video_mode 
+    = Fsymbol_value (Fintern_soft (make_formatted_string 
+                                  (video_name, "screen-dimensions-%dx%d",
+                                   *rows, *cols), Qnil));
 
   if (INTEGERP (video_mode)
       && (video_mode_value = XINT (video_mode)) > 0)
index f7ecd9b05a7a6222076d00af9c624fd5941e3bc0..7e9d746a450d3401e76b87f9c48866cab2d35f4b 100644 (file)
@@ -645,8 +645,7 @@ make_process (Lisp_Object name)
     {
       tem = Fget_process (name1);
       if (NILP (tem)) break;
-      sprintf (suffix, "<%"pMd">", i);
-      name1 = concat2 (name, build_string (suffix));
+      name1 = concat2 (name, make_formatted_string (suffix, "<%"pMd">", i));
     }
   name = name1;
   p->name = name;
index 9018dce37fa8e7702e50df07e196140ad5948519..4b9445d7469801a323e155ce084e4512ff0135f7 100644 (file)
@@ -9866,8 +9866,8 @@ ensure_echo_area_buffers (void)
        int j;
 
        old_buffer = echo_buffer[i];
-       sprintf (name, " *Echo Area %d*", i);
-       echo_buffer[i] = Fget_buffer_create (build_string (name));
+       echo_buffer[i] = Fget_buffer_create
+         (make_formatted_string (name, " *Echo Area %d*", i));
        BVAR (XBUFFER (echo_buffer[i]), truncate_lines) = Qnil;
        /* to force word wrap in echo area -
           it was decided to postpone this*/
index a4e3849a6524dc7258dfdbd7de76151e286635bc..6f7b81cbe872931afc168051958e303257c7d6e6 100644 (file)
@@ -711,10 +711,12 @@ apply_xft_settings (struct x_display_info *dpyinfo,
       if (send_event_p)
         store_config_changed_event (Qfont_render,
                                     XCAR (dpyinfo->name_list_element));
-      sprintf (buf, format, oldsettings.aa, oldsettings.hinting,
-              oldsettings.rgba, oldsettings.lcdfilter,
-              oldsettings.hintstyle, oldsettings.dpi);
-      Vxft_settings = build_string (buf);
+      Vxft_settings 
+       = make_formatted_string (buf, format,
+                                oldsettings.aa, oldsettings.hinting,
+                                oldsettings.rgba, oldsettings.lcdfilter,
+                                oldsettings.hintstyle, oldsettings.dpi);
+      
     }
   else
     FcPatternDestroy (pat);