Merge
This commit is contained in:
commit
99370e418f
jdk
src
share/classes/java
solaris/native/sun/nio/ch
test/java/nio/Buffer
@ -60,16 +60,9 @@ class StringCharBuffer // package-private
|
||||
str = s;
|
||||
}
|
||||
|
||||
private StringCharBuffer(CharSequence s, int mark,
|
||||
int pos, int limit, int cap)
|
||||
{
|
||||
super(mark, pos, limit, cap);
|
||||
str = s;
|
||||
}
|
||||
|
||||
public CharBuffer duplicate() {
|
||||
return new StringCharBuffer(str, markValue(),
|
||||
position(), limit(), capacity());
|
||||
position(), limit(), capacity(), offset);
|
||||
}
|
||||
|
||||
public CharBuffer asReadOnlyBuffer() {
|
||||
@ -77,11 +70,11 @@ class StringCharBuffer // package-private
|
||||
}
|
||||
|
||||
public final char get() {
|
||||
return str.charAt(nextGetIndex());
|
||||
return str.charAt(nextGetIndex() + offset);
|
||||
}
|
||||
|
||||
public final char get(int index) {
|
||||
return str.charAt(checkIndex(index));
|
||||
return str.charAt(checkIndex(index) + offset);
|
||||
}
|
||||
|
||||
// ## Override bulk get methods for better performance
|
||||
@ -103,15 +96,16 @@ class StringCharBuffer // package-private
|
||||
}
|
||||
|
||||
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) {
|
||||
try {
|
||||
int pos = position();
|
||||
return new StringCharBuffer(str,
|
||||
return new StringCharBuffer(str, -1,
|
||||
pos + checkIndex(start, pos),
|
||||
pos + checkIndex(end, pos));
|
||||
pos + checkIndex(end, pos),
|
||||
remaining(), offset);
|
||||
} catch (IllegalArgumentException x) {
|
||||
throw new IndexOutOfBoundsException();
|
||||
}
|
||||
|
@ -32,9 +32,8 @@ import java.security.AccessController;
|
||||
import java.security.Permission;
|
||||
import java.security.PrivilegedAction;
|
||||
import java.util.Iterator;
|
||||
import sun.misc.Service;
|
||||
import sun.misc.ServiceConfigurationError;
|
||||
|
||||
import java.util.ServiceLoader;
|
||||
import java.util.ServiceConfigurationError;
|
||||
|
||||
// These imports needed only as a workaround for a JavaDoc bug
|
||||
import java.lang.RuntimePermission;
|
||||
@ -274,12 +273,14 @@ public abstract class Preferences {
|
||||
|
||||
private static PreferencesFactory factory1() {
|
||||
// 2. Try service provider interface
|
||||
Iterator i = Service.providers(PreferencesFactory.class,
|
||||
ClassLoader.getSystemClassLoader());
|
||||
Iterator<PreferencesFactory> itr = ServiceLoader
|
||||
.load(PreferencesFactory.class, ClassLoader.getSystemClassLoader())
|
||||
.iterator();
|
||||
|
||||
// choose first provider instance
|
||||
while (i.hasNext()) {
|
||||
while (itr.hasNext()) {
|
||||
try {
|
||||
return (PreferencesFactory) i.next();
|
||||
return itr.next();
|
||||
} catch (ServiceConfigurationError sce) {
|
||||
if (sce.getCause() instanceof SecurityException) {
|
||||
// Ignore the security exception, try the next provider
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include <sys/stat.h>
|
||||
#include "sun_nio_ch_FileChannelImpl.h"
|
||||
#include "java_lang_Integer.h"
|
||||
#include "java_lang_Long.h"
|
||||
#include "nio.h"
|
||||
#include "nio_util.h"
|
||||
#include <dlfcn.h>
|
||||
@ -291,7 +292,11 @@ Java_sun_nio_ch_FileChannelImpl_lock0(JNIEnv *env, jobject this, jobject fdo,
|
||||
struct flock64 fl;
|
||||
|
||||
fl.l_whence = SEEK_SET;
|
||||
fl.l_len = (off64_t)size;
|
||||
if (size == (jlong)java_lang_Long_MAX_VALUE) {
|
||||
fl.l_len = (off64_t)0;
|
||||
} else {
|
||||
fl.l_len = (off64_t)size;
|
||||
}
|
||||
fl.l_start = (off64_t)pos;
|
||||
if (shared == JNI_TRUE) {
|
||||
fl.l_type = F_RDLCK;
|
||||
@ -325,7 +330,11 @@ Java_sun_nio_ch_FileChannelImpl_release0(JNIEnv *env, jobject this,
|
||||
int cmd = F_SETLK64;
|
||||
|
||||
fl.l_whence = SEEK_SET;
|
||||
fl.l_len = (off64_t)size;
|
||||
if (size == (jlong)java_lang_Long_MAX_VALUE) {
|
||||
fl.l_len = (off64_t)0;
|
||||
} else {
|
||||
fl.l_len = (off64_t)size;
|
||||
}
|
||||
fl.l_start = (off64_t)pos;
|
||||
fl.l_type = F_UNLCK;
|
||||
lockResult = fcntl(fd, cmd, &fl);
|
||||
|
@ -53,6 +53,57 @@ public class StringCharBufferSliceTest {
|
||||
buff = CharBuffer.wrap(in, 3, in.length());
|
||||
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!");
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user