Skip to content

Commit

Permalink
Merge branch 'master' of github.com:rhash/RHash
Browse files Browse the repository at this point in the history
  • Loading branch information
rhash committed Jun 14, 2011
2 parents 09df0b8 + 50956d1 commit 317d6c6
Show file tree
Hide file tree
Showing 14 changed files with 749 additions and 257 deletions.
20 changes: 16 additions & 4 deletions bindings/java/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@


MAKE = make
JAVA = java
JAVAC = javac
JAVADOC = javadoc
JAVAH = javah
Expand All @@ -29,12 +30,15 @@ CSRC_DIR = native
DEST_DIR = dist
CLASSES_DIR = classes
JAVADOC_DIR = javadoc
TEST_DIR = test

all: jar jni
JARFILE = $(DEST_DIR)/rhash-$(VERSION).jar

all: jar jni test

jar: compile-classes
mkdir -p $(DEST_DIR)
$(JAR) cf $(DEST_DIR)/rhash-$(VERSION).jar -C $(CLASSES_DIR) org/
$(JAR) cf $(JARFILE) -C $(CLASSES_DIR) org/

compile-classes:
mkdir -p $(CLASSES_DIR)
Expand All @@ -49,12 +53,17 @@ jni:
cp $(CSRC_DIR)/*rhash-jni* $(DEST_DIR)

javadoc: clean-javadoc
$(JAVADOC) -sourcepath src \
$(JAVADOC) -windowtitle 'RHash' \
-sourcepath src \
-subpackages org \
-d $(JAVADOC_DIR) \
-link http://java.sun.com/j2se/1.5.0/docs/api

clean: clean-javadoc clean-jni clean-classes
test: jar jni
$(JAVAC) -classpath $(JARFILE) $(TEST_DIR)/Test.java
$(JAVA) -classpath $(TEST_DIR):$(JARFILE) -Djava.library.path=dist Test

clean: clean-javadoc clean-jni clean-classes clean-test

clean-javadoc:
rm -rf $(JAVADOC_DIR)
Expand All @@ -65,6 +74,9 @@ clean-classes:
clean-jni:
$(MAKE) -C $(CSRC_DIR) clean

clean-test:
rm -f $(TEST_DIR)/*.class

distclean:
rm -rf $(DEST_DIR)

Expand Down
4 changes: 2 additions & 2 deletions bindings/java/native/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,15 @@ JNI_INCLUDES = /usr/lib/jvm/default-java/include
LIB_PREFIX = lib
LIB_SUFFIX = .so

OBJECTS = bindings.o HashObject.o
OBJECTS = bindings.o digest.o
LIBRARY = $(LIB_PREFIX)rhash-jni$(LIB_SUFFIX)

all: $(LIBRARY)

bindings.o: bindings.c bindings.h
$(CC) $(CFLAGS) -I$(JNI_INCLUDES) -c $< -o $@

HashObject.o: HashObject.c HashObject.h
digest.o: digest.c digest.h
$(CC) $(CFLAGS) -c $< -o $@

$(LIBRARY): $(OBJECTS)
Expand Down
163 changes: 91 additions & 72 deletions bindings/java/native/bindings.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
#include <stdlib.h>

#include "bindings.h"
#include "HashObject.h"
#include "digest.h"

/*
* Class: org_sf_rhash_Bindings
Expand Down Expand Up @@ -51,8 +51,8 @@ JNIEXPORT jlong JNICALL Java_org_sf_rhash_Bindings_rhash_1msg
// reading data
void* msg = malloc(len);
(*env)->GetByteArrayRegion(env, buf, ofs, len, msg);
// creating and populating HashObject
HashObject obj = malloc(sizeof(HashStruct));
// creating and populating Digest
Digest obj = malloc(sizeof(DigestStruct));
obj->hash_len = rhash_get_digest_size(hash_id);
obj->hash_data = calloc(obj->hash_len, sizeof(unsigned char));
rhash_msg(hash_id, msg, len, obj->hash_data);
Expand All @@ -62,56 +62,14 @@ JNIEXPORT jlong JNICALL Java_org_sf_rhash_Bindings_rhash_1msg
return (jlong)obj;
}

/*
* Class: org_sf_rhash_Bindings
* Method: rhash_file
* Signature: (ILjava/lang/String;)J
*/
JNIEXPORT jlong JNICALL Java_org_sf_rhash_Bindings_rhash_1file
(JNIEnv *env, jclass clz, jint hash_id, jstring filepath) {
// reading filename
#ifdef _WIN32
const wchar_t *path = (*env)->GetStringChars(env, filepath, NULL);
#else /* _WIN32 */
const char *path = (*env)->GetStringUTFChars(env, filepath, NULL);
#endif /* _WIN32 */
if (path == NULL) {
return NULL; /* OutOfMemoryError is thrown */
}
// creating and populating HashObject
HashObject obj = malloc(sizeof(HashStruct));
obj->hash_len = rhash_get_digest_size(hash_id);
obj->hash_data = calloc(obj->hash_len, sizeof(unsigned char));
#ifdef _WIN32
if ( rhash_wfile(hash_id, path, obj->hash_data) != 0) {
#else /* _WIN32 */
if ( rhash_file(hash_id, path, obj->hash_data) != 0) {
#endif /* _WIN32 */
freeHashObject(obj);
obj = NULL;
//throwing IOException
jclass exclz = (*env)->FindClass(env, "java/io/IOException");
if (exclz != NULL) {
(*env)->ThrowNew(env, exclz, "Error reading file");
}
(*env)->DeleteLocalRef(env, exclz);
}
#ifdef _WIN32
(*env)->ReleaseStringChars(env, filepath, path);
#else /* _WIN32 */
(*env)->ReleaseStringUTFChars(env, filepath, path);
#endif /* _WIN32 */
return (jlong)obj;
}

/*
* Class: org_sf_rhash_Bindings
* Method: rhash_print_bytes
* Signature: (JI)[B
*/
JNIEXPORT jbyteArray JNICALL Java_org_sf_rhash_Bindings_rhash_1print_1bytes
(JNIEnv *env, jclass clz, jlong ptr, jint flags) {
HashObject obj = (HashObject)ptr;
Digest obj = (Digest)ptr;
unsigned char output[130];
int len = rhash_print_bytes(output, obj->hash_data, obj->hash_len, flags);
jbyteArray arr = (*env)->NewByteArray(env, len);
Expand All @@ -121,57 +79,118 @@ JNIEXPORT jbyteArray JNICALL Java_org_sf_rhash_Bindings_rhash_1print_1bytes

/*
* Class: org_sf_rhash_Bindings
* Method: freeHashObject
* Method: rhash_is_base32
* Signature: (I)Z
*/
JNIEXPORT jboolean JNICALL Java_org_sf_rhash_Bindings_rhash_1is_1base32
(JNIEnv *env, jclass clz, jint hash_id) {
return rhash_is_base32(hash_id);
}

/*
* Class: org_sf_rhash_Bindings
* Method: rhash_get_digest_size
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_org_sf_rhash_Bindings_rhash_1get_1digest_1size
(JNIEnv *env, jclass clz, jint hash_id) {
return rhash_get_digest_size(hash_id);
}

/*
* Class: org_sf_rhash_Bindings
* Method: rhash_init
* Signature: (I)J
*/
JNIEXPORT jlong JNICALL Java_org_sf_rhash_Bindings_rhash_1init
(JNIEnv *env, jclass clz, jint hash_flags) {
return (jlong)rhash_init(hash_flags);
}

/*
* Class: org_sf_rhash_Bindings
* Method: rhash_update
* Signature: (J[BII)V
*/
JNIEXPORT void JNICALL Java_org_sf_rhash_Bindings_rhash_1update
(JNIEnv *env, jclass clz, jlong context, jbyteArray data, jint ofs, jint len) {
void* msg = malloc(len);
(*env)->GetByteArrayRegion(env, data, ofs, len, msg);
rhash_update((rhash)context, msg, len);
free(msg);
}

/*
* Class: org_sf_rhash_Bindings
* Method: rhash_final
* Signature: (J)V
*/
JNIEXPORT void JNICALL Java_org_sf_rhash_Bindings_freeHashObject
(JNIEnv *env, jclass clz, jlong ptr) {
freeHashObject((HashObject)ptr);
JNIEXPORT void JNICALL Java_org_sf_rhash_Bindings_rhash_1final
(JNIEnv *env, jclass clz, jlong context) {
rhash_final((rhash)context, NULL);
}

/*
* Class: org_sf_rhash_Bindings
* Method: cloneHashObject
* Signature: (J)J
* Method: rhash_reset
* Signature: (J)V
*/
JNIEXPORT jlong JNICALL Java_org_sf_rhash_Bindings_cloneHashObject
(JNIEnv *env, jclass clz, jlong ptr) {
HashObject obj = (HashObject)ptr;
HashObject newobj = malloc(sizeof(HashStruct));
newobj->hash_id = obj->hash_id;
newobj->hash_len = obj->hash_len;
newobj->hash_data = calloc(obj->hash_len, sizeof(unsigned char));
memcpy(newobj->hash_data, obj->hash_data, obj->hash_len);
return (jlong)newobj;
JNIEXPORT void JNICALL Java_org_sf_rhash_Bindings_rhash_1reset
(JNIEnv *env, jclass clz, jlong context) {
rhash_reset((rhash)context);
}

/*
* Class: org_sf_rhash_Bindings
* Method: rhash_is_base32
* Signature: (I)Z
* Method: rhash_print
* Signature: (JI)J
*/
JNIEXPORT jboolean JNICALL Java_org_sf_rhash_Bindings_rhash_1is_1base32
(JNIEnv *env, jclass clz, jint hash_id) {
return rhash_is_base32(hash_id);
JNIEXPORT jlong JNICALL Java_org_sf_rhash_Bindings_rhash_1print
(JNIEnv *env, jclass clz, jlong context, jint hash_id) {
Digest obj = malloc(sizeof(DigestStruct));
obj->hash_len = rhash_get_digest_size(hash_id);
obj->hash_data = calloc(obj->hash_len, sizeof(unsigned char));
rhash_print(obj->hash_data, (rhash)context, hash_id, RHPR_RAW);
return (jlong)obj;
}

/*
* Class: org_sf_rhash_Bindings
* Method: rhash_free
* Signature: (J)V
*/
JNIEXPORT void JNICALL Java_org_sf_rhash_Bindings_rhash_1free
(JNIEnv *env, jclass clz, jlong context) {
rhash_free((rhash)context);
}

/*
* Class: org_sf_rhash_Bindings
* Method: compareHashObjects
* Method: compareDigests
* Signature: (JJ)Z
*/
JNIEXPORT jboolean JNICALL Java_org_sf_rhash_Bindings_compareHashObjects
JNIEXPORT jboolean JNICALL Java_org_sf_rhash_Bindings_compareDigests
(JNIEnv *env, jclass clz, jlong ptr1, jlong ptr2) {
return compareHashObjects((HashObject)ptr1, (HashObject)ptr2);
return compareDigests((Digest)ptr1, (Digest)ptr2);
}

/*
* Class: org_sf_rhash_Bindings
* Method: hashcodeForHashObject
* Method: hashcodeForDigest
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sf_rhash_Bindings_hashcodeForHashObject
JNIEXPORT jint JNICALL Java_org_sf_rhash_Bindings_hashcodeForDigest
(JNIEnv *env, jclass clz, jlong ptr) {
return hashcodeForDigest((Digest)ptr);
}

/*
* Class: org_sf_rhash_Bindings
* Method: freeDigest
* Signature: (J)V
*/
JNIEXPORT void JNICALL Java_org_sf_rhash_Bindings_freeDigest
(JNIEnv *env, jclass clz, jlong ptr) {
return hashcodeForHashObject((HashObject)ptr);
freeDigest((Digest)ptr);
}

Loading

0 comments on commit 317d6c6

Please sign in to comment.