aboutsummaryrefslogtreecommitdiffstats
path: root/src/xrdb.c
diff options
context:
space:
mode:
authorPaul Eggert2014-12-25 04:19:17 -0800
committerPaul Eggert2014-12-25 15:44:23 -0800
commit1e6879dbdb0832427f5c588c89a53a8a80768a00 (patch)
tree155493c6e140264c05356c667a1c9547a45e336f /src/xrdb.c
parent8dba53d239f5ac00e930f13b73f59cb5b53ffbd1 (diff)
downloademacs-1e6879dbdb0832427f5c588c89a53a8a80768a00.tar.gz
emacs-1e6879dbdb0832427f5c588c89a53a8a80768a00.zip
Prefer stpcpy to strcat
* admin/merge-gnulib (GNULIB_MODULES): Add stpcpy. * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate. * lib/stpcpy.c, m4/stpcpy.m4: New files, from gnulib. * lib-src/ebrowse.c (sym_scope_1, operator_name, open_file): * lib-src/emacsclient.c (get_server_config, set_local_socket) (start_daemon_and_retry_set_socket): * lib-src/etags.c (main, C_entries, relative_filename): * lib-src/pop.c (sendline): * lib-src/update-game-score.c (main): * lwlib/xlwmenu.c (resource_widget_value): * src/callproc.c (child_setup): * src/dbusbind.c (xd_signature_cat): * src/doc.c (get_doc_string, Fsnarf_documentation): * src/editfns.c (Fuser_full_name): * src/frame.c (xrdb_get_resource): * src/gtkutil.c (xg_get_file_with_chooser): * src/tparam.c (tparam1): * src/xfns.c (xic_create_fontsetname): * src/xrdb.c (gethomedir, get_user_db, get_environ_db): * src/xsmfns.c (smc_save_yourself_CB): Rewrite to avoid the need for strcat, typically by using stpcpy and/or lispstpcpy. strcat tends to be part of O(N**2) algorithms. * src/doc.c (sibling_etc): * src/xrdb.c (xdefaults): Now a top-level static constant.
Diffstat (limited to 'src/xrdb.c')
-rw-r--r--src/xrdb.c44
1 files changed, 20 insertions, 24 deletions
diff --git a/src/xrdb.c b/src/xrdb.c
index 32ad3c7f01e..e21206d0800 100644
--- a/src/xrdb.c
+++ b/src/xrdb.c
@@ -232,9 +232,10 @@ gethomedir (void)
232 if (ptr == NULL) 232 if (ptr == NULL)
233 return xstrdup ("/"); 233 return xstrdup ("/");
234 234
235 copy = xmalloc (strlen (ptr) + 2); 235 ptrdiff_t len = strlen (ptr);
236 strcpy (copy, ptr); 236 copy = xmalloc (len + 2);
237 return strcat (copy, "/"); 237 strcpy (copy + len, "/");
238 return memcpy (copy, ptr, len);
238} 239}
239 240
240 241
@@ -334,6 +335,7 @@ get_user_app (const char *class)
334 return db; 335 return db;
335} 336}
336 337
338static char const xdefaults[] = ".Xdefaults";
337 339
338static XrmDatabase 340static XrmDatabase
339get_user_db (Display *display) 341get_user_db (Display *display)
@@ -351,16 +353,12 @@ get_user_db (Display *display)
351 db = XrmGetStringDatabase (xdefs); 353 db = XrmGetStringDatabase (xdefs);
352 else 354 else
353 { 355 {
354 char *home; 356 char *home = gethomedir ();
355 char *xdefault; 357 ptrdiff_t homelen = strlen (home);
356 358 char *filename = xrealloc (home, homelen + sizeof xdefaults);
357 home = gethomedir (); 359 strcpy (filename + homelen, xdefaults);
358 xdefault = xmalloc (strlen (home) + sizeof ".Xdefaults"); 360 db = XrmGetFileDatabase (filename);
359 strcpy (xdefault, home); 361 xfree (filename);
360 strcat (xdefault, ".Xdefaults");
361 db = XrmGetFileDatabase (xdefault);
362 xfree (home);
363 xfree (xdefault);
364 } 362 }
365 363
366#ifdef HAVE_XSCREENRESOURCESTRING 364#ifdef HAVE_XSCREENRESOURCESTRING
@@ -380,24 +378,22 @@ static XrmDatabase
380get_environ_db (void) 378get_environ_db (void)
381{ 379{
382 XrmDatabase db; 380 XrmDatabase db;
383 char *p; 381 char *p = getenv ("XENVIRONMENT");
384 char *path = 0; 382 char *filename = 0;
385 383
386 if ((p = getenv ("XENVIRONMENT")) == NULL) 384 if (!p)
387 { 385 {
388 static char const xdefaults[] = ".Xdefaults-";
389 char *home = gethomedir (); 386 char *home = gethomedir ();
390 char const *host = SSDATA (Vsystem_name); 387 ptrdiff_t homelen = strlen (home);
391 ptrdiff_t pathsize = (strlen (home) + sizeof xdefaults 388 ptrdiff_t filenamesize = (homelen + sizeof xdefaults
392 + SBYTES (Vsystem_name)); 389 + SBYTES (Vsystem_name));
393 path = xrealloc (home, pathsize); 390 p = filename = xrealloc (home, filenamesize);
394 strcat (strcat (path, xdefaults), host); 391 lispstpcpy (stpcpy (filename + homelen, xdefaults), Vsystem_name);
395 p = path;
396 } 392 }
397 393
398 db = XrmGetFileDatabase (p); 394 db = XrmGetFileDatabase (p);
399 395
400 xfree (path); 396 xfree (filename);
401 397
402 return db; 398 return db;
403} 399}