projects
/
hs-java.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Cleanup, minor updates.
[hs-java.git]
/
Java
/
JAR
/
Archive.hs
diff --git
a/Java/JAR/Archive.hs
b/Java/JAR/Archive.hs
index d84be49c35034b2b05d7c19e13bb7b3df8f627c3..0963a156eb61250a0cdfdd19c91fb7f45ec7bcc3 100644
(file)
--- a/
Java/JAR/Archive.hs
+++ b/
Java/JAR/Archive.hs
@@
-1,8
+1,6
@@
-- | This module defines functions to read Java JAR files.
module Java.JAR.Archive where
-- | This module defines functions to read Java JAR files.
module Java.JAR.Archive where
-import Control.Monad.Trans
-import qualified Control.Monad.State as St
import qualified Codec.Archive.LibZip as Zip
import Data.Binary
import qualified Data.ByteString.Lazy as B
import qualified Codec.Archive.LibZip as Zip
import Data.Binary
import qualified Data.ByteString.Lazy as B
@@
-12,9
+10,14
@@
import Java.ClassPath.Common
import JVM.ClassFile
import JVM.Converter
import JVM.ClassFile
import JVM.Converter
+readJAREntry :: (Enum a) => FilePath -> String -> IO (Maybe [a])
+readJAREntry jarfile path = do
+ Zip.catchZipError (Just `fmap` (Zip.withArchive [] jarfile $ Zip.fileContents [] path))
+ (\_ -> return Nothing)
+
-- | Read all entires from JAR file
-- | Read all entires from JAR file
-readJAR :: FilePath -> IO [Tree CPEntry]
-readJAR jarfile = do
+read
All
JAR :: FilePath -> IO [Tree CPEntry]
+read
All
JAR jarfile = do
files <- Zip.withArchive [] jarfile $ Zip.fileNames []
return $ mapF (NotLoadedJAR jarfile) (buildTree files)
files <- Zip.withArchive [] jarfile $ Zip.fileNames []
return $ mapF (NotLoadedJAR jarfile) (buildTree files)
@@
-25,11
+28,3
@@
readFromJAR jarfile path = do
let bstr = B.pack content
return $ classFile2Direct (decode bstr)
let bstr = B.pack content
return $ classFile2Direct (decode bstr)
--- | Add given JAR file to ClassPath
-addJAR :: FilePath -> ClassPath ()
-addJAR jarfile = do
- classes <- liftIO $ readJAR jarfile
- cp <- St.get
- let cp' = merge $ cp ++ classes
- St.put cp'
-