Merge pull request #96 from allenluce/zero-link-count
Add a case to catch Unix-like but 0 link count list line
This commit is contained in:
commit
a05056b3ca
24
parse.go
24
parse.go
@ -13,6 +13,7 @@ var listLineParsers = []func(line string) (*Entry, error){
|
|||||||
parseRFC3659ListLine,
|
parseRFC3659ListLine,
|
||||||
parseLsListLine,
|
parseLsListLine,
|
||||||
parseDirListLine,
|
parseDirListLine,
|
||||||
|
parseHostedFTPLine,
|
||||||
}
|
}
|
||||||
|
|
||||||
var dirTimeFormats = []string{
|
var dirTimeFormats = []string{
|
||||||
@ -99,7 +100,7 @@ func parseLsListLine(line string) (*Entry, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err := e.setSize(fields[2]); err != nil {
|
if err := e.setSize(fields[2]); err != nil {
|
||||||
return nil, err
|
return nil, errUnsupportedListLine
|
||||||
}
|
}
|
||||||
if err := e.setTime(fields[4:7]); err != nil {
|
if err := e.setTime(fields[4:7]); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -180,6 +181,27 @@ func parseDirListLine(line string) (*Entry, error) {
|
|||||||
return e, nil
|
return e, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// parseHostedFTPLine parses a directory line in the non-standard format used
|
||||||
|
// by hostedftp.com
|
||||||
|
// -r-------- 0 user group 65222236 Feb 24 00:39 UABlacklistingWeek8.csv
|
||||||
|
// (The link count is inexplicably 0)
|
||||||
|
func parseHostedFTPLine(line string) (*Entry, error) {
|
||||||
|
// Has the first field a length of 10 bytes?
|
||||||
|
if strings.IndexByte(line, ' ') != 10 {
|
||||||
|
return nil, errUnsupportedListLine
|
||||||
|
}
|
||||||
|
|
||||||
|
scanner := newScanner(line)
|
||||||
|
fields := scanner.NextFields(9)
|
||||||
|
if fields[1] == "0" { // Set link count to 1 and attempt to parse as Unix.
|
||||||
|
fields[1] = "1"
|
||||||
|
newLine := strings.Join(fields, " ")
|
||||||
|
return parseLsListLine(newLine)
|
||||||
|
}
|
||||||
|
return nil, errUnsupportedListLine
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// parseListLine parses the various non-standard format returned by the LIST
|
// parseListLine parses the various non-standard format returned by the LIST
|
||||||
// FTP command.
|
// FTP command.
|
||||||
func parseListLine(line string) (*Entry, error) {
|
func parseListLine(line string) (*Entry, error) {
|
||||||
|
@ -56,6 +56,9 @@ var listTests = []line{
|
|||||||
{"drwxr-xr-x 3 110 1002 3 Dec 02 2009 spaces dir name", "spaces dir name", 0, EntryTypeFolder, time.Date(2009, time.December, 2, 0, 0, 0, 0, time.UTC)},
|
{"drwxr-xr-x 3 110 1002 3 Dec 02 2009 spaces dir name", "spaces dir name", 0, EntryTypeFolder, time.Date(2009, time.December, 2, 0, 0, 0, 0, time.UTC)},
|
||||||
{"-rwxr-xr-x 3 110 1002 1234567 Dec 02 2009 file name", "file name", 1234567, EntryTypeFile, time.Date(2009, time.December, 2, 0, 0, 0, 0, time.UTC)},
|
{"-rwxr-xr-x 3 110 1002 1234567 Dec 02 2009 file name", "file name", 1234567, EntryTypeFile, time.Date(2009, time.December, 2, 0, 0, 0, 0, time.UTC)},
|
||||||
{"-rwxr-xr-x 3 110 1002 1234567 Dec 02 2009 foo bar ", " foo bar ", 1234567, EntryTypeFile, time.Date(2009, time.December, 2, 0, 0, 0, 0, time.UTC)},
|
{"-rwxr-xr-x 3 110 1002 1234567 Dec 02 2009 foo bar ", " foo bar ", 1234567, EntryTypeFile, time.Date(2009, time.December, 2, 0, 0, 0, 0, time.UTC)},
|
||||||
|
|
||||||
|
// Odd link count from hostedftp.com
|
||||||
|
{"-r-------- 0 user group 65222236 Feb 24 00:39 RegularFile", "RegularFile", 65222236, EntryTypeFile, time.Date(thisYear, time.February, 24, 0, 39, 0, 0, time.UTC)},
|
||||||
}
|
}
|
||||||
|
|
||||||
// Not supported, we expect a specific error message
|
// Not supported, we expect a specific error message
|
||||||
|
Loading…
Reference in New Issue
Block a user