diff --git a/Makefile b/Makefile
index 816f5bd..668ca8f 100644
--- a/Makefile
+++ b/Makefile
@@ -1,86 +1,93 @@
-
-include Makefile.common
-
-MVN:=mvn
-
-all: snappy
-
-SNAPPY_OUT:=$(TARGET)/$(snappy)-$(os_arch)
-SNAPPY_ARCHIVE:=$(TARGET)/snappy-$(VERSION).tar.gz
-SNAPPY_CC:=snappy-sinksource.cc snappy-stubs-internal.cc snappy.cc
-SNAPPY_SRC_DIR:=$(TARGET)/snappy-$(VERSION)
-SNAPPY_SRC:=$(addprefix $(SNAPPY_SRC_DIR)/,$(SNAPPY_CC))
-SNAPPY_OBJ:=$(addprefix $(SNAPPY_OUT)/,$(patsubst %.cc,%.o,$(SNAPPY_CC)) SnappyNative.o)
-
-SNAPPY_UNPACKED:=$(TARGET)/snappy-extracted.log
-
-CXXFLAGS:=$(CXXFLAGS) -I$(SNAPPY_SRC_DIR)
-
-$(SNAPPY_ARCHIVE):
- @mkdir -p $(@D)
- curl -o$@ http://snappy.googlecode.com/files/snappy-$(VERSION).tar.gz
-
-$(SNAPPY_UNPACKED): $(SNAPPY_ARCHIVE)
- tar xvfz $< -C $(TARGET)
- touch $@
-
-jni-header: $(SRC)/org/xerial/snappy/SnappyNative.h
-
-
-$(SRC)/org/xerial/snappy/SnappyNative.h: $(SRC)/org/xerial/snappy/SnappyNative.java
- $(JAVAH) -classpath $(TARGET)/classes -o $@ org.xerial.snappy.SnappyNative
-
-$(SNAPPY_SRC): $(SNAPPY_UNPACKED)
-
-$(SNAPPY_OUT)/%.o : $(SNAPPY_SRC_DIR)/%.cc
- @mkdir -p $(@D)
- $(CXX) $(CXXFLAGS) -c $< -o $@
-
-$(SNAPPY_OUT)/SnappyNative.o : $(SRC)/org/xerial/snappy/SnappyNative.cpp $(SRC)/org/xerial/snappy/SnappyNative.h
- @mkdir -p $(@D)
- $(CXX) $(CXXFLAGS) -c $< -o $@
-
-
-$(SNAPPY_OUT)/$(LIBNAME): $(SNAPPY_OBJ)
- $(CXX) $(CXXFLAGS) -o $@ $+ $(LINKFLAGS)
- $(STRIP) $@
-
-clean-native:
- rm -rf $(SNAPPY_OUT)
-
-clean:
- rm -rf $(TARGET)
-
-NATIVE_DIR:=src/main/resources/org/xerial/snappy/native/$(OS_NAME)/$(OS_ARCH)
-NATIVE_TARGET_DIR:=$(TARGET)/classes/org/xerial/snappy/native/$(OS_NAME)/$(OS_ARCH)
-NATIVE_DLL:=$(NATIVE_DIR)/$(LIBNAME)
-
-snappy-jar-version:=snappy-java-$(shell $(JAVA) -jar lib/silk-weaver.jar find 'project(artifactId, version)' pom.xml | grep snappy-java | awk '{ print $$2; }')
-
-native: $(SNAPPY_UNPACKED) $(NATIVE_DLL)
-snappy: native $(TARGET)/$(snappy-jar-version).jar
-
-$(NATIVE_DLL): $(SNAPPY_OUT)/$(LIBNAME)
- @mkdir -p $(@D)
- cp $< $@
- @mkdir -p $(NATIVE_TARGET_DIR)
- cp $< $(NATIVE_TARGET_DIR)/$(LIBNAME)
-
-
-$(TARGET)/$(snappy-jar-version).jar: native $(NATIVE_DLL)
- $(MVN) package -Dmaven.test.skip=true
-
-test: $(NATIVE_DLL)
- $(MVN) test
-
-win32:
- $(MAKE) native CXX=mingw32-g++ OS_NAME=Windows OS_ARCH=x86
-
-mac32:
- $(MAKE) native OS_NAME=Mac OS_ARCH=i386
-
-linux32:
- $(MAKE) native OS_NAME=Linux OS_ARCH=i386
-
-clean-native-linux32:
- $(MAKE) clean-native OS_NAME=Linux OS_ARCH=i386
+
+include Makefile.common
+
+MVN:=mvn
+
+all: snappy
+
+SNAPPY_OUT:=$(TARGET)/$(snappy)-$(os_arch)
+SNAPPY_ARCHIVE:=$(TARGET)/snappy-$(VERSION).tar.gz
+SNAPPY_CC:=snappy-sinksource.cc snappy-stubs-internal.cc snappy.cc
+SNAPPY_SRC_DIR:=$(TARGET)/snappy-$(VERSION)
+SNAPPY_SRC:=$(addprefix $(SNAPPY_SRC_DIR)/,$(SNAPPY_CC))
+SNAPPY_OBJ:=$(addprefix $(SNAPPY_OUT)/,$(patsubst %.cc,%.o,$(SNAPPY_CC)) SnappyNative.o)
+
+SNAPPY_UNPACKED:=$(TARGET)/snappy-extracted.log
+
+CXXFLAGS:=$(CXXFLAGS) -I$(SNAPPY_SRC_DIR)
+
+$(SNAPPY_ARCHIVE):
+ @mkdir -p $(@D)
+ curl -o$@ http://snappy.googlecode.com/files/snappy-$(VERSION).tar.gz
+
+$(SNAPPY_UNPACKED): $(SNAPPY_ARCHIVE)
+ tar xvfz $< -C $(TARGET)
+ touch $@
+
+jni-header: $(SRC)/org/xerial/snappy/SnappyNative.h
+
+
+$(SRC)/org/xerial/snappy/SnappyNative.h: $(SRC)/org/xerial/snappy/SnappyNative.java
+ $(JAVAH) -classpath $(TARGET)/classes -o $@ org.xerial.snappy.SnappyNative
+
+bytecode: src/main/resources/org/xerial/snappy/SnappyNativeLoader.bytecode
+
+src/main/resources/org/xerial/snappy/SnappyNativeLoader.bytecode: src/main/resources/org/xerial/snappy/SnappyNativeLoader.java
+ @mkdir -p $(TARGET)/temp
+ $(JAVAC) -source 1.5 -target 1.5 -d $(TARGET)/temp $<
+ cp $(TARGET)/temp/org/xerial/snappy/SnappyNativeLoader.class $@
+
+$(SNAPPY_SRC): $(SNAPPY_UNPACKED)
+
+$(SNAPPY_OUT)/%.o : $(SNAPPY_SRC_DIR)/%.cc
+ @mkdir -p $(@D)
+ $(CXX) $(CXXFLAGS) -c $< -o $@
+
+$(SNAPPY_OUT)/SnappyNative.o : $(SRC)/org/xerial/snappy/SnappyNative.cpp $(SRC)/org/xerial/snappy/SnappyNative.h
+ @mkdir -p $(@D)
+ $(CXX) $(CXXFLAGS) -c $< -o $@
+
+
+$(SNAPPY_OUT)/$(LIBNAME): $(SNAPPY_OBJ)
+ $(CXX) $(CXXFLAGS) -o $@ $+ $(LINKFLAGS)
+ $(STRIP) $@
+
+clean-native:
+ rm -rf $(SNAPPY_OUT)
+
+clean:
+ rm -rf $(TARGET)
+
+NATIVE_DIR:=src/main/resources/org/xerial/snappy/native/$(OS_NAME)/$(OS_ARCH)
+NATIVE_TARGET_DIR:=$(TARGET)/classes/org/xerial/snappy/native/$(OS_NAME)/$(OS_ARCH)
+NATIVE_DLL:=$(NATIVE_DIR)/$(LIBNAME)
+
+snappy-jar-version:=snappy-java-$(shell $(JAVA) -jar lib/silk-weaver.jar find 'project(artifactId, version)' pom.xml | grep snappy-java | awk '{ print $$2; }')
+
+native: $(SNAPPY_UNPACKED) $(NATIVE_DLL)
+snappy: native $(TARGET)/$(snappy-jar-version).jar
+
+$(NATIVE_DLL): $(SNAPPY_OUT)/$(LIBNAME)
+ @mkdir -p $(@D)
+ cp $< $@
+ @mkdir -p $(NATIVE_TARGET_DIR)
+ cp $< $(NATIVE_TARGET_DIR)/$(LIBNAME)
+
+
+$(TARGET)/$(snappy-jar-version).jar: native $(NATIVE_DLL)
+ $(MVN) package -Dmaven.test.skip=true
+
+test: $(NATIVE_DLL)
+ $(MVN) test
+
+win32:
+ $(MAKE) native CXX=mingw32-g++ OS_NAME=Windows OS_ARCH=x86
+
+mac32:
+ $(MAKE) native OS_NAME=Mac OS_ARCH=i386
+
+linux32:
+ $(MAKE) native OS_NAME=Linux OS_ARCH=i386
+
+clean-native-linux32:
+ $(MAKE) clean-native OS_NAME=Linux OS_ARCH=i386
diff --git a/pom.xml b/pom.xml
index f72344a..42ba6e0 100755
--- a/pom.xml
+++ b/pom.xml
@@ -232,12 +232,5 @@
jar
test
-
- org.javassist
- javassist
- 3.14.0-GA
- jar
- test
-
diff --git a/src/main/java/org/xerial/snappy/SnappyInputStream.java b/src/main/java/org/xerial/snappy/SnappyInputStream.java
index a99672e..c1a8e0a 100755
--- a/src/main/java/org/xerial/snappy/SnappyInputStream.java
+++ b/src/main/java/org/xerial/snappy/SnappyInputStream.java
@@ -61,10 +61,16 @@ public class SnappyInputStream extends InputStream
protected void readHeader() throws IOException {
byte[] header = new byte[SnappyCodec.headerSize()];
- int readBytes = in.read(header, 0, header.length);
+ int readBytes = 0;
+ while (readBytes < header.length) {
+ int ret = in.read(header, readBytes, header.length - readBytes);
+ if (ret == -1)
+ break;
+ readBytes += ret;
+ }
// Quick test of the header
- if (header[0] != SnappyCodec.MAGIC_HEADER[0]) {
+ if (readBytes < header.length || header[0] != SnappyCodec.MAGIC_HEADER[0]) {
// do the default uncompression
readFully(header, readBytes);
return;
diff --git a/src/main/resources/org/xerial/snappy/SnappyNativeLoader.bytecode b/src/main/resources/org/xerial/snappy/SnappyNativeLoader.bytecode
index 1fdc27e..93bdcce 100755
Binary files a/src/main/resources/org/xerial/snappy/SnappyNativeLoader.bytecode and b/src/main/resources/org/xerial/snappy/SnappyNativeLoader.bytecode differ
diff --git a/src/main/resources/org/xerial/snappy/SnappyNativeLoader.java b/src/main/resources/org/xerial/snappy/SnappyNativeLoader.java
new file mode 100755
index 0000000..1883166
--- /dev/null
+++ b/src/main/resources/org/xerial/snappy/SnappyNativeLoader.java
@@ -0,0 +1,59 @@
+/*--------------------------------------------------------------------------
+ * Copyright 2011 Taro L. Saito
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *--------------------------------------------------------------------------*/
+//--------------------------------------
+// XerialJ
+//
+// SnappyNativeLoader.java
+// Since: 2011/07/04 12:10:28
+//
+// $URL$
+// $Author$
+//--------------------------------------
+package org.xerial.snappy;
+
+import java.util.HashMap;
+
+public class SnappyNativeLoader
+{
+ private static HashMap loadedLibFiles = new HashMap();
+ private static HashMap loadedLib = new HashMap();
+
+ public static void load(String lib) {
+ if (loadedLibFiles.containsKey(lib) && loadedLibFiles.get(lib) == true)
+ return;
+
+ try {
+ System.load(lib);
+ loadedLibFiles.put(lib, true);
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void loadLibrary(String libname) {
+ if (loadedLib.containsKey(libname) && loadedLib.get(libname) == true)
+ return;
+
+ try {
+ System.loadLibrary(libname);
+ loadedLib.put(libname, true);
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/test/java/org/xerial/snappy/SnappyLoaderTest.java b/src/test/java/org/xerial/snappy/SnappyLoaderTest.java
index 24e71d5..87663b6 100755
--- a/src/test/java/org/xerial/snappy/SnappyLoaderTest.java
+++ b/src/test/java/org/xerial/snappy/SnappyLoaderTest.java
@@ -30,21 +30,13 @@ import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
-import java.security.ProtectionDomain;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.CtField;
-import javassist.CtNewMethod;
import org.codehaus.plexus.classworlds.ClassWorld;
import org.codehaus.plexus.classworlds.realm.ClassRealm;
-import org.junit.Ignore;
import org.junit.Test;
import org.xerial.util.FileResource;
import org.xerial.util.log.Logger;
@@ -110,49 +102,6 @@ public class SnappyLoaderTest
}
- @Ignore
- @Test
- public void createByteCodeOfSnappyLoader() throws Exception {
-
- ClassLoader parent = this.getClass().getClassLoader().getParent();
- ClassWorld cw = new ClassWorld();
- ClassRealm L1 = cw.newRealm("l1", parent);
- ClassRealm L2 = cw.newRealm("l2", parent);
-
- File nativeLib = SnappyLoader.findNativeLibrary();
- assertNotNull(nativeLib);
-
- ClassPool pool = ClassPool.getDefault();
- CtClass cl = pool.makeClass("org.xerial.snappy.SnappyNativeLoader");
- cl.addField(CtField.make("static boolean isLoaded = false;", cl));
- String m1 = loadIntoString(SnappyLoaderTest.class, "load.code");
- String m2 = loadIntoString(SnappyLoaderTest.class, "loadLibrary.code");
- cl.addMethod(CtNewMethod.make(m1, cl));
- cl.addMethod(CtNewMethod.make(m2, cl));
-
- ProtectionDomain systemPD = System.class.getProtectionDomain();
- byte[] bytecode = cl.toBytecode();
- FileOutputStream f = new FileOutputStream("target/SnappyNativeLoader.bytecode");
- f.write(bytecode);
- f.close();
-
- //Class< ? > loaderClass = cl.toClass(parent, System.class.getProtectionDomain());
- //_logger.info(cl.getName());
- //Class< ? > loaderClass = cl.toClass();
-
- // Class< ? > classLoader = Class.forName("java.lang.ClassLoader");
- // java.lang.reflect.Method defineClass = classLoader.getDeclaredMethod("defineClass", new Class[] { String.class,
- // byte[].class, int.class, int.class, ProtectionDomain.class });
- //
- // defineClass.setAccessible(true);
- // defineClass.invoke(parent, cl.getName(), bytecode, 0, bytecode.length, System.class.getProtectionDomain());
- //
- // Class< ? > forName = parent.loadClass("org.xerial.snappy.SnappyNativeLoader");
-
- //Class< ? > snappyClass = L1.loadClass("org.xerial.snappy.Snappy"); // not found
- //_logger.info(snappyClass.getName());
- }
-
@Test
public void load() throws Exception {
SnappyLoader.load();