@@ -3756,10 +3756,33 @@ init_homedir(void)
37563756 var = mch_getenv ((char_u * )"HOME" );
37573757#endif
37583758
3759- if (var != NULL && * var == NUL ) /* empty is same as not set */
3760- var = NULL ;
3761-
37623759#ifdef WIN3264
3760+ /*
3761+ * Typically, $HOME is not defined on Windows, unless the user has
3762+ * specifically defined it for Vim's sake. However, on Windows NT
3763+ * platforms, $HOMEDRIVE and $HOMEPATH are automatically defined for
3764+ * each user. Try constructing $HOME from these.
3765+ */
3766+ if (var == NULL || * var == NULL )
3767+ {
3768+ char_u * homedrive , * homepath ;
3769+
3770+ homedrive = mch_getenv ((char_u * )"HOMEDRIVE" );
3771+ homepath = mch_getenv ((char_u * )"HOMEPATH" );
3772+ if (homepath == NULL || * homepath == NUL )
3773+ homepath = (char_u * )"\\" ;
3774+ if (homedrive != NULL
3775+ && STRLEN (homedrive ) + STRLEN (homepath ) < MAXPATHL )
3776+ {
3777+ sprintf ((char * )NameBuff , "%s%s" , homedrive , homepath );
3778+ if (NameBuff [0 ] != NUL )
3779+ var = NameBuff ;
3780+ }
3781+ }
3782+
3783+ if (var == NULL )
3784+ var = mch_getenv ((char_u * )"USERPROFILE" );
3785+
37633786 /*
37643787 * Weird but true: $HOME may contain an indirect reference to another
37653788 * variable, esp. "%USERPROFILE%". Happens when $USERPROFILE isn't set
@@ -3780,40 +3803,14 @@ init_homedir(void)
37803803 {
37813804 vim_snprintf ((char * )NameBuff , MAXPATHL , "%s%s" , exp , p + 1 );
37823805 var = NameBuff ;
3783- /* Also set $HOME, it's needed for _viminfo. */
3784- vim_setenv ((char_u * )"HOME" , NameBuff );
37853806 }
37863807 }
37873808 }
37883809
3789- /*
3790- * Typically, $HOME is not defined on Windows, unless the user has
3791- * specifically defined it for Vim's sake. However, on Windows NT
3792- * platforms, $HOMEDRIVE and $HOMEPATH are automatically defined for
3793- * each user. Try constructing $HOME from these.
3794- */
3795- if (var == NULL )
3796- {
3797- char_u * homedrive , * homepath ;
3798-
3799- homedrive = mch_getenv ((char_u * )"HOMEDRIVE" );
3800- homepath = mch_getenv ((char_u * )"HOMEPATH" );
3801- if (homepath == NULL || * homepath == NUL )
3802- homepath = (char_u * )"\\" ;
3803- if (homedrive != NULL
3804- && STRLEN (homedrive ) + STRLEN (homepath ) < MAXPATHL )
3805- {
3806- sprintf ((char * )NameBuff , "%s%s" , homedrive , homepath );
3807- if (NameBuff [0 ] != NUL )
3808- {
3809- var = NameBuff ;
3810- /* Also set $HOME, it's needed for _viminfo. */
3811- vim_setenv ((char_u * )"HOME" , NameBuff );
3812- }
3813- }
3814- }
3810+ if (var != NULL && * var == NUL ) /* empty is same as not set */
3811+ var = NULL ;
38153812
3816- # if defined( FEAT_MBYTE )
3813+ # ifdef FEAT_MBYTE
38173814 if (enc_utf8 && var != NULL )
38183815 {
38193816 int len ;
@@ -3829,16 +3826,15 @@ init_homedir(void)
38293826 }
38303827 }
38313828# endif
3832- #endif
38333829
3834- #if defined(MSWIN )
38353830 /*
38363831 * Default home dir is C:/
38373832 * Best assumption we can make in such a situation.
38383833 */
38393834 if (var == NULL )
38403835 var = (char_u * )"C:/" ;
38413836#endif
3837+
38423838 if (var != NULL )
38433839 {
38443840#ifdef UNIX
@@ -4667,6 +4663,10 @@ home_replace(
46674663 homedir_env_orig = homedir_env = mch_getenv ((char_u * )"SYS$LOGIN" );
46684664#else
46694665 homedir_env_orig = homedir_env = mch_getenv ((char_u * )"HOME" );
4666+ #endif
4667+ #ifdef WIN3264
4668+ if (homedir_env == NULL )
4669+ homedir_env_orig = homedir_env = mch_getenv ((char_u * )"USERPROFILE" );
46704670#endif
46714671 /* Empty is the same as not set. */
46724672 if (homedir_env != NULL && * homedir_env == NUL )
0 commit comments