提交 fd4ec021 编写于 作者: W wetmore

Merge

...@@ -60,16 +60,9 @@ class StringCharBuffer // package-private ...@@ -60,16 +60,9 @@ class StringCharBuffer // package-private
str = s; str = s;
} }
private StringCharBuffer(CharSequence s, int mark,
int pos, int limit, int cap)
{
super(mark, pos, limit, cap);
str = s;
}
public CharBuffer duplicate() { public CharBuffer duplicate() {
return new StringCharBuffer(str, markValue(), return new StringCharBuffer(str, markValue(),
position(), limit(), capacity()); position(), limit(), capacity(), offset);
} }
public CharBuffer asReadOnlyBuffer() { public CharBuffer asReadOnlyBuffer() {
...@@ -77,11 +70,11 @@ class StringCharBuffer // package-private ...@@ -77,11 +70,11 @@ class StringCharBuffer // package-private
} }
public final char get() { public final char get() {
return str.charAt(nextGetIndex()); return str.charAt(nextGetIndex() + offset);
} }
public final char get(int index) { public final char get(int index) {
return str.charAt(checkIndex(index)); return str.charAt(checkIndex(index) + offset);
} }
// ## Override bulk get methods for better performance // ## Override bulk get methods for better performance
...@@ -103,15 +96,16 @@ class StringCharBuffer // package-private ...@@ -103,15 +96,16 @@ class StringCharBuffer // package-private
} }
final String toString(int start, int end) { final String toString(int start, int end) {
return str.toString().substring(start, end); return str.toString().substring(start + offset, end + offset);
} }
public final CharSequence subSequence(int start, int end) { public final CharSequence subSequence(int start, int end) {
try { try {
int pos = position(); int pos = position();
return new StringCharBuffer(str, return new StringCharBuffer(str, -1,
pos + checkIndex(start, pos), pos + checkIndex(start, pos),
pos + checkIndex(end, pos)); pos + checkIndex(end, pos),
remaining(), offset);
} catch (IllegalArgumentException x) { } catch (IllegalArgumentException x) {
throw new IndexOutOfBoundsException(); throw new IndexOutOfBoundsException();
} }
......
...@@ -32,9 +32,8 @@ import java.security.AccessController; ...@@ -32,9 +32,8 @@ import java.security.AccessController;
import java.security.Permission; import java.security.Permission;
import java.security.PrivilegedAction; import java.security.PrivilegedAction;
import java.util.Iterator; import java.util.Iterator;
import sun.misc.Service; import java.util.ServiceLoader;
import sun.misc.ServiceConfigurationError; import java.util.ServiceConfigurationError;
// These imports needed only as a workaround for a JavaDoc bug // These imports needed only as a workaround for a JavaDoc bug
import java.lang.RuntimePermission; import java.lang.RuntimePermission;
...@@ -274,12 +273,14 @@ public abstract class Preferences { ...@@ -274,12 +273,14 @@ public abstract class Preferences {
private static PreferencesFactory factory1() { private static PreferencesFactory factory1() {
// 2. Try service provider interface // 2. Try service provider interface
Iterator i = Service.providers(PreferencesFactory.class, Iterator<PreferencesFactory> itr = ServiceLoader
ClassLoader.getSystemClassLoader()); .load(PreferencesFactory.class, ClassLoader.getSystemClassLoader())
.iterator();
// choose first provider instance // choose first provider instance
while (i.hasNext()) { while (itr.hasNext()) {
try { try {
return (PreferencesFactory) i.next(); return itr.next();
} catch (ServiceConfigurationError sce) { } catch (ServiceConfigurationError sce) {
if (sce.getCause() instanceof SecurityException) { if (sce.getCause() instanceof SecurityException) {
// Ignore the security exception, try the next provider // Ignore the security exception, try the next provider
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include <sys/stat.h> #include <sys/stat.h>
#include "sun_nio_ch_FileChannelImpl.h" #include "sun_nio_ch_FileChannelImpl.h"
#include "java_lang_Integer.h" #include "java_lang_Integer.h"
#include "java_lang_Long.h"
#include "nio.h" #include "nio.h"
#include "nio_util.h" #include "nio_util.h"
#include <dlfcn.h> #include <dlfcn.h>
...@@ -291,7 +292,11 @@ Java_sun_nio_ch_FileChannelImpl_lock0(JNIEnv *env, jobject this, jobject fdo, ...@@ -291,7 +292,11 @@ Java_sun_nio_ch_FileChannelImpl_lock0(JNIEnv *env, jobject this, jobject fdo,
struct flock64 fl; struct flock64 fl;
fl.l_whence = SEEK_SET; fl.l_whence = SEEK_SET;
if (size == (jlong)java_lang_Long_MAX_VALUE) {
fl.l_len = (off64_t)0;
} else {
fl.l_len = (off64_t)size; fl.l_len = (off64_t)size;
}
fl.l_start = (off64_t)pos; fl.l_start = (off64_t)pos;
if (shared == JNI_TRUE) { if (shared == JNI_TRUE) {
fl.l_type = F_RDLCK; fl.l_type = F_RDLCK;
...@@ -325,7 +330,11 @@ Java_sun_nio_ch_FileChannelImpl_release0(JNIEnv *env, jobject this, ...@@ -325,7 +330,11 @@ Java_sun_nio_ch_FileChannelImpl_release0(JNIEnv *env, jobject this,
int cmd = F_SETLK64; int cmd = F_SETLK64;
fl.l_whence = SEEK_SET; fl.l_whence = SEEK_SET;
if (size == (jlong)java_lang_Long_MAX_VALUE) {
fl.l_len = (off64_t)0;
} else {
fl.l_len = (off64_t)size; fl.l_len = (off64_t)size;
}
fl.l_start = (off64_t)pos; fl.l_start = (off64_t)pos;
fl.l_type = F_UNLCK; fl.l_type = F_UNLCK;
lockResult = fcntl(fd, cmd, &fl); lockResult = fcntl(fd, cmd, &fl);
......
...@@ -53,6 +53,57 @@ public class StringCharBufferSliceTest { ...@@ -53,6 +53,57 @@ public class StringCharBufferSliceTest {
buff = CharBuffer.wrap(in, 3, in.length()); buff = CharBuffer.wrap(in, 3, in.length());
test(buff, buff.slice()); test(buff, buff.slice());
System.out.println(
">>> StringCharBufferSliceTest-main: testing slice result with get()");
buff.position(4);
buff.limit(7);
CharBuffer slice = buff.slice();
for (int i = 0; i < 3; i++) {
if (slice.get() != buff.get()) {
throw new RuntimeException("Wrong characters in slice result.");
}
}
System.out.println(
">>> StringCharBufferSliceTest-main: testing slice result with get(int)");
buff.position(4);
buff.limit(7);
slice = buff.slice();
for (int i = 0; i < 3; i++) {
if (slice.get(i) != buff.get(4 + i)) {
throw new RuntimeException("Wrong characters in slice result.");
}
}
System.out.println(
">>> StringCharBufferSliceTest-main: testing toString.");
buff.position(4);
buff.limit(7);
slice = buff.slice();
if (! slice.toString().equals("tes")) {
throw new RuntimeException("bad toString() after slice(): " + slice.toString());
}
System.out.println(
">>> StringCharBufferSliceTest-main: testing subSequence.");
buff.position(4);
buff.limit(8);
slice = buff.slice();
CharSequence subSeq = slice.subSequence(1, 3);
if (subSeq.charAt(0) != 'e' || subSeq.charAt(1) != 's') {
throw new RuntimeException("bad subSequence() after slice(): '" + subSeq + "'");
}
System.out.println(
">>> StringCharBufferSliceTest-main: testing duplicate.");
buff.position(4);
buff.limit(8);
slice = buff.slice();
CharBuffer dupe = slice.duplicate();
if (dupe.charAt(0) != 't' || dupe.charAt(1) != 'e'
|| dupe.charAt(2) != 's' || dupe.charAt(3) != 't') {
throw new RuntimeException("bad duplicate() after slice(): '" + dupe + "'");
}
System.out.println(">>> StringCharBufferSliceTest-main: done!"); System.out.println(">>> StringCharBufferSliceTest-main: done!");
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册