[vmkit-commits] [PATCH] OpenJDK.inc: Implement I/O wrappers (open/close/read/write/available/lseek)

Nicolas Geoffray nicolas.geoffray at gmail.com
Thu Oct 27 10:01:26 PDT 2011


Looks good!

On Thu, Oct 27, 2011 at 3:58 AM, Will Dietz <wdietz2 at illinois.edu> wrote:

> Inlined below.
>
> ~Will
>
>
> >From 61e512153a68efe9679bc5e1dce539b0af731f2f Mon Sep 17 00:00:00 2001
> From: Will Dietz <w at wdtz.org>
> Date: Wed, 26 Oct 2011 20:54:44 -0500
> Subject: [PATCH 3/3] OpenJDK.inc: Implement I/O wrappers:
>  open/close/read/write/available/lseek
>
> ---
>  lib/J3/ClassLib/OpenJDK/OpenJDK.inc |   75
> ++++++++++++++++++++++++++++++++---
>  1 files changed, 69 insertions(+), 6 deletions(-)
>
> diff --git a/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
> b/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
> index eded2e1..8ff8035 100644
> --- a/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
> +++ b/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
> @@ -1310,7 +1310,16 @@ JVM_NativePath(char * path) {
>  */
>  JNIEXPORT jint JNICALL
>  JVM_Open(const char *fname, jint flags, jint mode) {
> -  NYI();
> +  //fprintf(stderr, "JVM_Open(fname=%s,flags=%d,mode=%d)\n",
> +  //  fname, flags, mode);
>

Remove printf.


> +  BEGIN_JNI_EXCEPTION
> +  int result = open(fname, flags, mode);
> +
> +  result = (result == 0) ? -1 : result;
> +  RETURN_FROM_JNI(result);
> +  END_JNI_EXCEPTION
> +
> +  return -1;
>  }
>
>  /*
> @@ -1321,7 +1330,12 @@ JVM_Open(const char *fname, jint flags, jint mode) {
>  */
>  JNIEXPORT jint JNICALL
>  JVM_Close(jint fd) {
> -  NYI();
> +  BEGIN_JNI_EXCEPTION
> +  jint res = close(fd);
> +  RETURN_FROM_JNI(res);
> +  END_JNI_EXCEPTION
> +
> +  return -1;
>  }
>
>  /*
> @@ -1337,7 +1351,11 @@ JVM_Close(jint fd) {
>  */
>  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;
>  }
>
>  /*
> @@ -1351,7 +1369,11 @@ JVM_Read(jint fd, char *buf, jint nbytes) {
>  */
>  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;
>  }
>
>  /*
> @@ -1360,7 +1382,44 @@ JVM_Write(jint fd, char *buf, jint nbytes) {
>  */
>  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;
>  }
>
>  /*
> @@ -1374,7 +1433,11 @@ JVM_Available(jint fd, jlong *pbytes) {
>  */
>  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;
>  }
>
>  /*
> --
> 1.7.5.1
> _______________________________________________
> vmkit-commits mailing list
> vmkit-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/vmkit-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/vmkit-commits/attachments/20111027/7292e841/attachment.html>


More information about the vmkit-commits mailing list