Work around apparent bug in lsof 4.88's -F output format.

This commit is contained in:
Joey Hess 2014-11-12 18:00:40 -04:00
parent 03edf308a3
commit 63fa5c0782
4 changed files with 54 additions and 5 deletions

View file

@ -93,11 +93,15 @@ parseFormatted s = bundle $ go [] $ lines s
_ -> parsefail
parsefiles c [] = (c, [])
parsefiles c (l:ls) = case splitnull l of
['a':mode, 'n':file, ""] ->
parsefiles ((file, parsemode mode):c) ls
(('p':_):_) -> (c, l:ls)
_ -> parsefail
parsefiles c (l:ls) = parsefiles' c (splitnull l) l ls
parsefiles' c ['a':mode, 'n':file, ""] _ ls =
parsefiles ((file, parsemode mode):c) ls
parsefiles' c (('p':_):_) l ls = (c, l:ls)
-- Some buggy versions of lsof emit a f field
-- that was not requested, so ignore it.
parsefiles' c (('f':_):rest) l ls = parsefiles' c rest l ls
parsefiles' _ _ _ _ = parsefail
parsemode ('r':_) = OpenReadOnly
parsemode ('w':_) = OpenWriteOnly