legacy/extras/java/trunk/src/jni/libburn/Source.c

183 lines
4.1 KiB
C

/*
* Source.c
*
* Copyright (c) 2007 Vreixo Formoso
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* See COPYING file for details.
*/
#include "org_pykix_libburnia_libburn_Source.h"
#include "libburn.h"
#include "libisofs.h"
/*
* Class: org_pykix_libburnia_libburn_Source
* Method: burn_file_source_new
* Signature: (Ljava/lang/String;Ljava/lang/String;)J
*/
JNIEXPORT jlong JNICALL Java_org_pykix_libburnia_libburn_Source_burn_1file_1source_1new
(
JNIEnv *env, jclass cls, jstring path, jstring subPath
)
{
const char *cpath = NULL;
const char *subpath = NULL;
struct burn_source *src;
cpath = (*env)->GetStringUTFChars(env, path, NULL);
if ( cpath == NULL ) {
return (jlong) 0; /* OutOfMemoryError already thrown */
}
if ( subPath != NULL ) {
subpath = (*env)->GetStringUTFChars(env, subPath, NULL);
if (subpath == NULL) {
return (jlong) 0; /* OutOfMemoryError already thrown */
}
}
src = burn_file_source_new(cpath, subpath);
(*env)->ReleaseStringUTFChars(env, path, cpath);
(*env)->ReleaseStringUTFChars(env, subPath, subpath);
return (jlong) src;
}
/*
* Class: org_pykix_libburnia_libburn_Source
* Method: burn_fd_source_new
* Signature: (IIJ)J
*/
JNIEXPORT jlong JNICALL
Java_org_pykix_libburnia_libburn_Source_burn_1fd_1source_1new
(
JNIEnv *env, jclass cls, jint datafd, jint subfd, jlong size
)
{
return (jlong) burn_fd_source_new(datafd, subfd, size);
}
/*
* Class: org_pykix_libburnia_libburn_Source
* Method: iso_source_new_ecma119
* Signature: (JIII)J
*/
JNIEXPORT jlong JNICALL Java_org_pykix_libburnia_libburn_Source_iso_1source_1new_1ecma119
(
JNIEnv *env, jclass cls, jlong volumeset, jint volnum, jint level, jint flags)
{
return (jlong) iso_source_new_ecma119 ( (struct iso_volset *) volumeset, volnum, level, flags);
}
/*
* Class: org_pykix_libburnia_libburn_Source
* Method: read
* Signature: (J[BI)I
*/
JNIEXPORT jint JNICALL Java_org_pykix_libburnia_libburn_Source_read
(
JNIEnv *env, jclass cls, jlong burnSource, jbyteArray byteBuffer, jint size
)
{
struct burn_source *source;
jbyte *buffer = NULL;
source = (struct burn_source *) burnSource;
buffer = (*env)->GetByteArrayElements(env, byteBuffer, NULL);
if (buffer == NULL) {
return -1; /* exception occurred */
}
int n = source->read(source, buffer, size);
(*env)->ReleaseByteArrayElements(env, byteBuffer, buffer, 0);
return n;
}
/*
* Class: org_pykix_libburnia_libburn_Source
* Method: read_sub
* Signature: (J[BI)I
*/
JNIEXPORT jint JNICALL Java_org_pykix_libburnia_libburn_Source_read_1sub
(
JNIEnv *env, jclass cls, jlong burnSource, jbyteArray byteBuffer, jint size
)
{
struct burn_source *source;
jbyte *buffer = NULL;
source = (struct burn_source *) burnSource;
buffer = (*env)->GetByteArrayElements(env, byteBuffer, NULL);
if (buffer == NULL) {
return -1; /* exception occurred */
}
int n = source->read_sub(source, buffer, size);
(*env)->ReleaseByteArrayElements(env, byteBuffer, buffer, 0);
return n;
}
/*
* Class: org_pykix_libburnia_libburn_Source
* Method: get_size
* Signature: (J)J
*/
JNIEXPORT jlong JNICALL Java_org_pykix_libburnia_libburn_Source_get_1size
(
JNIEnv *env, jclass cls, jlong burnSource
)
{
struct burn_source *source;
source = (struct burn_source *) burnSource;
off_t size = source->get_size(source);
return size;
}
/*
* Class: org_pykix_libburnia_libburn_Source
* Method: set_size
* Signature: (JJ)I
*/
JNIEXPORT jint JNICALL Java_org_pykix_libburnia_libburn_Source_set_1size
(
JNIEnv *env, jclass cls, jlong burnSource, jlong size
)
{
struct burn_source *source;
source = (struct burn_source *) burnSource;
int n = source->set_size(source, size);
return n;
}
/*
* Class: org_pykix_libburnia_libburn_Source
* Method: burn_source_free
* Signature: (J)V
*/
JNIEXPORT void JNICALL Java_org_pykix_libburnia_libburn_Source_burn_1source_1free
(
JNIEnv *env, jclass cls, jlong s
)
{
burn_source_free( (struct burn_source *) s);
}