X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/0121d32af5f58b284815da9c571f829f0f9e9186..eb0f65b4fbbea60100b53cb40a1d7138d47ad0d2:/src/xrdb.c diff --git a/src/xrdb.c b/src/xrdb.c index 32ad3c7f01..2235b4535d 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 @@ -119,8 +119,8 @@ magic_db (const char *string, ptrdiff_t string_len, const char *class, while (p < string + string_len) { /* The chunk we're about to stick on the end of result. */ - const char *next = NULL; - ptrdiff_t next_len; + const char *next = p; + ptrdiff_t next_len = 1; if (*p == '%') { @@ -137,10 +137,13 @@ magic_db (const char *string, ptrdiff_t string_len, const char *class, break; case 'C': - next = (x_customization_string - ? x_customization_string - : ""); - next_len = strlen (next); + if (x_customization_string) + { + next = x_customization_string; + next_len = strlen (next); + } + else + next_len = 0; break; case 'N': @@ -176,8 +179,6 @@ magic_db (const char *string, ptrdiff_t string_len, const char *class, return NULL; } } - else - next = p, next_len = 1; /* Do we have room for this component followed by a '\0'? */ if (path_size - path_len <= next_len) @@ -232,9 +233,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 +336,7 @@ get_user_app (const char *class) return db; } +static char const xdefaults[] = ".Xdefaults"; static XrmDatabase get_user_db (Display *display) @@ -351,16 +354,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 +379,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 +668,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];