src/solaris/native/java/io/io_util_md.h
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2003, 2012, 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
--- 1,7 ----
/*
! * Copyright (c) 2003, 2013, 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
*** 21,39 ****
* 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 "jni.h"
#include "jni_util.h"
/*
* Macros to use the right data type for file descriptors
*/
#define FD jint
/*
* Macros to set/get fd from the java.io.FileDescriptor. These
* macros rely on having an appropriately defined 'this' object
* within the scope in which they're used.
* If GetObjectField returns null, SET_FD will stop and GET_FD
* will simply return -1 to avoid crashing VM.
--- 21,51 ----
* 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 "jni_util.h"
/*
* Macros to use the right data type for file descriptors
*/
#define FD jint
/*
+ * Prototypes for functions in io_util_md.c called from io_util.c,
+ * FileDescriptor.c, FileInputStream.c, FileOutputStream.c,
+ * UnixFileSystem_md.c
+ */
+ jint handleAppend(FD fd, const void *buf, jint len);
+ jint handleWrite(FD fd, const void *buf, jint len);
+ jint handleRead(FD fd, void *buf, jint len);
+ jint handleAvailable(FD fd, jlong *pbytes);
+ jint handleSetLength(FD fd, jlong length);
+
+ FD handleOpen(const char *path, int oflag, int mode);
+
+ /*
* Macros to set/get fd from the java.io.FileDescriptor. These
* macros rely on having an appropriately defined 'this' object
* within the scope in which they're used.
* If GetObjectField returns null, SET_FD will stop and GET_FD
* will simply return -1 to avoid crashing VM.
*** 51,76 ****
* Macros to set/get fd when inside java.io.FileDescriptor
*/
#define THIS_FD(obj) (*env)->GetIntField(env, obj, IO_fd_fdID)
/*
! * Route the routines through VM
*/
! #define IO_Append JVM_Write
! #define IO_Write JVM_Write
! #define IO_Sync JVM_Sync
! #define IO_Read JVM_Read
! #define IO_Lseek JVM_Lseek
! #define IO_Available JVM_Available
! #define IO_SetLength JVM_SetLength
/*
* On Solaris, the handle field is unused
*/
#define SET_HANDLE(fd) return (jlong)-1
/*
* IO helper function(s)
*/
void fileClose(JNIEnv *env, jobject this, jfieldID fid);
#ifdef MACOSX
--- 63,107 ----
* Macros to set/get fd when inside java.io.FileDescriptor
*/
#define THIS_FD(obj) (*env)->GetIntField(env, obj, IO_fd_fdID)
/*
! * Route the routines
*/
! #define IO_Sync fsync
! #define IO_Read handleRead
! #define IO_Write handleWrite
! #define IO_Append handleAppend
! #define IO_Available handleAvailable
! #define IO_SetLength handleSetLength
!
! #ifdef _ALLBSD_SOURCE
! #define open64 open
! #define fstat64 fstat
! #define stat64 stat
! #define lseek64 lseek
! #define ftruncate64 ftruncate
! #define IO_Lseek lseek
! #else
! #define IO_Lseek lseek64
! #endif
/*
* On Solaris, the handle field is unused
*/
#define SET_HANDLE(fd) return (jlong)-1
/*
+ * Retry the operation if it is interrupted
+ */
+ #define RESTARTABLE(_cmd, _result) do { \
+ do { \
+ _result = _cmd; \
+ } while((_result == -1) && (errno == EINTR)); \
+ } while(0)
+
+ /*
* IO helper function(s)
*/
void fileClose(JNIEnv *env, jobject this, jfieldID fid);
#ifdef MACOSX