npm / fstream

Advanced FS Streaming for Node
ISC License
208 stars 43 forks source link

fstream ignores directories with long paths on windows #30

Open sdarnell opened 9 years ago

sdarnell commented 9 years ago

When piping fstream.Reader() into tar.Pack() fstream ignores long pathnames on windows.

The calling code looks like this, but the problem seems to be on fstream side of the pipe, because I added a filter to log entries as they go by and nothing comes out.

  return fstream.Reader({ path: dirPath, type: 'Directory' }).pipe(
    tar.Pack({ noProprietary: true })).pipe(zlib.createGzip());

To be more precise, I think it is directories that get ignored.

Looking in lib/reader.js@104 and there is some code (legacy?) which tries to convert paths into the UNC form \\?\... when the paths hit 260 characters.

Firstly I think this code is probably redundant now as my understanding is that libuv handles the mapping to long names.

But what seems to be happening is that the code is called twice (not sure quite why), and performs the conversion twice - incorrectly. So I end up with invalid paths starting \\?\\\_\c:\ The underscore comes from what was previously a ?

My guess is that the whole win32 if at line 104 should be removed.

sdarnell commented 9 years ago

There's similar code in writer.js, and I suspect that if these bits are removed, much of the _path stuff can probably removed again too (this code was added in November 2011).

avital commented 9 years ago

Pull request in #42. Thanks @sdarnell for the find!