OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 part of dart.io; | 5 part of dart.io; |
6 | 6 |
7 class _Path implements Path { | 7 class _Path implements Path { |
8 final String _path; | 8 final String _path; |
9 final bool isWindowsShare; | 9 final bool isWindowsShare; |
10 | 10 |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 segs[0] = null; // Faster than removeRange(). | 127 segs[0] = null; // Faster than removeRange(). |
128 } else { // A canonical relative path may start with .. segments. | 128 } else { // A canonical relative path may start with .. segments. |
129 for (int pos = 0; | 129 for (int pos = 0; |
130 pos < segs.length && segs[pos] == '..'; | 130 pos < segs.length && segs[pos] == '..'; |
131 ++pos) { | 131 ++pos) { |
132 segs[pos] = null; | 132 segs[pos] = null; |
133 } | 133 } |
134 } | 134 } |
135 if (segs.last == '') segs.removeLast(); // Path ends with /. | 135 if (segs.last == '') segs.removeLast(); // Path ends with /. |
136 // No remaining segments can be ., .., or empty. | 136 // No remaining segments can be ., .., or empty. |
137 return !segs.some((s) => s == '' || s == '.' || s == '..'); | 137 return !segs.any((s) => s == '' || s == '.' || s == '..'); |
138 } | 138 } |
139 | 139 |
140 Path makeCanonical() { | 140 Path makeCanonical() { |
141 bool isAbs = isAbsolute; | 141 bool isAbs = isAbsolute; |
142 List segs = segments(); | 142 List segs = segments(); |
143 String drive; | 143 String drive; |
144 if (isAbs && | 144 if (isAbs && |
145 !segs.isEmpty && | 145 !segs.isEmpty && |
146 segs[0].length == 2 && | 146 segs[0].length == 2 && |
147 segs[0][1] == ':') { | 147 segs[0][1] == ':') { |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
253 while (pos > 0 && _path[pos - 1] == '/') --pos; | 253 while (pos > 0 && _path[pos - 1] == '/') --pos; |
254 var dirPath = (pos > 0) ? _path.substring(0, pos) : '/'; | 254 var dirPath = (pos > 0) ? _path.substring(0, pos) : '/'; |
255 return new _Path._internal(dirPath, isWindowsShare); | 255 return new _Path._internal(dirPath, isWindowsShare); |
256 } | 256 } |
257 | 257 |
258 String get filename { | 258 String get filename { |
259 int pos = _path.lastIndexOf('/'); | 259 int pos = _path.lastIndexOf('/'); |
260 return _path.substring(pos + 1); | 260 return _path.substring(pos + 1); |
261 } | 261 } |
262 } | 262 } |
OLD | NEW |