Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/solaris/native/java/io/io_util_md.h
32287 views
1
/*
2
* Copyright (c) 2003, 2013, 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_util.h"
27
28
/*
29
* Macros to use the right data type for file descriptors
30
*/
31
#define FD jint
32
33
/*
34
* Prototypes for functions in io_util_md.c called from io_util.c,
35
* FileDescriptor.c, FileInputStream.c, FileOutputStream.c,
36
* UnixFileSystem_md.c
37
*/
38
ssize_t handleWrite(FD fd, const void *buf, jint len);
39
ssize_t handleRead(FD fd, void *buf, jint len);
40
jint handleAvailable(FD fd, jlong *pbytes);
41
jint handleSetLength(FD fd, jlong length);
42
43
FD handleOpen(const char *path, int oflag, int mode);
44
45
/*
46
* Macros to set/get fd from the java.io.FileDescriptor. These
47
* macros rely on having an appropriately defined 'this' object
48
* within the scope in which they're used.
49
* If GetObjectField returns null, SET_FD will stop and GET_FD
50
* will simply return -1 to avoid crashing VM.
51
*/
52
53
#define SET_FD(this, fd, fid) \
54
if ((*env)->GetObjectField(env, (this), (fid)) != NULL) \
55
(*env)->SetIntField(env, (*env)->GetObjectField(env, (this), (fid)),IO_fd_fdID, (fd))
56
57
#define GET_FD(this, fid) \
58
(*env)->GetObjectField(env, (this), (fid)) == NULL ? \
59
-1 : (*env)->GetIntField(env, (*env)->GetObjectField(env, (this), (fid)), IO_fd_fdID)
60
61
/*
62
* Macros to set/get fd when inside java.io.FileDescriptor
63
*/
64
#define THIS_FD(obj) (*env)->GetIntField(env, obj, IO_fd_fdID)
65
66
/*
67
* Route the routines
68
*/
69
#define IO_Sync fsync
70
#define IO_Read handleRead
71
#define IO_Write handleWrite
72
#define IO_Append handleWrite
73
#define IO_Available handleAvailable
74
#define IO_SetLength handleSetLength
75
76
#ifdef _ALLBSD_SOURCE
77
#define open64 open
78
#define fstat64 fstat
79
#define stat64 stat
80
#define lseek64 lseek
81
#define ftruncate64 ftruncate
82
#define IO_Lseek lseek
83
#else
84
#define IO_Lseek lseek64
85
#endif
86
87
/*
88
* On Solaris, the handle field is unused
89
*/
90
#define SET_HANDLE(fd) return (jlong)-1
91
92
/*
93
* Retry the operation if it is interrupted
94
*/
95
#define RESTARTABLE(_cmd, _result) do { \
96
do { \
97
_result = _cmd; \
98
} while((_result == -1) && (errno == EINTR)); \
99
} while(0)
100
101
/*
102
* IO helper function(s)
103
*/
104
void fileClose(JNIEnv *env, jobject this, jfieldID fid);
105
106
#ifdef MACOSX
107
jstring newStringPlatform(JNIEnv *env, const char* str);
108
#endif
109
110