|  | @@ -151,12 +151,13 @@ wstring normalize(wstring path) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    static const wstring dot(L".");
 | 
	
		
			
				|  |  |    static const wstring dotdot(L"..");
 | 
	
		
			
				|  |  | +  const wchar_t *p = path.c_str();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    std::vector<wstring> segments;
 | 
	
		
			
				|  |  |    int segment_start = -1;
 | 
	
		
			
				|  |  |    // Find the path segments in `path` (separated by "/").
 | 
	
		
			
				|  |  |    for (int i = 0;; ++i) {
 | 
	
		
			
				|  |  | -    if (!is_separator(path[i]) && path[i] != L'\0') {
 | 
	
		
			
				|  |  | +    if (!is_separator(p[i]) && p[i] != L'\0') {
 | 
	
		
			
				|  |  |        // The current character does not end a segment, so start one unless it's
 | 
	
		
			
				|  |  |        // already started.
 | 
	
		
			
				|  |  |        if (segment_start < 0) {
 | 
	
	
		
			
				|  | @@ -165,7 +166,7 @@ wstring normalize(wstring path) {
 | 
	
		
			
				|  |  |      } else if (segment_start >= 0 && i > segment_start) {
 | 
	
		
			
				|  |  |        // The current character is "/" or "\0", so this ends a segment.
 | 
	
		
			
				|  |  |        // Add that to `segments` if there's anything to add; handle "." and "..".
 | 
	
		
			
				|  |  | -      wstring segment(path, segment_start, i - segment_start);
 | 
	
		
			
				|  |  | +      wstring segment(p, segment_start, i - segment_start);
 | 
	
		
			
				|  |  |        segment_start = -1;
 | 
	
		
			
				|  |  |        if (segment == dotdot) {
 | 
	
		
			
				|  |  |          if (!segments.empty() &&
 | 
	
	
		
			
				|  | @@ -176,7 +177,7 @@ wstring normalize(wstring path) {
 | 
	
		
			
				|  |  |          segments.push_back(segment);
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    if (path[i] == L'\0') {
 | 
	
		
			
				|  |  | +    if (p[i] == L'\0') {
 | 
	
		
			
				|  |  |        break;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
	
		
			
				|  | @@ -199,7 +200,7 @@ wstring normalize(wstring path) {
 | 
	
		
			
				|  |  |      result << segments[i];
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    // Preserve trailing separator if the input contained it.
 | 
	
		
			
				|  |  | -  if (!path.empty() && is_separator(path[path.size() - 1])) {
 | 
	
		
			
				|  |  | +  if (!path.empty() && is_separator(p[path.size() - 1])) {
 | 
	
		
			
				|  |  |      result << L'\\';
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    return result.str();
 |