diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2018-05-25 06:51:55 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2018-05-25 06:51:55 (GMT) |
commit | 66ef201ad7df46f74bb93beaec841a5c8a0b1136 (patch) | |
tree | 4024e2102286cc38d55f91b2879e86aec6257b9e | |
parent | edb38932e8f071b1326515067d41bc060807dec2 (diff) | |
parent | 263de53394ce997af74f20135843ba8ef2e3b16e (diff) | |
download | tcl-66ef201ad7df46f74bb93beaec841a5c8a0b1136.zip tcl-66ef201ad7df46f74bb93beaec841a5c8a0b1136.tar.gz tcl-66ef201ad7df46f74bb93beaec841a5c8a0b1136.tar.bz2 |
merge 8.6
-rw-r--r-- | tests/winFCmd.test | 2 | ||||
-rw-r--r-- | win/tclWinFile.c | 22 |
2 files changed, 13 insertions, 11 deletions
diff --git a/tests/winFCmd.test b/tests/winFCmd.test index e9886dc..1767712 100644 --- a/tests/winFCmd.test +++ b/tests/winFCmd.test @@ -1061,7 +1061,7 @@ test winFCmd-12.6.2 {ConvertFileNameFormat: absolute path with drive (in temp fo } -constraints {win} -body { createfile $::env(TEMP)/td1 {} string equal [string tolower [file attributes $::env(TEMP)/td1 -longname]] \ - [string tolower [file normalize $::env(TEMP)]/td1]] + [string tolower [file normalize $::env(TEMP)]/td1] } -cleanup { file delete -force -- $::env(TEMP)/td1 } -result 1 diff --git a/win/tclWinFile.c b/win/tclWinFile.c index 7693f06..bd4f13b 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); |