Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
11faca44
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
11faca44
编写于
8月 16, 2012
作者:
A
alanb
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
7191556: (fs) UnixNativeDispatcher.getextmntent should be moved into platform specific code
Reviewed-by: andrew
上级
c6969681
变更
18
隐藏空白更改
内联
并排
Showing
18 changed file
with
201 addition
and
136 deletion
+201
-136
make/java/nio/Makefile
make/java/nio/Makefile
+0
-3
make/java/nio/mapfile-bsd
make/java/nio/mapfile-bsd
+0
-5
make/java/nio/mapfile-linux
make/java/nio/mapfile-linux
+1
-1
make/java/nio/mapfile-solaris
make/java/nio/mapfile-solaris
+1
-1
src/solaris/classes/sun/nio/fs/DefaultFileTypeDetector.java
src/solaris/classes/sun/nio/fs/DefaultFileTypeDetector.java
+4
-1
src/solaris/classes/sun/nio/fs/LinuxFileSystem.java
src/solaris/classes/sun/nio/fs/LinuxFileSystem.java
+1
-1
src/solaris/classes/sun/nio/fs/LinuxFileSystemProvider.java
src/solaris/classes/sun/nio/fs/LinuxFileSystemProvider.java
+6
-0
src/solaris/classes/sun/nio/fs/LinuxNativeDispatcher.java
src/solaris/classes/sun/nio/fs/LinuxNativeDispatcher.java
+9
-4
src/solaris/classes/sun/nio/fs/SolarisFileSystem.java
src/solaris/classes/sun/nio/fs/SolarisFileSystem.java
+1
-1
src/solaris/classes/sun/nio/fs/SolarisFileSystemProvider.java
...solaris/classes/sun/nio/fs/SolarisFileSystemProvider.java
+6
-0
src/solaris/classes/sun/nio/fs/SolarisNativeDispatcher.java
src/solaris/classes/sun/nio/fs/SolarisNativeDispatcher.java
+6
-0
src/solaris/classes/sun/nio/fs/UnixFileSystemProvider.java
src/solaris/classes/sun/nio/fs/UnixFileSystemProvider.java
+14
-0
src/solaris/classes/sun/nio/fs/UnixNativeDispatcher.java
src/solaris/classes/sun/nio/fs/UnixNativeDispatcher.java
+0
-5
src/solaris/native/sun/nio/fs/BsdNativeDispatcher.c
src/solaris/native/sun/nio/fs/BsdNativeDispatcher.c
+1
-7
src/solaris/native/sun/nio/fs/GnomeFileTypeDetector.c
src/solaris/native/sun/nio/fs/GnomeFileTypeDetector.c
+1
-1
src/solaris/native/sun/nio/fs/LinuxNativeDispatcher.c
src/solaris/native/sun/nio/fs/LinuxNativeDispatcher.c
+70
-0
src/solaris/native/sun/nio/fs/SolarisNativeDispatcher.c
src/solaris/native/sun/nio/fs/SolarisNativeDispatcher.c
+80
-1
src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c
src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c
+0
-105
未找到文件。
make/java/nio/Makefile
浏览文件 @
11faca44
...
...
@@ -277,7 +277,6 @@ FILES_java += \
sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java
\
sun/nio/ch/UnixAsynchronousSocketChannelImpl.java
\
\
sun/nio/fs/GnomeFileTypeDetector.java
\
sun/nio/fs/BsdFileStore.java
\
sun/nio/fs/BsdFileSystem.java
\
sun/nio/fs/BsdFileSystemProvider.java
\
...
...
@@ -312,7 +311,6 @@ FILES_c += \
UnixAsynchronousServerSocketChannelImpl.c
\
UnixAsynchronousSocketChannelImpl.c
\
\
GnomeFileTypeDetector.c
\
BsdNativeDispatcher.c
\
MacOSXNativeDispatcher.c
\
UnixCopyFile.c
\
...
...
@@ -329,7 +327,6 @@ FILES_export += \
sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java
\
sun/nio/ch/UnixAsynchronousSocketChannelImpl.java
\
\
sun/nio/fs/GnomeFileTypeDetector.java
\
sun/nio/fs/BsdNativeDispatcher.java
\
sun/nio/fs/UnixCopyFile.java
\
sun/nio/fs/UnixNativeDispatcher.java
...
...
make/java/nio/mapfile-bsd
浏览文件 @
11faca44
...
...
@@ -121,10 +121,6 @@ SUNWprivate_1.1 {
Java_sun_nio_fs_BsdNativeDispatcher_getfsstat;
Java_sun_nio_fs_BsdNativeDispatcher_fsstatEntry;
Java_sun_nio_fs_BsdNativeDispatcher_endfsstat;
Java_sun_nio_fs_GnomeFileTypeDetector_initializeGio;
Java_sun_nio_fs_GnomeFileTypeDetector_probeUsingGio;
Java_sun_nio_fs_GnomeFileTypeDetector_initializeGnomeVfs;
Java_sun_nio_fs_GnomeFileTypeDetector_probeUsingGnomeVfs;
Java_sun_nio_fs_UnixNativeDispatcher_init;
Java_sun_nio_fs_UnixNativeDispatcher_getcwd;
Java_sun_nio_fs_UnixNativeDispatcher_strerror;
...
...
@@ -170,7 +166,6 @@ SUNWprivate_1.1 {
Java_sun_nio_fs_UnixNativeDispatcher_getgrgid;
Java_sun_nio_fs_UnixNativeDispatcher_getpwnam0;
Java_sun_nio_fs_UnixNativeDispatcher_getgrnam0;
Java_sun_nio_fs_UnixNativeDispatcher_getextmntent;
Java_sun_nio_fs_UnixCopyFile_transfer;
handleSocketError;
...
...
make/java/nio/mapfile-linux
浏览文件 @
11faca44
...
...
@@ -143,6 +143,7 @@ SUNWprivate_1.1 {
Java_sun_nio_fs_LinuxNativeDispatcher_fsetxattr0;
Java_sun_nio_fs_LinuxNativeDispatcher_fremovexattr0;
Java_sun_nio_fs_LinuxNativeDispatcher_setmntent0;
Java_sun_nio_fs_LinuxNativeDispatcher_getmntent;
Java_sun_nio_fs_LinuxNativeDispatcher_endmntent;
Java_sun_nio_fs_UnixNativeDispatcher_init;
Java_sun_nio_fs_UnixNativeDispatcher_getcwd;
...
...
@@ -189,7 +190,6 @@ SUNWprivate_1.1 {
Java_sun_nio_fs_UnixNativeDispatcher_getgrgid;
Java_sun_nio_fs_UnixNativeDispatcher_getpwnam0;
Java_sun_nio_fs_UnixNativeDispatcher_getgrnam0;
Java_sun_nio_fs_UnixNativeDispatcher_getextmntent;
Java_sun_nio_fs_UnixCopyFile_transfer;
handleSocketError;
...
...
make/java/nio/mapfile-solaris
浏览文件 @
11faca44
...
...
@@ -169,10 +169,10 @@ SUNWprivate_1.1 {
Java_sun_nio_fs_UnixNativeDispatcher_getgrgid;
Java_sun_nio_fs_UnixNativeDispatcher_getpwnam0;
Java_sun_nio_fs_UnixNativeDispatcher_getgrnam0;
Java_sun_nio_fs_UnixNativeDispatcher_getextmntent;
Java_sun_nio_fs_UnixCopyFile_transfer;
Java_sun_nio_fs_SolarisNativeDispatcher_init;
Java_sun_nio_fs_SolarisNativeDispatcher_facl;
Java_sun_nio_fs_SolarisNativeDispatcher_getextmntent;
Java_sun_nio_fs_SolarisWatchService_init;
Java_sun_nio_fs_SolarisWatchService_portCreate;
Java_sun_nio_fs_SolarisWatchService_portAssociate;
...
...
src/solaris/classes/sun/nio/fs/DefaultFileTypeDetector.java
浏览文件 @
11faca44
...
...
@@ -25,12 +25,15 @@
package
sun.nio.fs
;
import
java.nio.file.FileSystems
;
import
java.nio.file.spi.FileTypeDetector
;
import
java.nio.file.spi.FileSystemProvider
;
public
class
DefaultFileTypeDetector
{
private
DefaultFileTypeDetector
()
{
}
public
static
FileTypeDetector
create
()
{
return
new
GnomeFileTypeDetector
();
FileSystemProvider
provider
=
FileSystems
.
getDefault
().
provider
();
return
((
UnixFileSystemProvider
)
provider
).
getFileTypeDetector
();
}
}
src/solaris/classes/sun/nio/fs/LinuxFileSystem.java
浏览文件 @
11faca44
...
...
@@ -82,7 +82,7 @@ class LinuxFileSystem extends UnixFileSystem {
try
{
for
(;;)
{
UnixMountEntry
entry
=
new
UnixMountEntry
();
int
res
=
get
ext
mntent
(
fp
,
entry
);
int
res
=
getmntent
(
fp
,
entry
);
if
(
res
<
0
)
break
;
entries
.
add
(
entry
);
...
...
src/solaris/classes/sun/nio/fs/LinuxFileSystemProvider.java
浏览文件 @
11faca44
...
...
@@ -27,6 +27,7 @@ package sun.nio.fs;
import
java.nio.file.*
;
import
java.nio.file.attribute.*
;
import
java.nio.file.spi.FileTypeDetector
;
import
java.io.IOException
;
/**
...
...
@@ -96,4 +97,9 @@ public class LinuxFileSystemProvider extends UnixFileSystemProvider {
return
super
.
readAttributes
(
file
,
type
,
options
);
}
}
@Override
FileTypeDetector
getFileTypeDetector
()
{
return
new
GnomeFileTypeDetector
();
}
}
src/solaris/classes/sun/nio/fs/LinuxNativeDispatcher.java
浏览文件 @
11faca44
...
...
@@ -51,9 +51,15 @@ class LinuxNativeDispatcher extends UnixNativeDispatcher {
private
static
native
long
setmntent0
(
long
pathAddress
,
long
typeAddress
)
throws
UnixException
;
/**
* int endmntent(FILE* filep);
*/
/**
* int getmntent(FILE *fp, struct mnttab *mp, int len);
*/
static
native
int
getmntent
(
long
fp
,
UnixMountEntry
entry
)
throws
UnixException
;
/**
* int endmntent(FILE* filep);
*/
static
native
void
endmntent
(
long
stream
)
throws
UnixException
;
/**
...
...
@@ -90,7 +96,6 @@ class LinuxNativeDispatcher extends UnixNativeDispatcher {
private
static
native
void
fsetxattr0
(
int
filedes
,
long
nameAddress
,
long
valueAdddress
,
int
valueLen
)
throws
UnixException
;
/**
* fremovexattr(int filedes, const char *name);
*/
...
...
src/solaris/classes/sun/nio/fs/SolarisFileSystem.java
浏览文件 @
11faca44
...
...
@@ -30,7 +30,7 @@ import java.io.IOException;
import
java.util.*
;
import
java.security.AccessController
;
import
sun.security.action.GetPropertyAction
;
import
static
sun
.
nio
.
fs
.
Unix
NativeDispatcher
.*;
import
static
sun
.
nio
.
fs
.
Solaris
NativeDispatcher
.*;
/**
* Solaris implementation of FileSystem
...
...
src/solaris/classes/sun/nio/fs/SolarisFileSystemProvider.java
浏览文件 @
11faca44
...
...
@@ -27,6 +27,7 @@ package sun.nio.fs;
import
java.nio.file.*
;
import
java.nio.file.attribute.*
;
import
java.nio.file.spi.FileTypeDetector
;
import
java.io.IOException
;
/**
...
...
@@ -79,4 +80,9 @@ public class SolarisFileSystemProvider extends UnixFileSystemProvider {
Util
.
followLinks
(
options
));
return
super
.
getFileAttributeView
(
obj
,
name
,
options
);
}
@Override
FileTypeDetector
getFileTypeDetector
()
{
return
new
GnomeFileTypeDetector
();
}
}
src/solaris/classes/sun/nio/fs/SolarisNativeDispatcher.java
浏览文件 @
11faca44
...
...
@@ -35,6 +35,12 @@ import java.security.PrivilegedAction;
class
SolarisNativeDispatcher
extends
UnixNativeDispatcher
{
private
SolarisNativeDispatcher
()
{
}
/**
* int getextmntent(FILE *fp, struct extmnttab *mp, int len);
*/
static
native
int
getextmntent
(
long
fp
,
UnixMountEntry
entry
)
throws
UnixException
;
/**
* int facl(int filedes, int cmd, int nentries, void aclbufp)
*/
...
...
src/solaris/classes/sun/nio/fs/UnixFileSystemProvider.java
浏览文件 @
11faca44
...
...
@@ -27,6 +27,7 @@ package sun.nio.fs;
import
java.nio.file.*
;
import
java.nio.file.attribute.*
;
import
java.nio.file.spi.FileTypeDetector
;
import
java.nio.channels.*
;
import
java.net.URI
;
import
java.util.concurrent.ExecutorService
;
...
...
@@ -495,4 +496,17 @@ public abstract class UnixFileSystemProvider
return
null
;
// keep compiler happy
}
}
/**
* Returns a {@code FileTypeDetector} for this platform.
*/
FileTypeDetector
getFileTypeDetector
()
{
return
new
AbstractFileTypeDetector
()
{
@Override
public
String
implProbeContentType
(
Path
file
)
{
return
null
;
}
};
}
}
src/solaris/classes/sun/nio/fs/UnixNativeDispatcher.java
浏览文件 @
11faca44
...
...
@@ -497,11 +497,6 @@ class UnixNativeDispatcher {
}
private
static
native
int
getgrnam0
(
long
nameAddress
)
throws
UnixException
;
/**
* int getextmntent(FILE *fp, struct extmnttab *mp, int len);
*/
static
native
int
getextmntent
(
long
fp
,
UnixMountEntry
entry
)
throws
UnixException
;
/**
* statvfs(const char* path, struct statvfs *buf)
*/
...
...
src/solaris/native/sun/nio/fs/BsdNativeDispatcher.c
浏览文件 @
11faca44
...
...
@@ -46,8 +46,6 @@ static jfieldID entry_name;
static
jfieldID
entry_dir
;
static
jfieldID
entry_fstype
;
static
jfieldID
entry_options
;
static
jfieldID
entry_dev
;
struct
fsstat_iter
{
struct
statfs
*
buf
;
...
...
@@ -81,7 +79,6 @@ Java_sun_nio_fs_BsdNativeDispatcher_initIDs(JNIEnv* env, jclass this)
entry_dir
=
(
*
env
)
->
GetFieldID
(
env
,
clazz
,
"dir"
,
"[B"
);
entry_fstype
=
(
*
env
)
->
GetFieldID
(
env
,
clazz
,
"fstype"
,
"[B"
);
entry_options
=
(
*
env
)
->
GetFieldID
(
env
,
clazz
,
"opts"
,
"[B"
);
entry_dev
=
(
*
env
)
->
GetFieldID
(
env
,
clazz
,
"dev"
,
"J"
);
}
JNIEXPORT
jlong
JNICALL
...
...
@@ -160,7 +157,6 @@ Java_sun_nio_fs_BsdNativeDispatcher_fsstatEntry(JNIEnv* env, jclass this,
options
=
"ro"
;
else
options
=
""
;
dev
=
0
;
iter
->
pos
++
;
...
...
@@ -192,9 +188,6 @@ Java_sun_nio_fs_BsdNativeDispatcher_fsstatEntry(JNIEnv* env, jclass this,
(
*
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
;
}
...
...
@@ -208,3 +201,4 @@ Java_sun_nio_fs_BsdNativeDispatcher_endfsstat(JNIEnv* env, jclass this, jlong va
free
(
iter
);
}
}
src/solaris/native/sun/nio/fs/GnomeFileTypeDetector.c
浏览文件 @
11faca44
...
...
@@ -35,7 +35,7 @@
#include <strings.h>
#endif
#if defined(__linux__)
|| defined(__APPLE__)
#if defined(__linux__)
#include <string.h>
#endif
...
...
src/solaris/native/sun/nio/fs/LinuxNativeDispatcher.c
浏览文件 @
11faca44
...
...
@@ -29,6 +29,7 @@
#include "jlong.h"
#include <stdio.h>
#include <string.h>
#include <dlfcn.h>
#include <errno.h>
#include <mntent.h>
...
...
@@ -45,6 +46,11 @@ fsetxattr_func* my_fsetxattr_func = NULL;
fremovexattr_func
*
my_fremovexattr_func
=
NULL
;
flistxattr_func
*
my_flistxattr_func
=
NULL
;
static
jfieldID
entry_name
;
static
jfieldID
entry_dir
;
static
jfieldID
entry_fstype
;
static
jfieldID
entry_options
;
static
void
throwUnixException
(
JNIEnv
*
env
,
int
errnum
)
{
jobject
x
=
JNU_NewObjectByName
(
env
,
"sun/nio/fs/UnixException"
,
"(I)V"
,
errnum
);
...
...
@@ -60,6 +66,15 @@ Java_sun_nio_fs_LinuxNativeDispatcher_init(JNIEnv *env, jclass clazz)
my_fsetxattr_func
=
(
fsetxattr_func
*
)
dlsym
(
RTLD_DEFAULT
,
"fsetxattr"
);
my_fremovexattr_func
=
(
fremovexattr_func
*
)
dlsym
(
RTLD_DEFAULT
,
"fremovexattr"
);
my_flistxattr_func
=
(
flistxattr_func
*
)
dlsym
(
RTLD_DEFAULT
,
"flistxattr"
);
clazz
=
(
*
env
)
->
FindClass
(
env
,
"sun/nio/fs/UnixMountEntry"
);
if
(
clazz
==
NULL
)
return
;
entry_name
=
(
*
env
)
->
GetFieldID
(
env
,
clazz
,
"name"
,
"[B"
);
entry_dir
=
(
*
env
)
->
GetFieldID
(
env
,
clazz
,
"dir"
,
"[B"
);
entry_fstype
=
(
*
env
)
->
GetFieldID
(
env
,
clazz
,
"fstype"
,
"[B"
);
entry_options
=
(
*
env
)
->
GetFieldID
(
env
,
clazz
,
"opts"
,
"[B"
);
}
JNIEXPORT
jint
JNICALL
...
...
@@ -151,6 +166,61 @@ Java_sun_nio_fs_LinuxNativeDispatcher_setmntent0(JNIEnv* env, jclass this, jlong
return
ptr_to_jlong
(
fp
);
}
JNIEXPORT
jint
JNICALL
Java_sun_nio_fs_LinuxNativeDispatcher_getmntent
(
JNIEnv
*
env
,
jclass
this
,
jlong
value
,
jobject
entry
)
{
struct
mntent
ent
;
char
buf
[
1024
];
int
buflen
=
sizeof
(
buf
);
struct
mntent
*
m
;
FILE
*
fp
=
jlong_to_ptr
(
value
);
jsize
len
;
jbyteArray
bytes
;
char
*
name
;
char
*
dir
;
char
*
fstype
;
char
*
options
;
m
=
getmntent_r
(
fp
,
&
ent
,
(
char
*
)
&
buf
,
buflen
);
if
(
m
==
NULL
)
return
-
1
;
name
=
m
->
mnt_fsname
;
dir
=
m
->
mnt_dir
;
fstype
=
m
->
mnt_type
;
options
=
m
->
mnt_opts
;
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
);
return
0
;
}
JNIEXPORT
void
JNICALL
Java_sun_nio_fs_LinuxNativeDispatcher_endmntent
(
JNIEnv
*
env
,
jclass
this
,
jlong
stream
)
{
...
...
src/solaris/native/sun/nio/fs/SolarisNativeDispatcher.c
浏览文件 @
11faca44
...
...
@@ -28,12 +28,22 @@
#include "jvm.h"
#include "jlong.h"
#include <
dlfcn
.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
);
...
...
@@ -44,6 +54,15 @@ static void throwUnixException(JNIEnv* env, int errnum) {
JNIEXPORT
void
JNICALL
Java_sun_nio_fs_SolarisNativeDispatcher_init
(
JNIEnv
*
env
,
jclass
clazz
)
{
clazz
=
(
*
env
)
->
FindClass
(
env
,
"sun/nio/fs/UnixMountEntry"
);
if
(
clazz
==
NULL
)
return
;
entry_name
=
(
*
env
)
->
GetFieldID
(
env
,
clazz
,
"name"
,
"[B"
);
entry_dir
=
(
*
env
)
->
GetFieldID
(
env
,
clazz
,
"dir"
,
"[B"
);
entry_fstype
=
(
*
env
)
->
GetFieldID
(
env
,
clazz
,
"fstype"
,
"[B"
);
entry_options
=
(
*
env
)
->
GetFieldID
(
env
,
clazz
,
"opts"
,
"[B"
);
entry_dev
=
(
*
env
)
->
GetFieldID
(
env
,
clazz
,
"dev"
,
"J"
);
}
JNIEXPORT
jint
JNICALL
...
...
@@ -59,3 +78,63 @@ Java_sun_nio_fs_SolarisNativeDispatcher_facl(JNIEnv* env, jclass this, jint fd,
}
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
;
}
src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c
浏览文件 @
11faca44
...
...
@@ -40,13 +40,10 @@
#ifdef __solaris__
#include <strings.h>
#include <sys/mnttab.h>
#include <sys/mkdev.h>
#endif
#ifdef __linux__
#include <string.h>
#include <mntent.h>
#endif
#ifdef _ALLBSD_SOURCE
...
...
@@ -1083,105 +1080,3 @@ Java_sun_nio_fs_UnixNativeDispatcher_getgrnam0(JNIEnv* env, jclass this,
return
gid
;
}
JNIEXPORT
jint
JNICALL
Java_sun_nio_fs_UnixNativeDispatcher_getextmntent
(
JNIEnv
*
env
,
jclass
this
,
jlong
value
,
jobject
entry
)
{
#ifdef __solaris__
struct
extmnttab
ent
;
#elif defined(_ALLBSD_SOURCE)
char
buf
[
1024
];
char
*
str
;
char
*
last
;
#else
struct
mntent
ent
;
char
buf
[
1024
];
int
buflen
=
sizeof
(
buf
);
struct
mntent
*
m
;
#endif
FILE
*
fp
=
jlong_to_ptr
(
value
);
jsize
len
;
jbyteArray
bytes
;
char
*
name
;
char
*
dir
;
char
*
fstype
;
char
*
options
;
dev_t
dev
;
#ifdef __solaris__
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
)
{
/* possible bug on Solaris 8 and 9 */
throwUnixException
(
env
,
errno
);
return
-
1
;
}
#elif defined(_ALLBSD_SOURCE)
again:
if
(
!
(
str
=
fgets
(
buf
,
sizeof
(
buf
),
fp
)))
return
-
1
;
name
=
strtok_r
(
str
,
"
\t\n
"
,
&
last
);
if
(
name
==
NULL
)
return
-
1
;
// skip comments
if
(
*
name
==
'#'
)
goto
again
;
dir
=
strtok_r
((
char
*
)
NULL
,
"
\t\n
"
,
&
last
);
fstype
=
strtok_r
((
char
*
)
NULL
,
"
\t\n
"
,
&
last
);
options
=
strtok_r
((
char
*
)
NULL
,
"
\t\n
"
,
&
last
);
if
(
options
==
NULL
)
return
-
1
;
dev
=
0
;
#else
m
=
getmntent_r
(
fp
,
&
ent
,
(
char
*
)
&
buf
,
buflen
);
if
(
m
==
NULL
)
return
-
1
;
name
=
m
->
mnt_fsname
;
dir
=
m
->
mnt_dir
;
fstype
=
m
->
mnt_type
;
options
=
m
->
mnt_opts
;
dev
=
0
;
#endif
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
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录