summaryrefslogtreecommitdiffstats
path: root/win/tclWinFile.c
diff options
context:
space:
mode:
authorsebres <sebres@users.sourceforge.net>2018-05-24 20:36:32 (GMT)
committersebres <sebres@users.sourceforge.net>2018-05-24 20:36:32 (GMT)
commit263de53394ce997af74f20135843ba8ef2e3b16e (patch)
treefa047a6442462db01dbddd25c8fffc4f188f94c2 /win/tclWinFile.c
parent7672af7212bf3921fe55e99fe298e720d2d5b8d9 (diff)
parenta410c0d8d504868b1dbdcaf70a521859e32327fd (diff)
downloadtcl-263de53394ce997af74f20135843ba8ef2e3b16e.zip
tcl-263de53394ce997af74f20135843ba8ef2e3b16e.tar.gz
tcl-263de53394ce997af74f20135843ba8ef2e3b16e.tar.bz2
merge 8.5, conflicts resolved (rewritten without winapi-stubs)
Diffstat (limited to 'win/tclWinFile.c')
-rw-r--r--win/tclWinFile.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/win/tclWinFile.c b/win/tclWinFile.c
index 9afe0a9..fae6b6d 100644
--- a/win/tclWinFile.c
+++ b/win/tclWinFile.c
@@ -1436,13 +1436,13 @@ TclpGetUserHome(
Tcl_DString *bufferPtr) /* Uninitialized or free DString filled with
* name of user's home directory. */
{
- const char *result = NULL;
+ char *result = NULL;
USER_INFO_1 *uiPtr, **uiPtrPtr = &uiPtr;
Tcl_DString ds;
int nameLen = -1;
int badDomain = 0;
char *domain;
- WCHAR *wName, *wHomeDir, *wDomain, **wDomainPtr = &wDomain;
+ WCHAR *wName, *wHomeDir, *wDomain;
WCHAR buf[MAX_PATH];
Tcl_DStringInit(bufferPtr);
@@ -1451,7 +1451,7 @@ TclpGetUserHome(
if (domain != NULL) {
Tcl_DStringInit(&ds);
wName = Tcl_UtfToUniCharDString(domain + 1, -1, &ds);
- badDomain = NetGetDCName(NULL, wName, (LPBYTE *) wDomainPtr);
+ badDomain = NetGetDCName(NULL, wName, (LPBYTE *) &wDomain);
Tcl_DStringFree(&ds);
nameLen = domain - name;
}
@@ -1459,25 +1459,27 @@ TclpGetUserHome(
Tcl_DStringInit(&ds);
wName = Tcl_UtfToUniCharDString(name, nameLen, &ds);
if (NetUserGetInfo(wDomain, wName, 1, (LPBYTE *) uiPtrPtr) == 0) {
+ DWORD i, size = MAX_PATH;
wHomeDir = uiPtr->usri1_home_dir;
if ((wHomeDir != NULL) && (wHomeDir[0] != L'\0')) {
- Tcl_UniCharToUtfDString(wHomeDir, lstrlenW(wHomeDir),
+ size = lstrlenW(wHomeDir);
+ Tcl_UniCharToUtfDString(wHomeDir, size,
bufferPtr);
} else {
/*
* User exists but has no home dir. Return
* "{GetProfilesDirectory}/<user>".
*/
- DWORD i, size = MAX_PATH;
GetProfilesDirectoryW(buf, &size);
- for (i = 0; i < size; ++i){
- if (buf[i] == '\\') buf[i] = '/';
- }
Tcl_UniCharToUtfDString(buf, size-1, bufferPtr);
- Tcl_DStringAppend(bufferPtr, "/", -1);
- Tcl_DStringAppend(bufferPtr, name, -1);
+ Tcl_DStringAppend(bufferPtr, "/", 1);
+ Tcl_DStringAppend(bufferPtr, name, nameLen);
}
result = Tcl_DStringValue(bufferPtr);
+ /* be sure we returns normalized path */
+ for (i = 0; i < size; ++i){
+ if (result[i] == '\\') result[i] = '/';
+ }
NetApiBufferFree((void *) uiPtr);
}
Tcl_DStringFree(&ds);