This is the mail archive of the
frysk@sourceware.org
mailing list for the frysk project.
Re: [patch] LogicalMemoryBuffer
Hi,
On Fri, 2007-07-20 at 14:02 +0200, Mark Wielaard wrote:
> - Some of the work with our ByteBuffers is somewhat awkward since we
> pretend everything is longs. But arrays in java cannot address anything
> bigger than a (positive) int. So having offsets and lengths as longs is
> somewhat cheating since it will never work in practise. So there is some
> casting back and forth. Maybe just change the ByteBuffer methods that
> work on arrays to just take ints for offset and length.
The following patch does this for ByteBuffers, FileDescriptors and
StatelessFile. Now it is possible to catch such issues during compile
time instead of during runtime one day when some offset or length is
bigger than what fits into an array. This makes implementing the methods
that work on byte[] simpler and safer. It also fixes LogicalMemoryBuffer
to not set the order explicitly, but lets the caller determine the
order.
frysk-core/frysk/proc/live/ChangeLog
2007-07-30 Mark Wielaard <mwielaard@redhat.com>
* AddressSpaceByteBuffer.java (Request): Make length and offset ints.
(peek): Likewise.
* LinuxTask.java (sendrecMemory): Set memory order.
* LogicalMemoryBuffer.java (order): Remove field.
(LogicalMemoryBuffer): Don't set order.
(peek): Make length and offset ints.
(subBuffer): Don't pass order.
* MemorySpaceByteBuffer.java (Request): Make length and offset ints.
(peek): Likewise.
* TestMemorySpaceByteBuffer.java (AsyncPeeks): Make length int.
frysk-sys/frysk/sys/ChangeLog
2007-07-30 Mark Wielaard <mwielaard@redhat.com>
* FileDescriptor.java (read): Make start and length ints.
(write): Likewise.
* Ptrace.java (peek): Make length and offset ints.
* StatelessFile.java (pread): Make start and length ints.
(pwrite): Likewise.
* TestFileDescriptor.java (IO.op): Likewise.
(assertArrayIndexOutOfBounds): Likewise.
(testReadOutOfBounds): Likewise.
(testWriteOutOfBounds): Likewise.
* TestPtrace.java (verifyOutOfBounds): Make length and offset ints.
* TestStatelessFile.java: Make start and length ints.
* cni/Errno.cxx (verifyBounds): Make start and length ints.
* cni/Errno.hxx: Likewise.
* cni/FileDescriptor.cxx (read): Make start and length jints.
(write): Likewise.
* cni/Ptrace.cxx (peek): Make length and offset jints.
* cni/StatelessFile.cxx (pread): Make start and length jints.
(pwrite): Likewise.
frysk-sys/inua/ChangeLog
2007-07-30 Mark Wielaard <mwielaard@redhat.com>
* eio/ByteBuffer.java (peek): Make off and len ints.
(poke): Likewise.
(peekFully): Likewise.
(pokeFully): Likewise.
* eio/MmapByteBuffer.java (peek): Likewise.
* eio/cni/MmapByteBuffer.cxx (peek): Likewise.
Tested on x86 and x86_64 without regressions.
Cheers,
Mark
Index: frysk-core/frysk/proc/live/AddressSpaceByteBuffer.java
===================================================================
RCS file: /cvs/frysk/frysk-core/frysk/proc/live/AddressSpaceByteBuffer.java,v
retrieving revision 1.2
diff -u -r1.2 AddressSpaceByteBuffer.java
--- frysk-core/frysk/proc/live/AddressSpaceByteBuffer.java 20 Jul 2007 11:36:06 -0000 1.2
+++ frysk-core/frysk/proc/live/AddressSpaceByteBuffer.java 30 Jul 2007 12:03:00 -0000
@@ -130,8 +130,8 @@
extends Request
{
private long index;
- private long length;
- private long offset;
+ private int length;
+ private int offset;
private byte[] bytes;
PeeksRequest()
{
@@ -141,8 +141,8 @@
{
length = addressSpace.peek(pid, index, length, bytes, offset);
}
- public long request (long index, byte[] bytes,
- long offset, long length)
+ public int request (long index, byte[] bytes,
+ int offset, int length)
{
if (isEventLoopThread())
return addressSpace.peek(pid, index, length, bytes, offset);
@@ -157,7 +157,7 @@
}
}
private final PeeksRequest peeksRequest;
- protected long peek (long index, byte[] bytes, long offset, long length)
+ protected int peek (long index, byte[] bytes, int offset, int length)
{
return peeksRequest.request(index, bytes, offset, length);
}
Index: frysk-core/frysk/proc/live/LinuxTask.java
===================================================================
RCS file: /cvs/frysk/frysk-core/frysk/proc/live/LinuxTask.java,v
retrieving revision 1.4
diff -u -r1.4 LinuxTask.java
--- frysk-core/frysk/proc/live/LinuxTask.java 20 Jul 2007 11:36:06 -0000 1.4
+++ frysk-core/frysk/proc/live/LinuxTask.java 30 Jul 2007 12:03:00 -0000
@@ -108,8 +108,10 @@
int tid = getTid();
ByteOrder byteOrder = getIsa().getByteOrder();
BreakpointAddresses breakpoints = getProc().breakpoints;
- return new LogicalMemoryBuffer(tid, AddressSpace.DATA,
- byteOrder, breakpoints);
+ ByteBuffer memory = new LogicalMemoryBuffer(tid, AddressSpace.DATA,
+ breakpoints);
+ memory.order(byteOrder);
+ return memory;
}
/**
Index: frysk-core/frysk/proc/live/LogicalMemoryBuffer.java
===================================================================
RCS file: /cvs/frysk/frysk-core/frysk/proc/live/LogicalMemoryBuffer.java,v
retrieving revision 1.1
diff -u -r1.1 LogicalMemoryBuffer.java
--- frysk-core/frysk/proc/live/LogicalMemoryBuffer.java 20 Jul 2007 11:36:06 -0000 1.1
+++ frysk-core/frysk/proc/live/LogicalMemoryBuffer.java 30 Jul 2007 12:03:00 -0000
@@ -46,7 +46,6 @@
import java.util.Iterator;
import inua.eio.ByteBuffer;
-import inua.eio.ByteOrder;
import frysk.sys.Ptrace.AddressSpace;
@@ -59,21 +58,15 @@
*/
class LogicalMemoryBuffer extends AddressSpaceByteBuffer
{
- // Byte order set on the buffer (needed for creating a subBuffer).
- private final ByteOrder order;
-
// The breakpoints associated with the process address space.
private final BreakpointAddresses breakpoints;
// Private constructor used by subBuffer()
private LogicalMemoryBuffer(int tid, AddressSpace addressSpace,
- ByteOrder order,
BreakpointAddresses breakpoints,
long lower, long upper)
{
super(tid, addressSpace, lower, upper);
- order(order);
- this.order = order;
this.breakpoints = breakpoints;
}
@@ -81,12 +74,9 @@
// memory space for a task when requested.
LogicalMemoryBuffer(int tid,
AddressSpace addressSpace,
- ByteOrder order,
BreakpointAddresses breakpoints)
{
super(tid, addressSpace);
- order(order);
- this.order = order;
this.breakpoints = breakpoints;
}
@@ -107,17 +97,19 @@
return super.peek(caret);
}
- protected long peek(long index, byte[] bytes, long offset, long length)
+ protected int peek(long index, byte[] bytes, int offset, int length)
{
synchronized (breakpoints)
{
Iterator it;
it = breakpoints.getBreakpoints(index, index + length);
- long r = 0;
+ int r = 0;
while (it.hasNext())
{
Breakpoint breakpoint = (Breakpoint) it.next();
- long l = breakpoint.getAddress() - (index + r);
+ // address - index falls inside the byte[] so will be at most
+ // a positive int apart.
+ int l = (int) (breakpoint.getAddress() - index) - r;
// Do we need to be worried about "short peeks"?
r += super.peek(index + r, bytes, offset + r, l);
@@ -129,12 +121,7 @@
b = instruction.getBytes()[0];
else
b = (byte) super.peek(index + r);
- // Since we are addressing a array both offset and r
- // cannot really be bigger than an int, they could still
- // overflow, but then we get a negative offset exception
- // which seems fine because in that case offset + r was
- // already larger than the array length.
- bytes[(int) (offset + r)] = b;
+ bytes[offset + r] = b;
r++;
}
return super.peek(index + r, bytes, offset + r, length - r) + r;
@@ -146,7 +133,7 @@
{
LogicalMemoryBuffer sub = (LogicalMemoryBuffer) parent;
return new LogicalMemoryBuffer (sub.pid, sub.addressSpace,
- sub.order, sub.breakpoints,
+ sub.breakpoints,
lower, upper);
}
}
Index: frysk-core/frysk/proc/live/MemorySpaceByteBuffer.java
===================================================================
RCS file: /cvs/frysk/frysk-core/frysk/proc/live/MemorySpaceByteBuffer.java,v
retrieving revision 1.4
diff -u -r1.4 MemorySpaceByteBuffer.java
--- frysk-core/frysk/proc/live/MemorySpaceByteBuffer.java 18 Jul 2007 20:00:31 -0000 1.4
+++ frysk-core/frysk/proc/live/MemorySpaceByteBuffer.java 30 Jul 2007 12:03:00 -0000
@@ -135,8 +135,8 @@
extends Request
{
private long index;
- private long length;
- private long offset;
+ private int length;
+ private int offset;
private byte[] bytes;
private Mem mem;
private final int pid;
@@ -145,7 +145,7 @@
mem = new Mem(pid);
this.pid = pid;
}
- private long peek(long index, byte[] bytes, long offset, long length) {
+ private int peek(long index, byte[] bytes, int offset, int length) {
if (mem != null) {
try {
return mem.pread (index, bytes, offset, length);
@@ -159,8 +159,8 @@
{
length = peek(index, bytes, offset, length);
}
- public long request (long index, byte[] bytes,
- long offset, long length)
+ public int request (long index, byte[] bytes,
+ int offset, int length)
{
if (isEventLoopThread()) {
return peek(index, bytes, offset, length);
@@ -176,7 +176,7 @@
}
}
private final PeeksRequest peeksRequest;
- protected long peek (long index, byte[] bytes, long offset, long length)
+ protected int peek (long index, byte[] bytes, int offset, int length)
{
return peeksRequest.request(index, bytes, offset, length);
}
Index: frysk-core/frysk/proc/live/TestMemorySpaceByteBuffer.java
===================================================================
RCS file: /cvs/frysk/frysk-core/frysk/proc/live/TestMemorySpaceByteBuffer.java,v
retrieving revision 1.2
diff -u -r1.2 TestMemorySpaceByteBuffer.java
--- frysk-core/frysk/proc/live/TestMemorySpaceByteBuffer.java 18 Jul 2007 20:00:31 -0000 1.2
+++ frysk-core/frysk/proc/live/TestMemorySpaceByteBuffer.java 30 Jul 2007 12:03:00 -0000
@@ -79,15 +79,15 @@
{
private MemorySpaceByteBuffer buffer;
private long addr;
- private long length;
+ private int length;
private byte[] bytes;
private Exception e;
- AsyncPeeks (MemorySpaceByteBuffer buffer, long addr, long length)
+ AsyncPeeks (MemorySpaceByteBuffer buffer, long addr, int length)
{
this.buffer = buffer;
this.addr = addr;
this.length = length;
- this.bytes = new byte[(int)length];
+ this.bytes = new byte[length];
}
public void run ()
{
Index: frysk-sys/frysk/sys/FileDescriptor.java
===================================================================
RCS file: /cvs/frysk/frysk-sys/frysk/sys/FileDescriptor.java,v
retrieving revision 1.1
diff -u -r1.1 FileDescriptor.java
--- frysk-sys/frysk/sys/FileDescriptor.java 17 Jul 2007 18:01:41 -0000 1.1
+++ frysk-sys/frysk/sys/FileDescriptor.java 30 Jul 2007 12:03:00 -0000
@@ -168,7 +168,7 @@
*
* XXX: Since read is capped by byte[].length, int is returned.
*/
- public native int read(byte[] bytes, long start, long length);
+ public native int read(byte[] bytes, int start, int length);
/**
* Write a single byte to the file descriptor.
@@ -179,7 +179,7 @@
*
* XXX: Since write is capped by byte[].lenght, int is returned.
*/
- public native int write(byte[] bytes, long start, long length);
+ public native int write(byte[] bytes, int start, int length);
/**
* Close the file descriptor.
Index: frysk-sys/frysk/sys/Ptrace.java
===================================================================
RCS file: /cvs/frysk/frysk-sys/frysk/sys/Ptrace.java,v
retrieving revision 1.12
diff -u -r1.12 Ptrace.java
--- frysk-sys/frysk/sys/Ptrace.java 17 Jul 2007 18:01:42 -0000 1.12
+++ frysk-sys/frysk/sys/Ptrace.java 30 Jul 2007 12:03:00 -0000
@@ -190,8 +190,8 @@
* Fetch up-to LENGTH bytes starting at ADDR of process PID,
* store them in BYTES, starting at OFFSET.
*/
- public native long peek (int pid, long addr, long length,
- byte[] bytes, long offset);
+ public native int peek (int pid, long addr, int length,
+ byte[] bytes, int offset);
private static native AddressSpace text ();
private static native AddressSpace data ();
private static native AddressSpace usr ();
Index: frysk-sys/frysk/sys/StatelessFile.java
===================================================================
RCS file: /cvs/frysk/frysk-sys/frysk/sys/StatelessFile.java,v
retrieving revision 1.1
diff -u -r1.1 StatelessFile.java
--- frysk-sys/frysk/sys/StatelessFile.java 17 Jul 2007 18:01:42 -0000 1.1
+++ frysk-sys/frysk/sys/StatelessFile.java 30 Jul 2007 12:03:00 -0000
@@ -63,10 +63,10 @@
this(new File(file));
}
- public native long pread (long fileOffset, byte[] bytes, long start,
- long length);
+ public native int pread (long fileOffset, byte[] bytes, int start,
+ int length);
- public native long pwrite (long fileOffset, byte[] bytes, long start,
- long length);
+ public native int pwrite (long fileOffset, byte[] bytes, int start,
+ int length);
}
Index: frysk-sys/frysk/sys/TestFileDescriptor.java
===================================================================
RCS file: /cvs/frysk/frysk-sys/frysk/sys/TestFileDescriptor.java,v
retrieving revision 1.1
diff -u -r1.1 TestFileDescriptor.java
--- frysk-sys/frysk/sys/TestFileDescriptor.java 17 Jul 2007 18:01:42 -0000 1.1
+++ frysk-sys/frysk/sys/TestFileDescriptor.java 30 Jul 2007 12:03:00 -0000
@@ -226,15 +226,15 @@
private IO(FileDescriptor fd) {
this.fd = fd;
}
- abstract void op(byte[] buf, long start, long length);
+ abstract void op(byte[] buf, int start, int length);
}
/**
* Check that an IO operation throws an exception.
*/
private void assertArrayIndexOutOfBounds(String what, IO io,
- byte[] buf, long start,
- long length)
+ byte[] buf, int start,
+ int length)
{
boolean thrown = false;
try {
@@ -255,7 +255,7 @@
assertArrayIndexOutOfBounds("len + off > buf.length", io,
new byte[1], 1, 1);
assertArrayIndexOutOfBounds("len + off < 0", io, new byte[1],
- 0x7fffffffffffffffL, 1);
+ Integer.MAX_VALUE, 1);
}
/**
@@ -264,7 +264,7 @@
public void testReadOutOfBounds()
{
verifyOutOfBounds(new IO(file) {
- public void op(byte[] buf, long start, long length) {
+ public void op(byte[] buf, int start, int length) {
fd.read(buf, start, length);
}
});
@@ -272,7 +272,7 @@
public void testWriteOutOfBounds()
{
verifyOutOfBounds(new IO(file) {
- public void op(byte[] buf, long start, long length) {
+ public void op(byte[] buf, int start, int length) {
fd.write(buf, start, length);
}
});
Index: frysk-sys/frysk/sys/TestPtrace.java
===================================================================
RCS file: /cvs/frysk/frysk-sys/frysk/sys/TestPtrace.java,v
retrieving revision 1.1
diff -u -r1.1 TestPtrace.java
--- frysk-sys/frysk/sys/TestPtrace.java 17 Jul 2007 18:01:42 -0000 1.1
+++ frysk-sys/frysk/sys/TestPtrace.java 30 Jul 2007 12:03:00 -0000
@@ -292,7 +292,7 @@
}
private void verifyOutOfBounds (String why, boolean expected,
- long length, byte[] bytes, int offset)
+ int length, byte[] bytes, int offset)
{
int pid = new AttachedSelf().hashCode();
boolean caught = false;
Index: frysk-sys/frysk/sys/TestStatelessFile.java
===================================================================
RCS file: /cvs/frysk/frysk-sys/frysk/sys/TestStatelessFile.java,v
retrieving revision 1.1
diff -u -r1.1 TestStatelessFile.java
--- frysk-sys/frysk/sys/TestStatelessFile.java 17 Jul 2007 18:01:42 -0000 1.1
+++ frysk-sys/frysk/sys/TestStatelessFile.java 30 Jul 2007 12:03:00 -0000
@@ -87,8 +87,8 @@
try {
sfbad.pread(0, // long fileOffset,
bytes, // byte[] bytes,
- 0, // long start,
- 10); // long length
+ 0, // int start,
+ 10); // int length
assertTrue ("invalid file pread", false);
} catch (Errno ioe) {
// System.out.println ("invalid file name");
@@ -98,8 +98,8 @@
try {
sf.pread(-1, // long fileOffset,
bytes, // byte[] bytes,
- 0, // long start,
- 10); // long length
+ 0, // int start,
+ 10); // int length
assertTrue ("invalid file offset pread", false);
} catch (Errno ioe) {
// System.out.println ("invalid file offset");
@@ -109,8 +109,8 @@
try {
sf.pread(0, // long fileOffset,
bytes, // byte[] bytes,
- -1, // long start,
- 10); // long length
+ -1, // int start,
+ 10); // int length
assertTrue ("invalid buffer start pread", false);
} catch (ArrayIndexOutOfBoundsException ioe) {
// System.out.println ("invalid buffer start");
@@ -120,7 +120,7 @@
try {
sf.pread(0, // long fileOffset,
bytes, // byte[] bytes,
- 0, // long start,
+ 0, // int start,
-1); // long length
assertTrue ("invalid length pread", false);
} catch (ArrayIndexOutOfBoundsException ioe) {
@@ -131,7 +131,7 @@
try {
sf.pread(0, // long fileOffset,
bytes, // byte[] bytes,
- 0, // long start,
+ 0, // int start,
BYTE_BUFFER_SIZE+1); // long length
assertTrue ("read overflow pread", false);
} catch (ArrayIndexOutOfBoundsException ioe) {
@@ -143,7 +143,7 @@
public void testPread()
{
- long ilen;
+ int ilen;
final byte[] stb = st.getBytes();
TearDownFile tmp = TearDownFile.create ();
try {
@@ -155,6 +155,8 @@
System.out.println ("TestStatelessFile() " + ioe);
}
+ // Note cast to int, we cannot really read a file into a
+ // byte[] that is larger than a (unsigned) int.
byte[] bytes = new byte[(int)stlen];
StatelessFile sf = new StatelessFile(tmp);
@@ -163,8 +165,8 @@
try {
ilen = sf.pread(0, // long fileOffset,
bytes, // byte[] bytes,
- 0, // long start,
- tmp.length()); // long length
+ 0, // int start,
+ (int) tmp.length()); // int length
assertEquals ("initial length pread", stlen, ilen);
for (int i = 0; i < stlen; i++)
assertEquals ("initial bytes", stb[i], bytes[i]);
@@ -179,10 +181,10 @@
// StringBuffer than my way below, but I don't know what it is. I'm a
// C guy.
final long fileOffset = 8;
- final long start = 6;
- final long length = 3;
+ final int start = 6;
+ final int length = 3;
StringBuffer sb = new StringBuffer (st);
- sb.replace ((int)start, (int) (start + length),
+ sb.replace (start, start + length,
st.substring ((int)fileOffset,
(int) (fileOffset + length)));
String sbc = new String (sb);
@@ -190,8 +192,8 @@
try {
ilen = sf.pread(fileOffset, // long fileOffset,
bytes, // byte[] bytes,
- start, // long start,
- length); // long length
+ start, // int start,
+ length); // int length
assertEquals ("sub-read length", length, ilen);
for (int i = 0; i < stlen; i++)
assertEquals ("sub-read bytes", sbb[i], bytes[i]);
@@ -215,8 +217,8 @@
try {
sfbad.pwrite(0, // long fileOffset,
bytes, // byte[] bytes,
- 0, // long start,
- 10); // long length
+ 0, // int start,
+ 10); // int length
assertTrue ("invalid file pread", false);
} catch (Errno ioe) {
// System.out.println ("invalid file name");
@@ -226,8 +228,8 @@
try {
sf.pwrite(-1, // long fileOffset,
bytes, // byte[] bytes,
- 0, // long start,
- 10); // long length
+ 0, // int start,
+ 10); // int length
assertTrue ("invalid file offset pwrite", false);
} catch (Errno ioe) {
// System.out.println ("invalid file offset");
@@ -237,8 +239,8 @@
try {
sf.pwrite(0, // long fileOffset,
bytes, // byte[] bytes,
- -1, // long start,
- 10); // long length
+ -1, // int start,
+ 10); // int length
assertTrue ("invalid buffer start pwrite", false);
} catch (ArrayIndexOutOfBoundsException ioe) {
//System.out.println ("invalid buffer start");
@@ -248,8 +250,8 @@
try {
sf.pwrite(0, // long fileOffset,
bytes, // byte[] bytes,
- 0, // long start,
- -1); // long length
+ 0, // int start,
+ -1); // int length
assertTrue ("invalid length pwrite", false);
} catch (ArrayIndexOutOfBoundsException ioe) {
// System.out.println ("invalid length");
@@ -259,8 +261,8 @@
try {
sf.pwrite(0, // long fileOffset,
bytes, // byte[] bytes,
- 0, // long start,
- BYTE_BUFFER_SIZE+1); // long length
+ 0, // int start,
+ BYTE_BUFFER_SIZE+1); // int length
assertTrue ("read overflow pwrite", false);
} catch (ArrayIndexOutOfBoundsException ioe) {
// System.out.println ("read overflow");
@@ -272,7 +274,7 @@
public void testPwriteHuge()
{
try {
- long ilen;
+ int ilen;
// 0123456789abcdef
final long HugeOffset = 0x000000007fffffffL;
File tmp = File.createTempFile("sftest", null);
@@ -284,8 +286,8 @@
try {
ilen = sf.pwrite(HugeOffset, // long fileOffset,
stb, // byte[] bytes,
- 0, // long start,
- stb.length); // long length
+ 0, // int start,
+ stb.length); // int length
stlen = tmp.length();
assertEquals ("initial length pwrite", stb.length, ilen);
} catch (Errno ioe) {
@@ -303,7 +305,7 @@
// final int BYTE_BUFFER_SIZE = 128;
//byte[] bytes = new byte[BYTE_BUFFER_SIZE];
- long ilen;
+ int ilen;
long stlen = -1;
TearDownFile tmp = TearDownFile.create ();
StatelessFile sf = new StatelessFile(tmp);
@@ -313,8 +315,8 @@
try {
ilen = sf.pwrite(0, // long fileOffset,
stb, // byte[] bytes,
- 0, // long start,
- stb.length); // long length
+ 0, // int start,
+ stb.length); // int length
stlen = tmp.length();
assertEquals ("initial length pwrite", stb.length, ilen);
} catch (Errno ioe) {
@@ -337,20 +339,20 @@
// copy of the original string used to create the file. Compare the
// results.
final long fileOffset = 8;
- final long start = 6;
- final long length = 3;
+ final int start = 6;
+ final int length = 3;
StringBuffer sb = new StringBuffer (st);
sb.replace ((int)fileOffset, (int) (fileOffset + length),
- st.substring ((int)start,
- (int) (start + length)));
+ st.substring (start,
+ start + length));
byte[] scb = st.getBytes();
String sbc = new String (sb);
try {
ilen = sf.pwrite(fileOffset, // long fileOffset,
scb, // byte[] bytes,
- start, // long start,
- length); // long length
+ start, // int start,
+ length); // int length
assertEquals ("sub-write length", length, ilen);
// for (int i = 0; i < stlen; i++)
// assertEquals ("sub-read bytes", sbb[i], bytes[i]);
Index: frysk-sys/frysk/sys/cni/Errno.cxx
===================================================================
RCS file: /cvs/frysk/frysk-sys/frysk/sys/cni/Errno.cxx,v
retrieving revision 1.13
diff -u -r1.13 Errno.cxx
--- frysk-sys/frysk/sys/cni/Errno.cxx 26 Jul 2007 18:45:30 -0000 1.13
+++ frysk-sys/frysk/sys/cni/Errno.cxx 30 Jul 2007 12:03:00 -0000
@@ -444,7 +444,7 @@
}
void
-verifyBounds (jbyteArray bytes, jlong start, jlong length)
+verifyBounds (jbyteArray bytes, jint start, jint length)
{
if (start < 0)
throw new java::lang::ArrayIndexOutOfBoundsException ();
Index: frysk-sys/frysk/sys/cni/Errno.hxx
===================================================================
RCS file: /cvs/frysk/frysk-sys/frysk/sys/cni/Errno.hxx,v
retrieving revision 1.10
diff -u -r1.10 Errno.hxx
--- frysk-sys/frysk/sys/cni/Errno.hxx 26 Jul 2007 18:45:30 -0000 1.10
+++ frysk-sys/frysk/sys/cni/Errno.hxx 30 Jul 2007 12:03:00 -0000
@@ -121,4 +121,4 @@
* Throw an ArrayIndexOutOfBounds exception if START and LENGTH do not
* fall within the byte array.
*/
-extern void verifyBounds (jbyteArray bytes, jlong start, jlong length);
+extern void verifyBounds (jbyteArray bytes, jint start, jint length);
Index: frysk-sys/frysk/sys/cni/FileDescriptor.cxx
===================================================================
RCS file: /cvs/frysk/frysk-sys/frysk/sys/cni/FileDescriptor.cxx,v
retrieving revision 1.3
diff -u -r1.3 FileDescriptor.cxx
--- frysk-sys/frysk/sys/cni/FileDescriptor.cxx 26 Jul 2007 18:45:30 -0000 1.3
+++ frysk-sys/frysk/sys/cni/FileDescriptor.cxx 30 Jul 2007 12:03:00 -0000
@@ -80,7 +80,7 @@
}
jint
-frysk::sys::FileDescriptor::write (jbyteArray bytes, jlong off, jlong len)
+frysk::sys::FileDescriptor::write (jbyteArray bytes, jint off, jint len)
{
verifyBounds (bytes, off, len);
errno = 0;
@@ -147,7 +147,7 @@
}
jint
-frysk::sys::FileDescriptor::read (jbyteArray bytes, jlong off, jlong len)
+frysk::sys::FileDescriptor::read (jbyteArray bytes, jint off, jint len)
{
verifyBounds (bytes, off, len);
return doRead (fd, elements(bytes) + off, len);
Index: frysk-sys/frysk/sys/cni/Ptrace.cxx
===================================================================
RCS file: /cvs/frysk/frysk-sys/frysk/sys/cni/Ptrace.cxx,v
retrieving revision 1.12
diff -u -r1.12 Ptrace.cxx
--- frysk-sys/frysk/sys/cni/Ptrace.cxx 17 Jul 2007 18:01:42 -0000 1.12
+++ frysk-sys/frysk/sys/cni/Ptrace.cxx 30 Jul 2007 12:03:00 -0000
@@ -220,9 +220,9 @@
return byte;
}
-jlong
-frysk::sys::Ptrace$AddressSpace::peek (jint pid, jlong addr, jlong length,
- jbyteArray bytes, jlong offset)
+jint
+frysk::sys::Ptrace$AddressSpace::peek (jint pid, jlong addr, jint length,
+ jbyteArray bytes, jint offset)
{
if (offset < 0)
throw new java::lang::ArrayIndexOutOfBoundsException (JvNewStringUTF("Offset < 0"));
Index: frysk-sys/frysk/sys/cni/StatelessFile.cxx
===================================================================
RCS file: /cvs/frysk/frysk-sys/frysk/sys/cni/StatelessFile.cxx,v
retrieving revision 1.2
diff -u -r1.2 StatelessFile.cxx
--- frysk-sys/frysk/sys/cni/StatelessFile.cxx 26 Jul 2007 18:45:30 -0000 1.2
+++ frysk-sys/frysk/sys/cni/StatelessFile.cxx 30 Jul 2007 12:03:00 -0000
@@ -52,11 +52,11 @@
#include "frysk/sys/Errno$Esrch.h"
#include "frysk/sys/cni/Errno.hxx"
-jlong
+jint
frysk::sys::StatelessFile::pread (jlong fileOffset,
jbyteArray bytes,
- jlong start,
- jlong length)
+ jint start,
+ jint length)
{
verifyBounds (bytes, start, length);
@@ -70,19 +70,19 @@
if (rc < 0) {
int savedErrno = errno;
::close (fd);
- throwErrno (savedErrno, "pread", "fd %d, count %ld, offset %ld",
- fd, (long)length, (long)fileOffset);
+ throwErrno (savedErrno, "pread", "fd %d, count %d, offset %ld",
+ fd, (int) length, (long)fileOffset);
}
::close (fd);
return rc;
}
-jlong
+jint
frysk::sys::StatelessFile::pwrite (jlong fileOffset,
jbyteArray bytes,
- jlong start,
- jlong length)
+ jint start,
+ jint length)
{
verifyBounds (bytes, start, length);
@@ -96,8 +96,8 @@
if (rc < 0) {
int savedErrno = errno;
::close (fd);
- throwErrno (savedErrno, "pwrite", "fd %d, count %ld, offset %ld",
- fd, (long)length, (long)fileOffset);
+ throwErrno (savedErrno, "pwrite", "fd %d, count %d, offset %ld",
+ fd, (int) length, (long)fileOffset);
}
::close (fd);
Index: frysk-sys/inua/eio/ByteBuffer.java
===================================================================
RCS file: /cvs/frysk/frysk-sys/inua/eio/ByteBuffer.java,v
retrieving revision 1.1
diff -u -r1.1 ByteBuffer.java
--- frysk-sys/inua/eio/ByteBuffer.java 17 Jul 2007 18:01:44 -0000 1.1
+++ frysk-sys/inua/eio/ByteBuffer.java 30 Jul 2007 12:03:00 -0000
@@ -1,4 +1,5 @@
// This file is part of INUA. Copyright 2004, 2005, Andrew Cagney
+// Copyright 2007, Red Hat Inc.
//
// INUA is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by
@@ -68,33 +69,33 @@
*/
protected abstract void poke (long caret, int val);
- protected long peek (long caret, byte[] bytes, long off, long len)
+ protected int peek (long caret, byte[] bytes, int off, int len)
{
logger.log(Level.FINE, "entering peek, caret: 0x{0}, off: 0x{1}, len: 0x{2}",
- new Object[]{Long.toHexString(caret), Long.toHexString(off),
- Long.toHexString(len)});
- for (long i = 0; i < len; i++)
+ new Object[]{Long.toHexString(caret), Integer.toHexString(off),
+ Integer.toHexString(len)});
+ for (int i = 0; i < len; i++)
{
logger.log(Level.FINEST, "on byte: 0x{0}", Long.toHexString(i));
- bytes[(int) (off + i)] = (byte) peek(caret + i);
+ bytes[off + i] = (byte) peek(caret + i);
}
return len;
}
- protected long poke (long caret, byte[] bytes, long off, long len)
+ protected int poke (long caret, byte[] bytes, int off, int len)
{
- for (long i = 0; i < len; i++)
+ for (int i = 0; i < len; i++)
{
- poke(caret + i, bytes[(int) (off + i)]);
+ poke(caret + i, bytes[off + i]);
}
return len;
}
- protected final void peekFully (long caret, byte[] bytes, long off, long len)
+ protected final void peekFully (long caret, byte[] bytes, int off, int len)
{
logger.log(Level.FINE, "entering peekFully, caret: 0x{0}, off: 0x{1}, len: 0x{2}\n",
- new Object[]{Long.toHexString(caret), Long.toHexString(off),
- Long.toHexString(len)});
+ new Object[]{Long.toHexString(caret), Integer.toHexString(off),
+ Integer.toHexString(len)});
while (len > 0)
{
long xfer = peek(caret, bytes, off, len);
@@ -105,7 +106,7 @@
logger.log(Level.FINE, "exiting peekFully\n");
}
- protected final void pokeFully (long caret, byte[] bytes, long off, long len)
+ protected final void pokeFully (long caret, byte[] bytes, int off, int len)
{
while (len > 0)
{
Index: frysk-sys/inua/eio/MmapByteBuffer.java
===================================================================
RCS file: /cvs/frysk/frysk-sys/inua/eio/MmapByteBuffer.java,v
retrieving revision 1.1
diff -u -r1.1 MmapByteBuffer.java
--- frysk-sys/inua/eio/MmapByteBuffer.java 17 Jul 2007 18:01:44 -0000 1.1
+++ frysk-sys/inua/eio/MmapByteBuffer.java 30 Jul 2007 12:03:00 -0000
@@ -1,4 +1,5 @@
// This file is part of INUA. Copyright 2004, 2005, Andrew Cagney
+// Copyright 2007, Red Hat Inc.
//
// INUA is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by
@@ -81,6 +82,6 @@
native protected final int peek (long index);
native protected final void poke (long index, int val);
- native protected final long peek (long index, byte[] bytes,
- long off, long len);
+ native protected final int peek (long index, byte[] bytes,
+ int off, int len);
}
Index: frysk-sys/inua/eio/cni/MmapByteBuffer.cxx
===================================================================
RCS file: /cvs/frysk/frysk-sys/inua/eio/cni/MmapByteBuffer.cxx,v
retrieving revision 1.1
diff -u -r1.1 MmapByteBuffer.cxx
--- frysk-sys/inua/eio/cni/MmapByteBuffer.cxx 17 Jul 2007 18:01:44 -0000 1.1
+++ frysk-sys/inua/eio/cni/MmapByteBuffer.cxx 30 Jul 2007 12:03:00 -0000
@@ -1,4 +1,5 @@
// This file is part of INUA. Copyright 2004, 2005, Andrew Cagney
+// Copyright 2007, Red Hat Inc.
//
// INUA is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by
@@ -89,9 +90,9 @@
p[caret] = value;
}
-jlong
-inua::eio::MmapByteBuffer::peek (jlong caret, jbyteArray bytes, jlong off,
- jlong len)
+jint
+inua::eio::MmapByteBuffer::peek (jlong caret, jbyteArray bytes, jint off,
+ jint len)
{
u_int8_t *p = (u_int8_t*) (long) this->map->byteData;
memcpy (elements (bytes) + off, p + caret, len);