/*
* Copyright ( c ) 1997 , 2021 , Oracle and / or its affiliates . All rights reserved .
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER .
*
* This code is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 only , as
* published by the Free Software Foundation . Oracle designates this
* particular file as subject to the " Classpath " exception as provided
* by Oracle in the LICENSE file that accompanied this code .
*
* This code is distributed in the hope that it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License
* version 2 for more details ( a copy is included in the LICENSE file that
* accompanied this code ) .
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work ; if not , write to the Free Software Foundation ,
* Inc . , 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA .
*
* Please contact Oracle , 500 Oracle Parkway , Redwood Shores , CA 94065 USA
* or visit www . oracle . com if you need additional information or have any
* questions .
*/
#include <fcntl.h>
#include <limits.h>
#include "jni.h"
#include "jni_util.h"
#include "jlong.h"
#include "io_util.h"
#include "jvm.h"
#include "java_io_FileInputStream.h"
#include "io_util_md.h"
/*******************************************************************/
/* BEGIN JNI ********* BEGIN JNI *********** BEGIN JNI ************/
/*******************************************************************/
jfieldID fis_fd; /* id for jobject 'fd' in java.io.FileInputStream */
/**************************************************************
* static methods to store field ID ' s in initializers
*/
JNIEXPORT void JNICALL
Java_java_io_FileInputStream_initIDs(JNIEnv *env, jclass fdClass) {
fis_fd = (*env)->GetFieldID(env, fdClass, "fd" , "Ljava/io/FileDescriptor;" );
}
/**************************************************************
* Input stream
*/
JNIEXPORT void JNICALL
Java_java_io_FileInputStream_open0(JNIEnv *env, jobject this , jstring path) {
fileOpen(env, this , path, fis_fd, O_RDONLY);
}
JNIEXPORT jint JNICALL
Java_java_io_FileInputStream_read0(JNIEnv *env, jobject this ) {
return readSingle(env, this , fis_fd);
}
JNIEXPORT jint JNICALL
Java_java_io_FileInputStream_readBytes(JNIEnv *env, jobject this ,
jbyteArray bytes, jint off, jint len) {
return readBytes(env, this , bytes, off, len, fis_fd);
}
JNIEXPORT jlong JNICALL
Java_java_io_FileInputStream_length0(JNIEnv *env, jobject this ) {
FD fd;
jlong length = jlong_zero;
fd = getFD(env, this , fis_fd);
if (fd == -1 ) {
JNU_ThrowIOException(env, "Stream Closed" );
return -1 ;
}
if ((length = IO_GetLength(fd)) == -1 ) {
JNU_ThrowIOExceptionWithLastError(env, "GetLength failed" );
}
return length;
}
JNIEXPORT jlong JNICALL
Java_java_io_FileInputStream_position0(JNIEnv *env, jobject this ) {
FD fd;
jlong ret;
fd = getFD(env, this , fis_fd);
if (fd == -1 ) {
JNU_ThrowIOException(env, "Stream Closed" );
return -1 ;
}
if ((ret = IO_Lseek(fd, 0 L, SEEK_CUR)) == -1 ) {
JNU_ThrowIOExceptionWithLastError(env, "Seek failed" );
}
return ret;
}
JNIEXPORT jlong JNICALL
Java_java_io_FileInputStream_skip0(JNIEnv *env, jobject this , jlong toSkip) {
jlong cur = jlong_zero;
jlong end = jlong_zero;
FD fd = getFD(env, this , fis_fd);
if (fd == -1 ) {
JNU_ThrowIOException (env, "Stream Closed" );
return 0 ;
}
if ((cur = IO_Lseek(fd, (jlong)0 , (jint)SEEK_CUR)) == -1 ) {
JNU_ThrowIOExceptionWithLastError(env, "Seek error" );
} else if ((end = IO_Lseek(fd, toSkip, (jint)SEEK_CUR)) == -1 ) {
JNU_ThrowIOExceptionWithLastError(env, "Seek error" );
}
return (end - cur);
}
JNIEXPORT jint JNICALL
Java_java_io_FileInputStream_available0(JNIEnv *env, jobject this ) {
jlong ret;
FD fd = getFD(env, this , fis_fd);
if (fd == -1 ) {
JNU_ThrowIOException (env, "Stream Closed" );
return 0 ;
}
if (IO_Available(fd, &ret)) {
if (ret > INT_MAX) {
ret = (jlong) INT_MAX;
} else if (ret < 0 ) {
ret = 0 ;
}
return jlong_to_jint(ret);
}
JNU_ThrowIOExceptionWithLastError(env, NULL);
return 0 ;
}
Messung V0.5 in Prozent C=99 H=96 G=97
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-10-04)
¤
*© Formatika GbR, Deutschland