mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-22 20:14:43 +02:00
8187443: Forest Consolidation: Move files to unified layout
Reviewed-by: darcy, ihse
This commit is contained in:
parent
270fe13182
commit
3789983e89
56923 changed files with 3 additions and 15727 deletions
189
src/java.base/solaris/native/libnio/ch/DevPollArrayWrapper.c
Normal file
189
src/java.base/solaris/native/libnio/ch/DevPollArrayWrapper.c
Normal file
|
@ -0,0 +1,189 @@
|
|||
/*
|
||||
* Copyright (c) 2001, 2016, 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 "jni.h"
|
||||
#include "jni_util.h"
|
||||
#include "jvm.h"
|
||||
#include "jlong.h"
|
||||
#include "sun_nio_ch_DevPollArrayWrapper.h"
|
||||
#include <poll.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef uint32_t caddr32_t;
|
||||
|
||||
/* /dev/poll ioctl */
|
||||
#define DPIOC (0xD0 << 8)
|
||||
#define DP_POLL (DPIOC | 1) /* poll on fds in cached in /dev/poll */
|
||||
#define DP_ISPOLLED (DPIOC | 2) /* is this fd cached in /dev/poll */
|
||||
#define DEVPOLLSIZE 1000 /* /dev/poll table size increment */
|
||||
#define POLLREMOVE 0x0800 /* Removes fd from monitored set */
|
||||
|
||||
/*
|
||||
* /dev/poll DP_POLL ioctl format
|
||||
*/
|
||||
typedef struct dvpoll {
|
||||
pollfd_t *dp_fds; /* pollfd array */
|
||||
nfds_t dp_nfds; /* num of pollfd's in dp_fds[] */
|
||||
int dp_timeout; /* time out in millisec */
|
||||
} dvpoll_t;
|
||||
|
||||
typedef struct dvpoll32 {
|
||||
caddr32_t dp_fds; /* pollfd array */
|
||||
uint32_t dp_nfds; /* num of pollfd's in dp_fds[] */
|
||||
int32_t dp_timeout; /* time out in millisec */
|
||||
} dvpoll32_t;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#define RESTARTABLE(_cmd, _result) do { \
|
||||
do { \
|
||||
_result = _cmd; \
|
||||
} while((_result == -1) && (errno == EINTR)); \
|
||||
} while(0)
|
||||
|
||||
static int
|
||||
idevpoll(jint wfd, int dpctl, struct dvpoll a)
|
||||
{
|
||||
jlong start, now;
|
||||
int remaining = a.dp_timeout;
|
||||
struct timeval t;
|
||||
int diff;
|
||||
|
||||
gettimeofday(&t, NULL);
|
||||
start = t.tv_sec * 1000 + t.tv_usec / 1000;
|
||||
|
||||
for (;;) {
|
||||
/* poll(7d) ioctl does not return remaining count */
|
||||
int res = ioctl(wfd, dpctl, &a);
|
||||
if (res < 0 && errno == EINTR) {
|
||||
if (remaining >= 0) {
|
||||
gettimeofday(&t, NULL);
|
||||
now = t.tv_sec * 1000 + t.tv_usec / 1000;
|
||||
diff = now - start;
|
||||
remaining -= diff;
|
||||
if (diff < 0 || remaining <= 0) {
|
||||
return 0;
|
||||
}
|
||||
start = now;
|
||||
a.dp_timeout = remaining;
|
||||
}
|
||||
} else {
|
||||
return res;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL
|
||||
Java_sun_nio_ch_DevPollArrayWrapper_init(JNIEnv *env, jobject this)
|
||||
{
|
||||
int wfd = open("/dev/poll", O_RDWR);
|
||||
if (wfd < 0) {
|
||||
JNU_ThrowIOExceptionWithLastError(env, "Error opening driver");
|
||||
return -1;
|
||||
}
|
||||
return wfd;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_sun_nio_ch_DevPollArrayWrapper_register(JNIEnv *env, jobject this,
|
||||
jint wfd, jint fd, jint mask)
|
||||
{
|
||||
struct pollfd a[1];
|
||||
int n;
|
||||
|
||||
a[0].fd = fd;
|
||||
a[0].events = mask;
|
||||
a[0].revents = 0;
|
||||
|
||||
n = write(wfd, &a[0], sizeof(a));
|
||||
if (n != sizeof(a)) {
|
||||
if (n < 0) {
|
||||
JNU_ThrowIOExceptionWithLastError(env, "Error writing pollfds");
|
||||
} else {
|
||||
JNU_ThrowIOException(env, "Unexpected number of bytes written");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_sun_nio_ch_DevPollArrayWrapper_registerMultiple(JNIEnv *env, jobject this,
|
||||
jint wfd, jlong address,
|
||||
jint len)
|
||||
{
|
||||
unsigned char *pollBytes = (unsigned char *)jlong_to_ptr(address);
|
||||
unsigned char *pollEnd = pollBytes + sizeof(struct pollfd) * len;
|
||||
while (pollBytes < pollEnd) {
|
||||
int bytesWritten = write(wfd, pollBytes, (int)(pollEnd - pollBytes));
|
||||
if (bytesWritten < 0) {
|
||||
JNU_ThrowIOExceptionWithLastError(env, "Error writing pollfds");
|
||||
return;
|
||||
}
|
||||
pollBytes += bytesWritten;
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL
|
||||
Java_sun_nio_ch_DevPollArrayWrapper_poll0(JNIEnv *env, jobject this,
|
||||
jlong address, jint numfds,
|
||||
jlong timeout, jint wfd)
|
||||
{
|
||||
struct dvpoll a;
|
||||
void *pfd = (void *) jlong_to_ptr(address);
|
||||
int result = 0;
|
||||
|
||||
a.dp_fds = pfd;
|
||||
a.dp_nfds = numfds;
|
||||
a.dp_timeout = (int)timeout;
|
||||
|
||||
if (timeout <= 0) { /* Indefinite or no wait */
|
||||
RESTARTABLE (ioctl(wfd, DP_POLL, &a), result);
|
||||
} else { /* Bounded wait; bounded restarts */
|
||||
result = idevpoll(wfd, DP_POLL, a);
|
||||
}
|
||||
|
||||
if (result < 0) {
|
||||
JNU_ThrowIOExceptionWithLastError(env, "Error reading driver");
|
||||
return -1;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_sun_nio_ch_DevPollArrayWrapper_interrupt(JNIEnv *env, jclass this, jint fd)
|
||||
{
|
||||
int fakebuf[1];
|
||||
fakebuf[0] = 1;
|
||||
if (write(fd, fakebuf, 1) < 0) {
|
||||
JNU_ThrowIOExceptionWithLastError(env,
|
||||
"Write to interrupt fd failed");
|
||||
}
|
||||
}
|
134
src/java.base/solaris/native/libnio/ch/SolarisEventPort.c
Normal file
134
src/java.base/solaris/native/libnio/ch/SolarisEventPort.c
Normal file
|
@ -0,0 +1,134 @@
|
|||
/*
|
||||
* Copyright (c) 2008, 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
|
||||
* 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 "jni.h"
|
||||
#include "jni_util.h"
|
||||
#include "jvm.h"
|
||||
#include "jlong.h"
|
||||
#include "nio_util.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <dlfcn.h>
|
||||
#include <sys/types.h>
|
||||
#include <port.h>
|
||||
|
||||
#include "sun_nio_ch_SolarisEventPort.h"
|
||||
|
||||
JNIEXPORT jint JNICALL
|
||||
Java_sun_nio_ch_SolarisEventPort_port_1create
|
||||
(JNIEnv* env, jclass clazz)
|
||||
{
|
||||
int port = port_create();
|
||||
if (port == -1) {
|
||||
JNU_ThrowIOExceptionWithLastError(env, "port_create");
|
||||
}
|
||||
return (jint)port;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_sun_nio_ch_SolarisEventPort_port_1close
|
||||
(JNIEnv* env, jclass clazz, jint port)
|
||||
{
|
||||
int res;
|
||||
RESTARTABLE(close(port), res);
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_sun_nio_ch_SolarisEventPort_port_1associate
|
||||
(JNIEnv* env, jclass clazz, jint port, jint source, jlong objectAddress, jint events)
|
||||
{
|
||||
uintptr_t object = (uintptr_t)jlong_to_ptr(objectAddress);
|
||||
if (port_associate((int)port, (int)source, object, (int)events, NULL) == 0) {
|
||||
return JNI_TRUE;
|
||||
} else {
|
||||
if (errno != EBADFD)
|
||||
JNU_ThrowIOExceptionWithLastError(env, "port_associate");
|
||||
return JNI_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_sun_nio_ch_SolarisEventPort_port_1dissociate
|
||||
(JNIEnv* env, jclass clazz, jint port, jint source, jlong objectAddress)
|
||||
{
|
||||
uintptr_t object = (uintptr_t)jlong_to_ptr(objectAddress);
|
||||
|
||||
if (port_dissociate((int)port, (int)source, object) == 0) {
|
||||
return JNI_TRUE;
|
||||
} else {
|
||||
if (errno != ENOENT)
|
||||
JNU_ThrowIOExceptionWithLastError(env, "port_dissociate");
|
||||
return JNI_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_sun_nio_ch_SolarisEventPort_port_1send(JNIEnv* env, jclass clazz,
|
||||
jint port, jint events)
|
||||
{
|
||||
if (port_send((int)port, (int)events, NULL) == -1) {
|
||||
JNU_ThrowIOExceptionWithLastError(env, "port_send");
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_sun_nio_ch_SolarisEventPort_port_1get(JNIEnv* env, jclass clazz,
|
||||
jint port, jlong eventAddress)
|
||||
{
|
||||
int res;
|
||||
port_event_t* ev = (port_event_t*)jlong_to_ptr(eventAddress);
|
||||
|
||||
RESTARTABLE(port_get((int)port, ev, NULL), res);
|
||||
if (res == -1) {
|
||||
JNU_ThrowIOExceptionWithLastError(env, "port_get");
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL
|
||||
Java_sun_nio_ch_SolarisEventPort_port_1getn(JNIEnv* env, jclass clazz,
|
||||
jint port, jlong arrayAddress, jint max, jlong timeout)
|
||||
{
|
||||
int res;
|
||||
uint_t n = 1;
|
||||
port_event_t* list = (port_event_t*)jlong_to_ptr(arrayAddress);
|
||||
timespec_t ts;
|
||||
timespec_t* tsp;
|
||||
|
||||
if (timeout >= 0L) {
|
||||
ts.tv_sec = timeout / 1000;
|
||||
ts.tv_nsec = 1000000 * (timeout % 1000);
|
||||
tsp = &ts;
|
||||
} else {
|
||||
tsp = NULL;
|
||||
}
|
||||
|
||||
res = port_getn((int)port, list, (uint_t)max, &n, tsp);
|
||||
if (res == -1) {
|
||||
if (errno != ETIME && errno != EINTR)
|
||||
JNU_ThrowIOExceptionWithLastError(env, "port_getn");
|
||||
}
|
||||
|
||||
return (jint)n;
|
||||
}
|
143
src/java.base/solaris/native/libnio/fs/SolarisNativeDispatcher.c
Normal file
143
src/java.base/solaris/native/libnio/fs/SolarisNativeDispatcher.c
Normal file
|
@ -0,0 +1,143 @@
|
|||
/*
|
||||
* Copyright (c) 2008, 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
|
||||
* 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 "jni.h"
|
||||
#include "jni_util.h"
|
||||
#include "jvm.h"
|
||||
#include "jlong.h"
|
||||
|
||||
#include <strings.h>
|
||||
#include <errno.h>
|
||||
#include <sys/acl.h>
|
||||
#include <sys/mnttab.h>
|
||||
#include <sys/mkdev.h>
|
||||
|
||||
#include "jni.h"
|
||||
|
||||
#include "sun_nio_fs_SolarisNativeDispatcher.h"
|
||||
|
||||
static jfieldID entry_name;
|
||||
static jfieldID entry_dir;
|
||||
static jfieldID entry_fstype;
|
||||
static jfieldID entry_options;
|
||||
static jfieldID entry_dev;
|
||||
|
||||
static void throwUnixException(JNIEnv* env, int errnum) {
|
||||
jobject x = JNU_NewObjectByName(env, "sun/nio/fs/UnixException",
|
||||
"(I)V", errnum);
|
||||
if (x != NULL) {
|
||||
(*env)->Throw(env, x);
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_sun_nio_fs_SolarisNativeDispatcher_init(JNIEnv *env, jclass clazz) {
|
||||
clazz = (*env)->FindClass(env, "sun/nio/fs/UnixMountEntry");
|
||||
CHECK_NULL(clazz);
|
||||
entry_name = (*env)->GetFieldID(env, clazz, "name", "[B");
|
||||
CHECK_NULL(entry_name);
|
||||
entry_dir = (*env)->GetFieldID(env, clazz, "dir", "[B");
|
||||
CHECK_NULL(entry_dir);
|
||||
entry_fstype = (*env)->GetFieldID(env, clazz, "fstype", "[B");
|
||||
CHECK_NULL(entry_fstype);
|
||||
entry_options = (*env)->GetFieldID(env, clazz, "opts", "[B");
|
||||
CHECK_NULL(entry_options);
|
||||
entry_dev = (*env)->GetFieldID(env, clazz, "dev", "J");
|
||||
CHECK_NULL(entry_dev);
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL
|
||||
Java_sun_nio_fs_SolarisNativeDispatcher_facl(JNIEnv* env, jclass this, jint fd,
|
||||
jint cmd, jint nentries, jlong address)
|
||||
{
|
||||
void* aclbufp = jlong_to_ptr(address);
|
||||
int n = -1;
|
||||
|
||||
n = facl((int)fd, (int)cmd, (int)nentries, aclbufp);
|
||||
if (n == -1) {
|
||||
throwUnixException(env, errno);
|
||||
}
|
||||
return (jint)n;
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL
|
||||
Java_sun_nio_fs_SolarisNativeDispatcher_getextmntent(JNIEnv* env, jclass this,
|
||||
jlong value, jobject entry)
|
||||
{
|
||||
struct extmnttab ent;
|
||||
FILE* fp = jlong_to_ptr(value);
|
||||
jsize len;
|
||||
jbyteArray bytes;
|
||||
char* name;
|
||||
char* dir;
|
||||
char* fstype;
|
||||
char* options;
|
||||
dev_t dev;
|
||||
|
||||
if (getextmntent(fp, &ent, 0))
|
||||
return -1;
|
||||
name = ent.mnt_special;
|
||||
dir = ent.mnt_mountp;
|
||||
fstype = ent.mnt_fstype;
|
||||
options = ent.mnt_mntopts;
|
||||
dev = makedev(ent.mnt_major, ent.mnt_minor);
|
||||
if (dev == NODEV) {
|
||||
throwUnixException(env, errno);
|
||||
return -1;
|
||||
}
|
||||
|
||||
len = strlen(name);
|
||||
bytes = (*env)->NewByteArray(env, len);
|
||||
if (bytes == NULL)
|
||||
return -1;
|
||||
(*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)name);
|
||||
(*env)->SetObjectField(env, entry, entry_name, bytes);
|
||||
|
||||
len = strlen(dir);
|
||||
bytes = (*env)->NewByteArray(env, len);
|
||||
if (bytes == NULL)
|
||||
return -1;
|
||||
(*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)dir);
|
||||
(*env)->SetObjectField(env, entry, entry_dir, bytes);
|
||||
|
||||
len = strlen(fstype);
|
||||
bytes = (*env)->NewByteArray(env, len);
|
||||
if (bytes == NULL)
|
||||
return -1;
|
||||
(*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)fstype);
|
||||
(*env)->SetObjectField(env, entry, entry_fstype, bytes);
|
||||
|
||||
len = strlen(options);
|
||||
bytes = (*env)->NewByteArray(env, len);
|
||||
if (bytes == NULL)
|
||||
return -1;
|
||||
(*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)options);
|
||||
(*env)->SetObjectField(env, entry, entry_options, bytes);
|
||||
|
||||
if (dev != 0)
|
||||
(*env)->SetLongField(env, entry, entry_dev, (jlong)dev);
|
||||
|
||||
return 0;
|
||||
}
|
104
src/java.base/solaris/native/libnio/fs/SolarisWatchService.c
Normal file
104
src/java.base/solaris/native/libnio/fs/SolarisWatchService.c
Normal file
|
@ -0,0 +1,104 @@
|
|||
/*
|
||||
* Copyright (c) 2008, 2009, 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 "jni.h"
|
||||
#include "jni_util.h"
|
||||
#include "jvm.h"
|
||||
#include "jlong.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <dlfcn.h>
|
||||
#include <sys/types.h>
|
||||
#include <port.h> // Solaris 10
|
||||
|
||||
#include "sun_nio_fs_SolarisWatchService.h"
|
||||
|
||||
static void throwUnixException(JNIEnv* env, int errnum) {
|
||||
jobject x = JNU_NewObjectByName(env, "sun/nio/fs/UnixException",
|
||||
"(I)V", errnum);
|
||||
if (x != NULL) {
|
||||
(*env)->Throw(env, x);
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_sun_nio_fs_SolarisWatchService_init(JNIEnv *env, jclass clazz)
|
||||
{
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL
|
||||
Java_sun_nio_fs_SolarisWatchService_portCreate
|
||||
(JNIEnv* env, jclass clazz)
|
||||
{
|
||||
int port = port_create();
|
||||
if (port == -1) {
|
||||
throwUnixException(env, errno);
|
||||
}
|
||||
return (jint)port;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_sun_nio_fs_SolarisWatchService_portAssociate
|
||||
(JNIEnv* env, jclass clazz, jint port, jint source, jlong objectAddress, jint events)
|
||||
{
|
||||
uintptr_t object = (uintptr_t)jlong_to_ptr(objectAddress);
|
||||
|
||||
if (port_associate((int)port, (int)source, object, (int)events, NULL) == -1) {
|
||||
throwUnixException(env, errno);
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_sun_nio_fs_SolarisWatchService_portDissociate
|
||||
(JNIEnv* env, jclass clazz, jint port, jint source, jlong objectAddress)
|
||||
{
|
||||
uintptr_t object = (uintptr_t)jlong_to_ptr(objectAddress);
|
||||
|
||||
if (port_dissociate((int)port, (int)source, object) == -1) {
|
||||
throwUnixException(env, errno);
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_sun_nio_fs_SolarisWatchService_portSend(JNIEnv* env, jclass clazz,
|
||||
jint port, jint events)
|
||||
{
|
||||
if (port_send((int)port, (int)events, NULL) == -1) {
|
||||
throwUnixException(env, errno);
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL
|
||||
Java_sun_nio_fs_SolarisWatchService_portGetn(JNIEnv* env, jclass clazz,
|
||||
jint port, jlong arrayAddress, jint max)
|
||||
{
|
||||
uint_t n = 1;
|
||||
port_event_t* list = (port_event_t*)jlong_to_ptr(arrayAddress);
|
||||
|
||||
if (port_getn((int)port, list, (uint_t)max, &n, NULL) == -1) {
|
||||
throwUnixException(env, errno);
|
||||
}
|
||||
return (jint)n;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue