[vmkit-commits] [vmkit] r143133 - /vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc

Will Dietz wdietz2 at illinois.edu
Thu Oct 27 12:17:07 PDT 2011


Author: wdietz2
Date: Thu Oct 27 14:17:07 2011
New Revision: 143133

URL: http://llvm.org/viewvc/llvm-project?rev=143133&view=rev
Log:
OpenJDK.inc: Implement I/O wrappers: open/close/read/write/available/lseek

Modified:
    vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc

Modified: vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc?rev=143133&r1=143132&r2=143133&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc (original)
+++ vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc Thu Oct 27 14:17:07 2011
@@ -1315,7 +1315,14 @@
  */
 JNIEXPORT jint JNICALL
 JVM_Open(const char *fname, jint flags, jint mode) {
-  NYI();
+  BEGIN_JNI_EXCEPTION
+  int result = open(fname, flags, mode);
+
+  result = (result == 0) ? -1 : result;
+  RETURN_FROM_JNI(result);
+  END_JNI_EXCEPTION
+
+  return -1;
 }
 
 /*
@@ -1326,7 +1333,12 @@
  */
 JNIEXPORT jint JNICALL
 JVM_Close(jint fd) {
-  NYI();
+  BEGIN_JNI_EXCEPTION
+  jint res = close(fd);
+  RETURN_FROM_JNI(res);
+  END_JNI_EXCEPTION
+
+  return -1;
 }
 
 /*
@@ -1342,7 +1354,11 @@
  */
 JNIEXPORT jint JNICALL
 JVM_Read(jint fd, char *buf, jint nbytes) {
-  NYI();
+  BEGIN_JNI_EXCEPTION
+  jint res = read(fd, buf, nbytes);
+  RETURN_FROM_JNI(res);
+  END_JNI_EXCEPTION
+  return -1;
 }
 
 /*
@@ -1356,7 +1372,11 @@
  */
 JNIEXPORT jint JNICALL
 JVM_Write(jint fd, char *buf, jint nbytes) {
-  NYI();
+  BEGIN_JNI_EXCEPTION
+  jint res = write(fd, buf, nbytes);
+  RETURN_FROM_JNI(res);
+  END_JNI_EXCEPTION
+  return -1;
 }
 
 /*
@@ -1365,7 +1385,44 @@
  */
 JNIEXPORT jint JNICALL
 JVM_Available(jint fd, jlong *pbytes) {
-  NYI();
+  // From JamVM's JVM_Available implementation, GPLv2
+  BEGIN_JNI_EXCEPTION
+  struct stat sb;
+
+  if(fstat(fd, &sb) == -1)
+    RETURN_FROM_JNI(0);
+
+  switch(sb.st_mode & S_IFMT) {
+    case S_IFCHR:
+    case S_IFIFO:
+    case S_IFSOCK: {
+      int n;
+
+      if(ioctl(fd, TIOCINQ, &n) == -1)
+        RETURN_FROM_JNI(0);
+
+      *pbytes = n;
+      RETURN_FROM_JNI(1);
+    }
+
+    default: {
+      off64_t cur, end;
+
+      if((cur = lseek64(fd, 0, SEEK_CUR)) == -1)
+        RETURN_FROM_JNI(0);
+
+      if((end = lseek64(fd, 0, SEEK_END)) == -1)
+        RETURN_FROM_JNI(0);
+
+      if(lseek64(fd, cur, SEEK_SET) == -1)
+        RETURN_FROM_JNI(0);
+
+      *pbytes = end - cur;
+      RETURN_FROM_JNI(1);
+    }
+  }
+  END_JNI_EXCEPTION
+  return 0;
 }
 
 /*
@@ -1379,7 +1436,11 @@
  */
 JNIEXPORT jlong JNICALL
 JVM_Lseek(jint fd, jlong offset, jint whence) {
-  NYI();
+  BEGIN_JNI_EXCEPTION
+  jlong res = lseek64(fd, offset, whence);
+  RETURN_FROM_JNI(res);
+  END_JNI_EXCEPTION
+  return 0;
 }
 
 /*





More information about the vmkit-commits mailing list