]> code.delx.au - gnu-emacs/commitdiff
* lisp.h (lispstpcpy): Rename from lispstrcpy, and act like stpcpy.
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 23 Sep 2014 17:03:48 +0000 (10:03 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 23 Sep 2014 17:03:48 +0000 (10:03 -0700)
All callers changed.
* xterm.c (x_term_init): Use new functionality to avoid two needs
to compute a string length.

14 files changed:
src/ChangeLog
src/callproc.c
src/dbusbind.c
src/doc.c
src/font.c
src/frame.c
src/lisp.h
src/process.c
src/w32fns.c
src/w32proc.c
src/xfns.c
src/xfont.c
src/xsmfns.c
src/xterm.c

index 7e1768e2cdaf4eaaf08f2190f31c6efda112985c..7f05f6fe21f4f82d5f07001b6e168b3af7fb763c 100644 (file)
@@ -1,5 +1,10 @@
 2014-09-23  Paul Eggert  <eggert@cs.ucla.edu>
 
+       * lisp.h (lispstpcpy): Rename from lispstrcpy, and act like stpcpy.
+       All callers changed.
+       * xterm.c (x_term_init): Use new functionality to avoid two needs
+       to compute a string length.
+
        * dispextern.h, xdisp.c (window_box_right_offset): Now static.
 
 2014-09-23  Dmitry Antipov  <dmantipov@yandex.ru>
index 2fa475e72df223e51a3e12d5221517c29b07ea99..e3dcc7bbccac254476230f9473091f2ad1797bf5 100644 (file)
@@ -1235,7 +1235,7 @@ child_setup (int in, int out, int err, char **new_argv, bool set_pgrp,
 #endif
     temp = pwd_var + 4;
     memcpy (pwd_var, "PWD=", 4);
-    lispstrcpy (temp, current_dir);
+    lispstpcpy (temp, current_dir);
 
 #ifndef DOS_NT
     /* We can't signal an Elisp error here; we're in a vfork.  Since
index 58302df49271e62e884659b3f238a4975dce21c7..f81666ba7bd42c107995194b7ea7c2905357855f 100644 (file)
@@ -761,7 +761,7 @@ xd_append_arg (int dtype, Lisp_Object object, DBusMessageIter *iter)
                && STRINGP (CAR_SAFE (XD_NEXT_VALUE (object)))
                && NILP (CDR_SAFE (XD_NEXT_VALUE (object))))
              {
-               lispstrcpy (signature, CAR_SAFE (XD_NEXT_VALUE (object)));
+               lispstpcpy (signature, CAR_SAFE (XD_NEXT_VALUE (object)));
                object = CDR_SAFE (XD_NEXT_VALUE (object));
              }
 
index da6a9deb9779a476c757eb2609c2c6c51ed98953..fdd7be6def92fc4f1b27495373316631d2392a57 100644 (file)
--- a/src/doc.c
+++ b/src/doc.c
@@ -121,7 +121,7 @@ get_doc_string (Lisp_Object filepos, bool unibyte, bool definition)
       if (minsize < 8)
        minsize = 8;
       name = SAFE_ALLOCA (minsize + SCHARS (file) + 8);
-      lispstrcpy (name, docdir);
+      lispstpcpy (name, docdir);
       strcat (name, SSDATA (file));
     }
   else
index e8a13b7eeda88e8eede9822841a0e64c6205a01e..1324b6e99c2f08bf0319db3864f66ba41abeb619 100644 (file)
@@ -4266,7 +4266,7 @@ the consecutive wildcards are folded into one.  */)
        {
          if (NILP (fold_wildcards))
            return font_name;
-         lispstrcpy (name, font_name);
+         lispstpcpy (name, font_name);
          namelen = SBYTES (font_name);
          goto done;
        }
index 51bd8fa7cfc42585b3e0d089d8ce157970048062..5e2f351d77a8dd1247c9d1ce1274f998f5a1c854 100644 (file)
@@ -4036,8 +4036,8 @@ xrdb_get_resource (XrmDatabase rdb, Lisp_Object attribute, Lisp_Object class, Li
 
   /* Start with emacs.FRAMENAME for the name (the specific one)
      and with `Emacs' for the class key (the general one).  */
-  lispstrcpy (name_key, Vx_resource_name);
-  lispstrcpy (class_key, Vx_resource_class);
+  lispstpcpy (name_key, Vx_resource_name);
+  lispstpcpy (class_key, Vx_resource_class);
 
   strcat (class_key, ".");
   strcat (class_key, SSDATA (class));
index 6ece4810b0becc5b59e7302b3072fa8e775ad53e..deb4635d0359c6f3c8c6d837dbcf46abf1eed4fd 100644 (file)
@@ -4463,12 +4463,15 @@ extern char *xstrdup (const char *) ATTRIBUTE_MALLOC;
 extern char *xlispstrdup (Lisp_Object) ATTRIBUTE_MALLOC;
 extern void dupstring (char **, char const *);
 
-/* Like strcpy but uses known length of a Lisp string.  */
+/* Make DEST a copy of STRING's data.  Return a pointer to DEST's terminating
+   null byte.  This is like stpcpy, except the source is a Lisp string.  */
 
 INLINE char *
-lispstrcpy (const char *dest, Lisp_Object string)
+lispstpcpy (char *dest, Lisp_Object string)
 {
-  return memcpy ((void *) dest, SSDATA (string), SBYTES (string) + 1);
+  ptrdiff_t len = SBYTES (string);
+  memcpy (dest, SDATA (string), len + 1);
+  return dest + len;
 }
 
 extern void xputenv (const char *);
index c61400837844174855cd184f02a2759db9b26327..f6484d0370ecb8bbeedc5616334607303f6e06f2 100644 (file)
@@ -2989,7 +2989,7 @@ usage: (make-network-process &rest ARGS)  */)
       address_un.sun_family = AF_LOCAL;
       if (sizeof address_un.sun_path <= SBYTES (service))
        error ("Service name too long");
-      lispstrcpy (address_un.sun_path, service);
+      lispstpcpy (address_un.sun_path, service);
       ai.ai_addr = (struct sockaddr *) &address_un;
       ai.ai_addrlen = sizeof address_un;
       goto open_socket;
@@ -3680,7 +3680,7 @@ network_interface_info (Lisp_Object ifname)
 
   if (sizeof rq.ifr_name <= SBYTES (ifname))
     error ("interface name too long");
-  lispstrcpy (rq.ifr_name, ifname);
+  lispstpcpy (rq.ifr_name, ifname);
 
   s = socket (AF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0);
   if (s < 0)
index a58a9ced85c1196625b2b67b3fe4bc8b07bafed2..2b77bb737b6074f80a1e90f91df88c37aa9d58a1 100644 (file)
@@ -5339,7 +5339,7 @@ terminate Emacs if we can't open the connection.
   {
     char basename[ MAX_PATH ], *str;
 
-    lispstrcpy (basename, Vinvocation_name);
+    lispstpcpy (basename, Vinvocation_name);
     str = strrchr (basename, '.');
     if (str) *str = 0;
     Vinvocation_name = build_string (basename);
index 795df31c858451d8097e109a4b2d5b25269b0b92..dc91910d9a77f9e510e11c59359aa565b83dfcea 100644 (file)
@@ -1647,7 +1647,7 @@ sys_spawnve (int mode, char *cmdname, char **argv, char **envp)
        strcpy (cmdname, egetenv ("CMDPROXY"));
       else
        {
-         lispstrcpy (cmdname, Vinvocation_directory);
+         lispstpcpy (cmdname, Vinvocation_directory);
          strcat (cmdname, "cmdproxy.exe");
        }
 
index 7ecd15aea916611de0727f7b543129675d079111..c2e39b5c0a678a020a6014dc6e1220ff0a5a2a81 100644 (file)
@@ -4289,7 +4289,7 @@ select_visual (struct x_display_info *dpyinfo)
       int i, class = -1;
       XVisualInfo vinfo;
 
-      lispstrcpy (s, value);
+      lispstpcpy (s, value);
       dash = strchr (s, '-');
       if (dash)
        {
index db0449716ab6fbc68b43743ab36c2a1c4bd44190..4dc26bb41bfc4071ae53ac0e821192c6c4ab715d 100644 (file)
@@ -541,7 +541,7 @@ xfont_list (struct frame *f, Lisp_Object spec)
            if (STRINGP (XCAR (alter))
                && ((r - name) + SBYTES (XCAR (alter))) < 256)
              {
-               lispstrcpy (r, XCAR (alter));
+               lispstpcpy (r, XCAR (alter));
                list = xfont_list_pattern (display, name, registry, script);
                if (! NILP (list))
                  break;
index 5efbfaafa8faf3fd1a07a94ad964892f9c681bbc..ed67a7d8e1fe8b097e5b5e5e0261754edb93d6ad 100644 (file)
@@ -418,7 +418,7 @@ x_session_initialize (struct x_display_info *dpyinfo)
   emacs_program[0] = '\0';
 
   if (! EQ (Vinvocation_directory, Qnil))
-    lispstrcpy (emacs_program, Vinvocation_directory);
+    lispstpcpy (emacs_program, Vinvocation_directory);
   strcat (emacs_program, SSDATA (Vinvocation_name));
 
   /* The SM protocol says all callbacks are mandatory, so set up all
index 1b721b042beb1f6134c768641ad94b9cd896db4b..e24e86ce412b6b0cfb6c4e58381c9b3435ade7de 100644 (file)
@@ -10902,8 +10902,9 @@ x_term_init (Lisp_Object display_name, char *xrm_option, char *resource_name)
   dpyinfo->x_id = ++x_display_id;
   dpyinfo->x_id_name = xmalloc (SBYTES (Vinvocation_name)
                                + SBYTES (Vsystem_name) + 2);
-  strcat (strcat (lispstrcpy (dpyinfo->x_id_name, Vinvocation_name), "@"),
-         SSDATA (Vsystem_name));
+  char *nametail = lispstpcpy (dpyinfo->x_id_name, Vinvocation_name);
+  *nametail++ = '@';
+  lispstpcpy (nametail, Vsystem_name);
 
   /* Figure out which modifier bits mean what.  */
   x_find_modifier_meanings (dpyinfo);