diff --git a/lib/path.js b/lib/path.js index aabb80df98..768c4c1e5b 100644 --- a/lib/path.js +++ b/lib/path.js @@ -348,12 +348,17 @@ if (isWindows) { // posix version exports.normalize = function(path) { var isAbsolute = exports.isAbsolute(path), - trailingSlash = path.substr(-1) === '/'; + trailingSlash = path[path.length - 1] === '/', + segments = path.split('/'), + nonEmptySegments = []; // Normalize the path - path = normalizeArray(path.split('/').filter(function(p) { - return !!p; - }), !isAbsolute).join('/'); + for (var i = 0; i < segments.length; i++) { + if (segments[i]) { + nonEmptySegments.push(segments[i]); + } + } + path = normalizeArray(nonEmptySegments, !isAbsolute).join('/'); if (!path && !isAbsolute) { path = '.'; @@ -372,13 +377,21 @@ if (isWindows) { // posix version exports.join = function() { - var paths = Array.prototype.slice.call(arguments, 0); - return exports.normalize(paths.filter(function(p, index) { - if (!util.isString(p)) { + var path = ''; + for (var i = 0; i < arguments.length; i++) { + var segment = arguments[i]; + if (!util.isString(segment)) { throw new TypeError('Arguments to path.join must be strings'); } - return p; - }).join('/')); + if (segment) { + if (!path) { + path += segment; + } else { + path += '/' + segment; + } + } + } + return exports.normalize(path); };