Skip to content

Commit 0b130bc

Browse files
committed
fix parseEntry#parsers.msdos bug,when dir name is numbers,it will be read as file
1 parent 6412199 commit 0b130bc

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
.DS_Store
12
.idea
23
node_modules
34
reports

src/parser.js

+15-7
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,13 @@ var RE_UnixEntry = new RegExp(
5252
var RE_DOSEntry = new RegExp(
5353
"(\\S+)\\s+(\\S+)\\s+" +
5454
"(<DIR>)?\\s*" +
55+
// "([0-9]+)?\\s*" +
56+
"(\\S.*)"
57+
);
58+
// fix: RE_DOSEntry2 for dir is numbers
59+
var RE_DOSEntry2 = new RegExp(
60+
"(\\S+)\\s+(\\S+)\\s+" +
61+
// "(<DIR>)?\\s*" +
5562
"([0-9]+)?\\s*" +
5663
"(\\S.*)"
5764
);
@@ -265,7 +272,9 @@ var parsers = {
265272
},
266273

267274
msdos: function(entry) {
268-
var group = entry.match(RE_DOSEntry);
275+
var isDir = (entry.indexOf('<DIR>') > 0);
276+
var regx = isDir ? RE_DOSEntry : RE_DOSEntry2;
277+
var group = entry.match(regx);
269278
var type;
270279

271280
if (!group) {
@@ -278,19 +287,18 @@ var parsers = {
278287

279288
var time = group[2].replace(/(\d{2}):(\d{2})([AP]M)/, replacer);
280289
var date = new Date(group[1] + " " + time).getTime();
281-
var dirString = group[3];
282-
var size = group[4];
283-
var name = group[5];
290+
var size = group[3] || 0;
291+
var name = group[4];
284292

285293
if (null == name || name === "." || name === "..") {
286294
return null;
287295
}
288296

289-
if (dirString === "<DIR>") {
297+
if (isDir) {
290298
type = exports.nodeTypes.DIRECTORY_TYPE;
291299
size = 0;
292-
}
293-
else {
300+
301+
}else {
294302
type = exports.nodeTypes.FILE_TYPE;
295303
}
296304

0 commit comments

Comments
 (0)