[Pkg-haskell-commits] [SCM] haskell-testpack branch, master, updated. debian/1.0.2-1-4-gb0d6b36

John Goerzen jgoerzen at complete.org
Fri Apr 23 15:03:55 UTC 2010


The following commit has been merged in the master branch:
commit 5338f156f2c4e44a4cc35a19304cea6eadcef5cd
Author: John Goerzen <jgoerzen at complete.org>
Date:   Tue Oct 11 02:05:01 2005 +0100

    Basic tar header parsing written

diff --git a/MissingH/FileArchive/Tar.hs b/MissingH/FileArchive/Tar.hs
index 74e925b..093f516 100644
--- a/MissingH/FileArchive/Tar.hs
+++ b/MissingH/FileArchive/Tar.hs
@@ -59,51 +59,3 @@ instance Error GZipError where
     noMsg = UnknownError ""
     strMsg = UnknownError
 
-{- | The data structure representing the Tar header.  This occurs
-at the beginning of each 'Section'. -}
-data Header = 
-    UStar {
-           name :: String,
-           mode :: Int,
-           uid :: Int,
-           gid :: Int,
-           size :: Integer,
-           mtime :: Integer,
-           chksum :: Word32,
-           typeflag :: Char,
-           linkname :: String,
-           magic :: String,
-           version :: String,
-           uname :: String,
-           gname :: String,
-           devmajor :: Integer,
-           devminor :: Integer,
-           prefix :: String}
-    deriving (Eq, Show)
-
-parseHeader :: String -> (String, String)
-parseHeader = 
-    runState $
-       do name <- (grab 100 >>= rchopstr)
-          mode <- (grab 8 >>= rreadoct)
-          uid <- (grab 8 >>= rreadoct)
-          gid <- (grab 8 >>= rreadoct)
-          size <- (grab 8 >>= rreadoct)
-          mtime <- (grab 12 >>= rreadoct)
-          chksum <- (grab 8 >>= rreadoct)
-          typeflag <- grab 1
-          linkname <- (grab 100 >>= rchopstr)
-          magic <- (grab 6 >>= rchopstr)
-          version <- grab 2
-          uname <- (grab 32 >>= rchopstr)
-          gname <- (grab 32 >>= rchopstr)
-          devmajor <- (grab 8 >>= rreadoct)
-          devminor <- (grab 8 >>= rreadoct)
-          prefix <- (grab 155 >>= rchopstr)
-          return "foo"
-          
-    where chopstr = takeWhile (\c -> c /= '\0')
-          rchopstr = return . chopstr
-          chopsstr = takeWhile (\c -> c /= ' ') . chopstr
-          readoct = fst . head . readOct . chopsstr
-          rreadoct = return . readoct
\ No newline at end of file
diff --git a/MissingH/FileArchive/Tar/HeaderParser.hs b/MissingH/FileArchive/Tar/HeaderParser.hs
index 3900d6b..67f601e 100644
--- a/MissingH/FileArchive/Tar/HeaderParser.hs
+++ b/MissingH/FileArchive/Tar/HeaderParser.hs
@@ -63,14 +63,36 @@ data Header =
            prefix :: String}
     deriving (Eq, Show)
 
-parseHeader :: CharParser st ()
-parseHeader =
-    do name <- (slurp 100 >>= rchopstr)
-       return ()
-    where slurp n = count n anyChar
+parseUStarHeader :: CharParser st Header
+parseUStarHeader =
+    do name <- (grab 100 >>= rchopstr)
+       mode <- (grab 8 >>= rreadoct)
+       uid <- (grab 8 >>= rreadoct)
+       gid <- (grab 8 >>= rreadoct)
+       size <- (grab 8 >>= rreadoct)
+       mtime <- (grab 12 >>= rreadoct)
+       chksum <- (grab 8 >>= rreadoct)
+       typeflag <- anyChar
+       linkname <- (grab 100 >>= rchopstr)
+       string "ustar\0"         -- Magic
+       string "00"              -- Version
+       uname <- (grab 32 >>= rchopstr)
+       gname <- (grab 32 >>= rchopstr)
+       devmajor <- (grab 8 >>= rreadoct)
+       devminor <- (grab 8 >>= rreadoct)
+       prefix <- (grab 155 >>= rchopstr)
+
+       return $ UStar  {name = name, mode = mode, uid = uid, gid = gid,
+                        size = size, mtime = mtime, chksum = chksum,
+                        typeflag = typeflag, linkname = linkname,
+                        magic = "", version = "",
+                        uname = uname, gname = gname, devmajor = devmajor,
+                        devminor = devminor, prefix = prefix}
+    where grab n = count n anyChar
           chopstr = takeWhile (\c -> c /= '\0')
           rchopstr = return . chopstr
           chopsstr = takeWhile (\c -> c /= ' ') . chopstr
-
---          readoct = fst . head . readOct . chopsstr
---         rreadoct = return . readoct
\ No newline at end of file
+          readoct :: (Num a) => String -> a
+          readoct = fst . head . readOct . chopsstr
+          rreadoct :: (Num a, Monad m) => String -> m a
+          rreadoct = return . readoct
\ No newline at end of file

-- 
haskell-testpack



More information about the Pkg-haskell-commits mailing list