Looks good!<br><br><div class="gmail_quote">On Thu, Oct 27, 2011 at 3:58 AM, Will Dietz <span dir="ltr"><<a href="mailto:wdietz2@illinois.edu">wdietz2@illinois.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Inlined below.<br>
<br>
~Will<br>
<br>
<br>
>From 61e512153a68efe9679bc5e1dce539b0af731f2f Mon Sep 17 00:00:00 2001<br>
From: Will Dietz <<a href="mailto:w@wdtz.org">w@wdtz.org</a>><br>
Date: Wed, 26 Oct 2011 20:54:44 -0500<br>
Subject: [PATCH 3/3] OpenJDK.inc: Implement I/O wrappers:<br>
 open/close/read/write/available/lseek<br>
<br>
---<br>
 lib/J3/ClassLib/OpenJDK/OpenJDK.inc |   75 ++++++++++++++++++++++++++++++++---<br>
 1 files changed, 69 insertions(+), 6 deletions(-)<br>
<br>
diff --git a/lib/J3/ClassLib/OpenJDK/OpenJDK.inc<br>
b/lib/J3/ClassLib/OpenJDK/OpenJDK.inc<br>
index eded2e1..8ff8035 100644<br>
--- a/lib/J3/ClassLib/OpenJDK/OpenJDK.inc<br>
+++ b/lib/J3/ClassLib/OpenJDK/OpenJDK.inc<br>
@@ -1310,7 +1310,16 @@ JVM_NativePath(char * path) {<br>
  */<br>
 JNIEXPORT jint JNICALL<br>
 JVM_Open(const char *fname, jint flags, jint mode) {<br>
-  NYI();<br>
+  //fprintf(stderr, "JVM_Open(fname=%s,flags=%d,mode=%d)\n",<br>
+  //  fname, flags, mode);<br></blockquote><div><br></div><div>Remove printf.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
+  BEGIN_JNI_EXCEPTION<br>
+  int result = open(fname, flags, mode);<br>
+<br>
+  result = (result == 0) ? -1 : result;<br>
+  RETURN_FROM_JNI(result);<br>
+  END_JNI_EXCEPTION<br>
+<br>
+  return -1;<br>
 }<br>
<br>
 /*<br>
@@ -1321,7 +1330,12 @@ JVM_Open(const char *fname, jint flags, jint mode) {<br>
  */<br>
 JNIEXPORT jint JNICALL<br>
 JVM_Close(jint fd) {<br>
-  NYI();<br>
+  BEGIN_JNI_EXCEPTION<br>
+  jint res = close(fd);<br>
+  RETURN_FROM_JNI(res);<br>
+  END_JNI_EXCEPTION<br>
+<br>
+  return -1;<br>
 }<br>
<br>
 /*<br>
@@ -1337,7 +1351,11 @@ JVM_Close(jint fd) {<br>
  */<br>
 JNIEXPORT jint JNICALL<br>
 JVM_Read(jint fd, char *buf, jint nbytes) {<br>
-  NYI();<br>
+  BEGIN_JNI_EXCEPTION<br>
+  jint res = read(fd, buf, nbytes);<br>
+  RETURN_FROM_JNI(res);<br>
+  END_JNI_EXCEPTION<br>
+  return -1;<br>
 }<br>
<br>
 /*<br>
@@ -1351,7 +1369,11 @@ JVM_Read(jint fd, char *buf, jint nbytes) {<br>
  */<br>
 JNIEXPORT jint JNICALL<br>
 JVM_Write(jint fd, char *buf, jint nbytes) {<br>
-  NYI();<br>
+  BEGIN_JNI_EXCEPTION<br>
+  jint res = write(fd, buf, nbytes);<br>
+  RETURN_FROM_JNI(res);<br>
+  END_JNI_EXCEPTION<br>
+  return -1;<br>
 }<br>
<br>
 /*<br>
@@ -1360,7 +1382,44 @@ JVM_Write(jint fd, char *buf, jint nbytes) {<br>
  */<br>
 JNIEXPORT jint JNICALL<br>
 JVM_Available(jint fd, jlong *pbytes) {<br>
-  NYI();<br>
+  // From JamVM's JVM_Available implementation, GPLv2<br>
+  BEGIN_JNI_EXCEPTION<br>
+  struct stat sb;<br>
+<br>
+  if(fstat(fd, &sb) == -1)<br>
+    RETURN_FROM_JNI(0);<br>
+<br>
+  switch(sb.st_mode & S_IFMT) {<br>
+    case S_IFCHR:<br>
+    case S_IFIFO:<br>
+    case S_IFSOCK: {<br>
+      int n;<br>
+<br>
+      if(ioctl(fd, TIOCINQ, &n) == -1)<br>
+        RETURN_FROM_JNI(0);<br>
+<br>
+      *pbytes = n;<br>
+      RETURN_FROM_JNI(1);<br>
+    }<br>
+<br>
+    default: {<br>
+      off64_t cur, end;<br>
+<br>
+      if((cur = lseek64(fd, 0, SEEK_CUR)) == -1)<br>
+        RETURN_FROM_JNI(0);<br>
+<br>
+      if((end = lseek64(fd, 0, SEEK_END)) == -1)<br>
+        RETURN_FROM_JNI(0);<br>
+<br>
+      if(lseek64(fd, cur, SEEK_SET) == -1)<br>
+        RETURN_FROM_JNI(0);<br>
+<br>
+      *pbytes = end - cur;<br>
+      RETURN_FROM_JNI(1);<br>
+    }<br>
+  }<br>
+  END_JNI_EXCEPTION<br>
+  return 0;<br>
 }<br>
<br>
 /*<br>
@@ -1374,7 +1433,11 @@ JVM_Available(jint fd, jlong *pbytes) {<br>
  */<br>
 JNIEXPORT jlong JNICALL<br>
 JVM_Lseek(jint fd, jlong offset, jint whence) {<br>
-  NYI();<br>
+  BEGIN_JNI_EXCEPTION<br>
+  jlong res = lseek64(fd, offset, whence);<br>
+  RETURN_FROM_JNI(res);<br>
+  END_JNI_EXCEPTION<br>
+  return 0;<br>
 }<br>
<br>
 /*<br>
<font color="#888888">--<br>
1.7.5.1<br>
_______________________________________________<br>
vmkit-commits mailing list<br>
<a href="mailto:vmkit-commits@cs.uiuc.edu">vmkit-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/vmkit-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/vmkit-commits</a><br>
</font></blockquote></div><br>