@@ -3750,10 +3750,33 @@ init_homedir(void)
37503750 var = mch_getenv ((char_u * )"HOME" );
37513751#endif
37523752
3753- if (var != NULL && * var == NUL ) /* empty is same as not set */
3754- var = NULL ;
3755-
37563753#ifdef WIN3264
3754+ /*
3755+ * Typically, $HOME is not defined on Windows, unless the user has
3756+ * specifically defined it for Vim's sake. However, on Windows NT
3757+ * platforms, $HOMEDRIVE and $HOMEPATH are automatically defined for
3758+ * each user. Try constructing $HOME from these.
3759+ */
3760+ if (var == NULL || * var == NULL )
3761+ {
3762+ char_u * homedrive , * homepath ;
3763+
3764+ homedrive = mch_getenv ((char_u * )"HOMEDRIVE" );
3765+ homepath = mch_getenv ((char_u * )"HOMEPATH" );
3766+ if (homepath == NULL || * homepath == NUL )
3767+ homepath = (char_u * )"\\" ;
3768+ if (homedrive != NULL
3769+ && STRLEN (homedrive ) + STRLEN (homepath ) < MAXPATHL )
3770+ {
3771+ sprintf ((char * )NameBuff , "%s%s" , homedrive , homepath );
3772+ if (NameBuff [0 ] != NUL )
3773+ var = NameBuff ;
3774+ }
3775+ }
3776+
3777+ if (var == NULL )
3778+ var = mch_getenv ((char_u * )"USERPROFILE" );
3779+
37573780 /*
37583781 * Weird but true: $HOME may contain an indirect reference to another
37593782 * variable, esp. "%USERPROFILE%". Happens when $USERPROFILE isn't set
@@ -3774,40 +3797,14 @@ init_homedir(void)
37743797 {
37753798 vim_snprintf ((char * )NameBuff , MAXPATHL , "%s%s" , exp , p + 1 );
37763799 var = NameBuff ;
3777- /* Also set $HOME, it's needed for _viminfo. */
3778- vim_setenv ((char_u * )"HOME" , NameBuff );
37793800 }
37803801 }
37813802 }
37823803
3783- /*
3784- * Typically, $HOME is not defined on Windows, unless the user has
3785- * specifically defined it for Vim's sake. However, on Windows NT
3786- * platforms, $HOMEDRIVE and $HOMEPATH are automatically defined for
3787- * each user. Try constructing $HOME from these.
3788- */
3789- if (var == NULL )
3790- {
3791- char_u * homedrive , * homepath ;
3792-
3793- homedrive = mch_getenv ((char_u * )"HOMEDRIVE" );
3794- homepath = mch_getenv ((char_u * )"HOMEPATH" );
3795- if (homepath == NULL || * homepath == NUL )
3796- homepath = (char_u * )"\\" ;
3797- if (homedrive != NULL
3798- && STRLEN (homedrive ) + STRLEN (homepath ) < MAXPATHL )
3799- {
3800- sprintf ((char * )NameBuff , "%s%s" , homedrive , homepath );
3801- if (NameBuff [0 ] != NUL )
3802- {
3803- var = NameBuff ;
3804- /* Also set $HOME, it's needed for _viminfo. */
3805- vim_setenv ((char_u * )"HOME" , NameBuff );
3806- }
3807- }
3808- }
3804+ if (var != NULL && * var == NUL ) /* empty is same as not set */
3805+ var = NULL ;
38093806
3810- # if defined( FEAT_MBYTE )
3807+ # ifdef FEAT_MBYTE
38113808 if (enc_utf8 && var != NULL )
38123809 {
38133810 int len ;
@@ -3823,16 +3820,15 @@ init_homedir(void)
38233820 }
38243821 }
38253822# endif
3826- #endif
38273823
3828- #if defined(MSWIN )
38293824 /*
38303825 * Default home dir is C:/
38313826 * Best assumption we can make in such a situation.
38323827 */
38333828 if (var == NULL )
38343829 var = (char_u * )"C:/" ;
38353830#endif
3831+
38363832 if (var != NULL )
38373833 {
38383834#ifdef UNIX
@@ -4661,6 +4657,10 @@ home_replace(
46614657 homedir_env_orig = homedir_env = mch_getenv ((char_u * )"SYS$LOGIN" );
46624658#else
46634659 homedir_env_orig = homedir_env = mch_getenv ((char_u * )"HOME" );
4660+ #endif
4661+ #ifdef WIN3264
4662+ if (homedir_env == NULL )
4663+ homedir_env_orig = homedir_env = mch_getenv ((char_u * )"USERPROFILE" );
46644664#endif
46654665 /* Empty is the same as not set. */
46664666 if (homedir_env != NULL && * homedir_env == NUL )
0 commit comments