X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/0cce3623b169732a51f055a86fc926313b11a5ee..6ffb560b2a940d19419ac5afe11418588ef8c61f:/src/xrdb.c diff --git a/src/xrdb.c b/src/xrdb.c index 32ad3c7f01..9e85e5a627 100644 --- a/src/xrdb.c +++ b/src/xrdb.c @@ -1,5 +1,5 @@ /* Deal with the X Resource Manager. - Copyright (C) 1990, 1993-1994, 2000-2014 Free Software Foundation, + Copyright (C) 1990, 1993-1994, 2000-2015 Free Software Foundation, Inc. Author: Joseph Arceneaux @@ -232,9 +232,10 @@ gethomedir (void) if (ptr == NULL) return xstrdup ("/"); - copy = xmalloc (strlen (ptr) + 2); - strcpy (copy, ptr); - return strcat (copy, "/"); + ptrdiff_t len = strlen (ptr); + copy = xmalloc (len + 2); + strcpy (copy + len, "/"); + return memcpy (copy, ptr, len); } @@ -334,6 +335,7 @@ get_user_app (const char *class) return db; } +static char const xdefaults[] = ".Xdefaults"; static XrmDatabase get_user_db (Display *display) @@ -351,16 +353,12 @@ get_user_db (Display *display) db = XrmGetStringDatabase (xdefs); else { - char *home; - char *xdefault; - - home = gethomedir (); - xdefault = xmalloc (strlen (home) + sizeof ".Xdefaults"); - strcpy (xdefault, home); - strcat (xdefault, ".Xdefaults"); - db = XrmGetFileDatabase (xdefault); - xfree (home); - xfree (xdefault); + char *home = gethomedir (); + ptrdiff_t homelen = strlen (home); + char *filename = xrealloc (home, homelen + sizeof xdefaults); + strcpy (filename + homelen, xdefaults); + db = XrmGetFileDatabase (filename); + xfree (filename); } #ifdef HAVE_XSCREENRESOURCESTRING @@ -380,24 +378,23 @@ static XrmDatabase get_environ_db (void) { XrmDatabase db; - char *p; - char *path = 0; + char *p = getenv ("XENVIRONMENT"); + char *filename = 0; - if ((p = getenv ("XENVIRONMENT")) == NULL) + if (!p) { - static char const xdefaults[] = ".Xdefaults-"; char *home = gethomedir (); - char const *host = SSDATA (Vsystem_name); - ptrdiff_t pathsize = (strlen (home) + sizeof xdefaults - + SBYTES (Vsystem_name)); - path = xrealloc (home, pathsize); - strcat (strcat (path, xdefaults), host); - p = path; + ptrdiff_t homelen = strlen (home); + Lisp_Object system_name = Fsystem_name (); + ptrdiff_t filenamesize = (homelen + sizeof xdefaults + + SBYTES (system_name)); + p = filename = xrealloc (home, filenamesize); + lispstpcpy (stpcpy (filename + homelen, xdefaults), system_name); } db = XrmGetFileDatabase (p); - xfree (path); + xfree (filename); return db; } @@ -670,7 +667,7 @@ main (int argc, char **argv) /* In a real program, you'd want to also do this: */ display->db = xdb; - while (1) + while (true) { char query_name[90]; char query_class[90];