src/share/native/java/io/FileInputStream.c
author ohair
Tue May 25 15:58:33 2010 -0700 (3 years ago)
changeset 2362 00cd9dc3c2b5
parent 037a05a11f281
permissions -rw-r--r--
6943119: Rebrand source copyright notices
Reviewed-by: darcy, weijun
        1 /*
        2  * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
        3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
        4  *
        5  * This code is free software; you can redistribute it and/or modify it
        6  * under the terms of the GNU General Public License version 2 only, as
        7  * published by the Free Software Foundation.  Oracle designates this
        8  * particular file as subject to the "Classpath" exception as provided
        9  * by Oracle in the LICENSE file that accompanied this code.
       10  *
       11  * This code is distributed in the hope that it will be useful, but WITHOUT
       12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       14  * version 2 for more details (a copy is included in the LICENSE file that
       15  * accompanied this code).
       16  *
       17  * You should have received a copy of the GNU General Public License version
       18  * 2 along with this work; if not, write to the Free Software Foundation,
       19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       20  *
       21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       22  * or visit www.oracle.com if you need additional information or have any
       23  * questions.
       24  */
       25 
       26 #include "jni.h"
       27 #include "jni_util.h"
       28 #include "jlong.h"
       29 #include "io_util.h"
       30 
       31 #include "jvm.h"
       32 
       33 #include "java_io_FileInputStream.h"
       34 
       35 #include <fcntl.h>
       36 #include <limits.h>
       37 
       38 #include "io_util_md.h"
       39 
       40 /*******************************************************************/
       41 /*  BEGIN JNI ********* BEGIN JNI *********** BEGIN JNI ************/
       42 /*******************************************************************/
       43 
       44 jfieldID fis_fd; /* id for jobject 'fd' in java.io.FileInputStream */
       45 
       46 /**************************************************************
       47  * static methods to store field ID's in initializers
       48  */
       49 
       50 JNIEXPORT void JNICALL
       51 Java_java_io_FileInputStream_initIDs(JNIEnv *env, jclass fdClass) {
       52     fis_fd = (*env)->GetFieldID(env, fdClass, "fd", "Ljava/io/FileDescriptor;");
       53 }
       54 
       55 /**************************************************************
       56  * Input stream
       57  */
       58 
       59 JNIEXPORT void JNICALL
       60 Java_java_io_FileInputStream_open(JNIEnv *env, jobject this, jstring path) {
       61     fileOpen(env, this, path, fis_fd, O_RDONLY);
       62 }
       63 
       64 JNIEXPORT jint JNICALL
       65 Java_java_io_FileInputStream_read(JNIEnv *env, jobject this) {
       66     return readSingle(env, this, fis_fd);
       67 }
       68 
       69 JNIEXPORT jint JNICALL
       70 Java_java_io_FileInputStream_readBytes(JNIEnv *env, jobject this,
       71         jbyteArray bytes, jint off, jint len) {
       72     return readBytes(env, this, bytes, off, len, fis_fd);
       73 }
       74 
       75 JNIEXPORT jlong JNICALL
       76 Java_java_io_FileInputStream_skip(JNIEnv *env, jobject this, jlong toSkip) {
       77     jlong cur = jlong_zero;
       78     jlong end = jlong_zero;
       79     FD fd = GET_FD(this, fis_fd);
       80     if (fd == -1) {
       81         JNU_ThrowIOException (env, "Stream Closed");
       82         return 0;
       83     }
       84     if ((cur = IO_Lseek(fd, (jlong)0, (jint)SEEK_CUR)) == -1) {
       85         JNU_ThrowIOExceptionWithLastError(env, "Seek error");
       86     } else if ((end = IO_Lseek(fd, toSkip, (jint)SEEK_CUR)) == -1) {
       87         JNU_ThrowIOExceptionWithLastError(env, "Seek error");
       88     }
       89     return (end - cur);
       90 }
       91 
       92 JNIEXPORT jint JNICALL
       93 Java_java_io_FileInputStream_available(JNIEnv *env, jobject this) {
       94     jlong ret;
       95     FD fd = GET_FD(this, fis_fd);
       96     if (fd == -1) {
       97         JNU_ThrowIOException (env, "Stream Closed");
       98         return 0;
       99     }
      100     if (IO_Available(fd, &ret)) {
      101         if (ret > INT_MAX) {
      102             ret = (jlong) INT_MAX;
      103         }
      104         return jlong_to_jint(ret);
      105     }
      106     JNU_ThrowIOExceptionWithLastError(env, NULL);
      107     return 0;
      108 }