From 2b08e138cfd4d5c44f3189f36aca9cd20a77e66e Mon Sep 17 00:00:00 2001 From: jjgarcia Date: Mon, 25 Aug 2008 14:00:36 +0000 Subject: [PATCH] In addition to HOME, ECL now recognizes the environment variables HOMEDRIVE and HOMEPATH --- src/CHANGELOG | 3 +++ src/c/unixfsys.d | 19 +++++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/CHANGELOG b/src/CHANGELOG index 673889b0e..148ead8d9 100644 --- a/src/CHANGELOG +++ b/src/CHANGELOG @@ -30,6 +30,9 @@ ECL 0.9l-p1: for i from 0 do (format t "~&~@<;;; ~@;Message #~D~%~A~:>" i m))) + - In windows, ECL recognizes the environment variables HOMEDRIVE and HOMEPATH + and uses them to construct the output of user-homedir-pathname. + * Bugs fixed: - The optimizer for COERCE might enter an infinite loop for certain diff --git a/src/c/unixfsys.d b/src/c/unixfsys.d index 9cc169f5c..94827113b 100644 --- a/src/c/unixfsys.d +++ b/src/c/unixfsys.d @@ -483,12 +483,8 @@ ecl_homedir_pathname(cl_object user) { cl_index i; cl_object namestring; - - if (Null(user)) { - char *h = getenv("HOME"); - namestring = (h == NULL)? make_constant_base_string("/") - : make_base_string_copy(h); - } else { + const char *h, *d; + If (!Null(user)) { #ifdef HAVE_PWD_H struct passwd *pwent = NULL; #endif @@ -511,6 +507,17 @@ ecl_homedir_pathname(cl_object user) namestring = make_base_string_copy(pwent->pw_dir); #endif FEerror("Unknown user ~S.", 1, p); + } else if ((h = getenv("HOME"))) { + namestring = make_base_string_copy(h); +#ifdef _MSC_VER + } else if ((h = getenv("HOMEPATH")) && (d = getenv("HOMEDRIVE"))) { + namestring = + si_base_string_concatenate(2, + make_constant_base_string(h), + make_constant_base_string(d)); +#endif + } else { + namestring = make_constant_base_string("/"); } if (namestring->base_string.self[0] == '~') { FEerror("Not a valid home pathname ~S", 1, namestring);