--- old/src/solaris/native/java/io/io_util_md.h 2013-03-08 17:08:02.037629496 -0800 +++ new/src/solaris/native/java/io/io_util_md.h 2013-03-08 17:08:01.909629498 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -23,7 +23,6 @@ * questions. */ -#include "jni.h" #include "jni_util.h" /* @@ -32,6 +31,19 @@ #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 + */ +ssize_t handleAppend(FD fd, const void *buf, jint len); +ssize_t handleWrite(FD fd, const void *buf, jint len); +ssize_t 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. @@ -53,15 +65,25 @@ #define THIS_FD(obj) (*env)->GetIntField(env, obj, IO_fd_fdID) /* - * Route the routines through VM + * Route the routines */ -#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 +#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 @@ -69,6 +91,15 @@ #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);