Added reliable way for finding out if an entry is a directory for ms-dos and unix container creator's systems.

This commit is contained in:
Timofey Solomko
2017-05-30 21:19:16 +03:00
parent 0714353387
commit 97566f3e2a
+8 -1
View File
@@ -81,7 +81,14 @@ public class ZipEntry: ContainerEntry {
Particularly, it is true if size of data is 0 and last character of entry's name is '/'.
*/
public var isDirectory: Bool {
return self.size == 0 && self.name.characters.last == "/"
let hostSystem = (cdEntry.versionMadeBy & 0xFF00) >> 8
if hostSystem == 0 || hostSystem == 3 { // MS-DOS or UNIX case.
// In both of this cases external file attributes indicate if this is a directory.
// This is indicated by a special bit in the lowest byte of attributes.
return cdEntry.externalFileAttributes & 0x10 != 0
} else {
return size == 0 && name.characters.last == "/"
}
}
/**