Mercurial > emacs
changeset 43197:4934ed73c7a4
(Fsubstitute_in_file_name): If the file name includes ~user,
and there's no such user, don't discard everything before ~user.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Fri, 08 Feb 2002 19:16:31 +0000 |
parents | 006c566af674 |
children | e0854e3f00b9 |
files | src/fileio.c |
diffstat | 1 files changed, 22 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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 */