diff options
| author | Paul Eggert | 2014-12-25 04:19:17 -0800 |
|---|---|---|
| committer | Paul Eggert | 2014-12-25 15:44:23 -0800 |
| commit | 1e6879dbdb0832427f5c588c89a53a8a80768a00 (patch) | |
| tree | 155493c6e140264c05356c667a1c9547a45e336f /src/xrdb.c | |
| parent | 8dba53d239f5ac00e930f13b73f59cb5b53ffbd1 (diff) | |
| download | emacs-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.c | 44 |
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 | ||
| 338 | static char const xdefaults[] = ".Xdefaults"; | ||
| 337 | 339 | ||
| 338 | static XrmDatabase | 340 | static XrmDatabase |
| 339 | get_user_db (Display *display) | 341 | get_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 | |||
| 380 | get_environ_db (void) | 378 | get_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 | } |