diff -urN cvs-1.12.13.org/src/filesubr.c cvs-1.12.13/src/filesubr.c --- cvs-1.12.13.org/src/filesubr.c 2005-09-28 17:25:59.000000000 +0200 +++ cvs-1.12.13/src/filesubr.c 2007-11-05 20:47:46.928468198 +0100 @@ -832,7 +832,24 @@ char * strcat_filename_onto_homedir (const char *dir, const char *file) { - char *path = Xasprintf ("%s/%s", dir, file); + char *path; + char *cfgdir; + struct stat st; + int isdot = (*file == '.'); + + if ( (path = getenv("CONFIG_DIR")) && path[0] ) { + cfgdir = xmalloc(strlen(dir) + 1 + strlen(path) + 1); + sprintf(cfgdir, "%s/%s", dir, path); + } else + cfgdir = NULL; + if ( cfgdir && (stat(cfgdir, &st) != -1) && S_ISDIR(st.st_mode) ) { + path = Xasprintf ("%s/%s", cfgdir, file+isdot); + } else { + path = Xasprintf ("%s/%s", dir, file); + } + if (cfgdir) + free(cfgdir); + return path; }