Check-in [e895b53905]
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:[f34cf83dd0] An optimization was being taken in a case where it produced the wrong result, failing to collapse multiple /// into /. Testing on Windows where path expectations may vary would be a good idea, but since this is just an optimization avoidance, I suspect we're ok.
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: e895b539059b7a327ec803f7edc9a916ef63d73d
User & Date: dgp 2017-04-28 17:57:34.219
References
2017-04-29
11:05 Ticket [f9fe90d0fa] Inconsistent handling of leading // status still Open with 3 other changes artifact: 36ecfc49e7 user: aspect
Context
2017-04-29
14:41
Make trunk compile on MSVC (problem was: warning C4554: '&' : check operator precedence for possible... check-in: d701ee871e user: fvogel tags: trunk
11:04
[f9fe90d0fa]: more path normalization in TclNewFSPathObj Leaf check-in: 27bac5b2c6 user: aspect tags: bug-f9fe90d0fa
2017-04-28
17:57
[f34cf83dd0] An optimization was being taken in a case where it produced the wrong result, failing t... check-in: e895b53905 user: dgp tags: trunk
17:52
[f34cf83dd0] An optimization was being taken in a case where it produced the wrong result, failing t... check-in: e015bfe72f user: dgp tags: core-8-6-branch
17:46
Test for [f34cf83dd0]. check-in: 769ae9c349 user: dgp tags: trunk
Changes
Unified Diff Ignore Whitespace Patch
Changes to generic/tclPathObj.c.
944
945
946
947
948
949
950

951
952
953
954
955
956
957
			}
			return tailObj;
		    }
		}
	    }
	}
	strElt = TclGetStringFromObj(elt, &strEltLen);

	type = TclGetPathType(elt, &fsPtr, &driveNameLength, &driveName);
	if (type != TCL_PATH_RELATIVE) {
	    /*
	     * Zero out the current result.
	     */

	    if (res != NULL) {







>







944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
			}
			return tailObj;
		    }
		}
	    }
	}
	strElt = TclGetStringFromObj(elt, &strEltLen);
	driveNameLength = 0;
	type = TclGetPathType(elt, &fsPtr, &driveNameLength, &driveName);
	if (type != TCL_PATH_RELATIVE) {
	    /*
	     * Zero out the current result.
	     */

	    if (res != NULL) {
999
1000
1001
1002
1003
1004
1005






1006
1007
1008
1009
1010
1011
1012

	    if (tclPlatform == TCL_PLATFORM_WINDOWS) {
		if (strchr(strElt, '\\') != NULL) {
		    goto noQuickReturn;
		}
	    }
	    ptr = strElt;






	    while (*ptr != '\0') {
		if (*ptr == '/' && (ptr[1] == '/' || ptr[1] == '\0')) {
		    /*
		     * We have a repeated file separator, which means the path
		     * is not in normalized form
		     */








>
>
>
>
>
>







1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019

	    if (tclPlatform == TCL_PLATFORM_WINDOWS) {
		if (strchr(strElt, '\\') != NULL) {
		    goto noQuickReturn;
		}
	    }
	    ptr = strElt;
	    /* [Bug f34cf83dd0] */
	    if (driveNameLength > 0) {
		if (ptr[0] == '/' && ptr[-1] == '/') {
		    goto noQuickReturn;
		}
	    }
	    while (*ptr != '\0') {
		if (*ptr == '/' && (ptr[1] == '/' || ptr[1] == '\0')) {
		    /*
		     * We have a repeated file separator, which means the path
		     * is not in normalized form
		     */