183 lines
4.1 KiB
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);
|
||
|
}
|
||
|
|