summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--win32/file.c39
1 files changed, 16 insertions, 23 deletions
diff --git a/win32/file.c b/win32/file.c
index 556d9615b3..6e7e5110ef 100644
--- a/win32/file.c
+++ b/win32/file.c
@@ -60,7 +60,9 @@ home_dir(void)
{
wchar_t *buffer = NULL;
size_t buffer_len = 0, len = 0;
- size_t home_env = 0;
+ enum {
+ HOME_NONE, ENV_HOME, ENV_DRIVEPATH, ENV_USERPROFILE
+ } home_type = HOME_NONE;
/*
GetEnvironmentVariableW when used with NULL will return the required
@@ -70,53 +72,44 @@ home_dir(void)
if ((len = GetEnvironmentVariableW(L"HOME", NULL, 0)) != 0) {
buffer_len = len;
- home_env = 1;
+ home_type = ENV_HOME;
}
else if ((len = GetEnvironmentVariableW(L"HOMEDRIVE", NULL, 0)) != 0) {
buffer_len = len;
if ((len = GetEnvironmentVariableW(L"HOMEPATH", NULL, 0)) != 0) {
buffer_len += len;
- home_env = 2;
- }
- else {
- buffer_len = 0;
+ home_type = ENV_DRIVEPATH;
}
}
else if ((len = GetEnvironmentVariableW(L"USERPROFILE", NULL, 0)) != 0) {
buffer_len = len;
- home_env = 3;
+ home_type = ENV_USERPROFILE;
}
+ if (!home_type) return NULL;
+
/* allocate buffer */
- if (home_env)
- buffer = (wchar_t *)xmalloc(buffer_len * sizeof(wchar_t));
+ buffer = (wchar_t *)xmalloc(buffer_len * sizeof(wchar_t));
- switch (home_env) {
- case 1:
- /* HOME */
+ switch (home_type) {
+ case ENV_HOME:
GetEnvironmentVariableW(L"HOME", buffer, buffer_len);
break;
- case 2:
- /* HOMEDRIVE + HOMEPATH */
+ case ENV_DRIVEPATH:
len = GetEnvironmentVariableW(L"HOMEDRIVE", buffer, buffer_len);
GetEnvironmentVariableW(L"HOMEPATH", buffer + len, buffer_len - len);
break;
- case 3:
- /* USERPROFILE */
+ case ENV_USERPROFILE:
GetEnvironmentVariableW(L"USERPROFILE", buffer, buffer_len);
break;
default:
break;
}
- if (home_env) {
- /* sanitize backslashes with forwardslashes */
- replace_wchar(buffer, L'\\', L'/');
-
- return buffer;
- }
+ /* sanitize backslashes with forwardslashes */
+ replace_wchar(buffer, L'\\', L'/');
- return NULL;
+ return buffer;
}
/* Remove trailing invalid ':$DATA' of the path. */