# HG changeset patch # User Eli Zaretskii # Date 1013195791 0 # Node ID 4934ed73c7a4eec31f2278a62179f9f17b17a415 # Parent 006c566af674e8171ec6263992aea03f2f84d22a (Fsubstitute_in_file_name): If the file name includes ~user, and there's no such user, don't discard everything before ~user. diff -r 006c566af674 -r 4934ed73c7a4 src/fileio.c --- a/src/fileio.c Fri Feb 08 19:04:27 2002 +0000 +++ b/src/fileio.c Fri Feb 08 19:16:31 2002 +0000 @@ -2025,6 +2025,7 @@ int total = 0; int substituted = 0; unsigned char *xnm; + struct passwd *pw; Lisp_Object handler; CHECK_STRING (filename); @@ -2063,8 +2064,27 @@ #endif /* VMS */ || IS_DIRECTORY_SEP (p[-1]))) { - nm = p; - substituted = 1; + for (s = p; *s && (!IS_DIRECTORY_SEP (*s) +#ifdef VMS + && *s != ':' +#endif /* VMS */ + ); s++); + if (s > p + 1) + { + o = (unsigned char *) alloca (s - p + 1); + bcopy ((char *) p, o, s - p); + o [s - p] = 0; + + pw = (struct passwd *) getpwnam (o + 1); + } + /* If we have ~/ or ~user and `user' exists, discard + everything up to ~. But if `user' does not exist, leave + ~user alone, it might be a literal file name. */ + if (s == p + 1 || pw) + { + nm = p; + substituted = 1; + } } #ifdef DOS_NT /* see comment in expand-file-name about drive specifiers */