[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