rendered paste bodydiff -Nur ../cacao-0.98.orig/src/native/include/com_sun_cldchi_jvm_FileDescriptor.h ./src/native/include/com_sun_cldchi_jvm_FileDescriptor.h
--- ../cacao-0.98.orig/src/native/include/com_sun_cldchi_jvm_FileDescriptor.h 1970-01-01 01:00:00.000000000 +0100
+++ ./src/native/include/com_sun_cldchi_jvm_FileDescriptor.h 2007-07-05 19:48:43.000000000 +0200
@@ -0,0 +1,23 @@
+/* This file is machine generated, don't edit it! */
+
+#ifndef _COM_SUN_CLDCHI_JVM_FILEDESCRIPTOR_H
+#define _COM_SUN_CLDCHI_JVM_FILEDESCRIPTOR_H
+
+/* Structure information for class: com/sun/cldchi/jvm/FileDescriptor */
+
+typedef struct com_sun_cldchi_jvm_FileDescriptor {
+ java_objectheader header;
+ s4 handle;
+ s4 valid;
+} com_sun_cldchi_jvm_FileDescriptor;
+
+
+/*
+ * Class: com/sun/cldchi/jvm/FileDescriptor
+ * Method: finalize
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_com_sun_cldchi_jvm_FileDescriptor_finalize(JNIEnv *env, struct com_sun_cldchi_jvm_FileDescriptor* this);
+
+#endif
+
diff -Nur ../cacao-0.98.orig/src/native/include/Makefile.am ./src/native/include/Makefile.am
--- ../cacao-0.98.orig/src/native/include/Makefile.am 2007-05-23 20:15:07.000000000 +0200
+++ ./src/native/include/Makefile.am 2007-07-05 15:50:55.000000000 +0200
@@ -74,6 +74,7 @@
com_sun_cldc_io_j2me_socket_Protocol.h \
com_sun_cldchi_io_ConsoleOutputStream.h \
com_sun_cldchi_jvm_JVM.h \
+ com_sun_cldchi_jvm_FileDescriptor.h \
java_lang_Math.h \
java_lang_Runtime.h \
java_lang_System.h
diff -Nur ../cacao-0.98.orig/src/native/vm/cldc1.1/com_sun_cldchi_jvm_FileDescriptor.c ./src/native/vm/cldc1.1/com_sun_cldchi_jvm_FileDescriptor.c
--- ../cacao-0.98.orig/src/native/vm/cldc1.1/com_sun_cldchi_jvm_FileDescriptor.c 1970-01-01 01:00:00.000000000 +0100
+++ ./src/native/vm/cldc1.1/com_sun_cldchi_jvm_FileDescriptor.c 2007-06-04 00:02:10.000000000 +0200
@@ -0,0 +1,73 @@
+/* src/native/vm/cldc1.1/com_sun_cldchi_jvm_FileDescriptor.c
+
+ Copyright (C) 2006, 2007 R. Grafl, A. Krall, C. Kruegel, C. Oates,
+ R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner,
+ C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger,
+ Institut f. Computersprachen - TU Wien
+
+ This file is part of CACAO.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2, or (at
+ your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+
+ $Id: cacao-0.98-cldc-midpath-compat.diff,v 1.5 2007/07/05 17:49:36 robert Exp $
+
+*/
+
+#include "config.h"
+
+#include <stdio.h>
+
+#include "vm/types.h"
+
+#include "native/jni.h"
+#include "native/native.h"
+
+#include "native/include/com_sun_cldchi_jvm_FileDescriptor.h"
+
+/* native methods implemented by this file ************************************/
+
+static JNINativeMethod methods[] = {
+ { "finalize", "()V", (void *) (ptrint) &Java_com_sun_cldchi_jvm_FileDescriptor_finalize },
+};
+
+/* _Jv_com_sun_cldchi_jvm_FileDescriptor_init ******************************
+
+ Register native functions.
+
+*******************************************************************************/
+
+void _Jv_com_sun_cldchi_jvm_FileDescriptor_init(void)
+{
+ utf *u;
+
+ u = utf_new_char("com/sun/cldchi/jvm/FileDescriptor");
+
+ native_method_register(u, methods, NATIVE_METHODS_COUNT);
+}
+
+/*
+ * Class: com/sun/cldchi/jvm/FileDescriptor
+ * Method: finalize
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_com_sun_cldchi_jvm_FileDescriptor_finalize(JNIEnv *env, struct com_sun_cldchi_jvm_FileDescriptor* this) {
+ /* printf("close\n"); */
+ fclose((FILE *)this->handle);
+
+}
+
+
+
diff -Nur ../cacao-0.98.orig/src/native/vm/cldc1.1/com_sun_cldc_io_ResourceInputStream.c ./src/native/vm/cldc1.1/com_sun_cldc_io_ResourceInputStream.c
--- ../cacao-0.98.orig/src/native/vm/cldc1.1/com_sun_cldc_io_ResourceInputStream.c 2007-05-16 10:06:15.000000000 +0200
+++ ./src/native/vm/cldc1.1/com_sun_cldc_io_ResourceInputStream.c 2007-07-05 15:02:59.000000000 +0200
@@ -26,25 +26,53 @@
*/
+#include <sys/stat.h>
+#include <stdlib.h>
#include "config.h"
-#include "vm/types.h"
+
+#include "arch.h"
+#include "mm/memory.h"
#include "native/jni.h"
#include "native/native.h"
#include "native/include/java_lang_Object.h"
#include "native/include/java_lang_String.h"
-
+#include "native/include/java_lang_Integer.h"
#include "native/include/com_sun_cldc_io_ResourceInputStream.h"
+#include "native/include/com_sun_cldchi_jvm_FileDescriptor.h"
+#include "vm/types.h"
+#include "vm/builtin.h"
#include "vm/vm.h" /* REMOVE ME: temporarily */
+#include "vm/exceptions.h"
+#include "vm/initialize.h"
+#include "vm/stringlocal.h"
+#include "vm/properties.h"
+
+#include "vmcore/class.h"
+#include "vmcore/classcache.h"
+#include "vmcore/linker.h"
+#include "vmcore/loader.h"
+#include "vmcore/options.h"
+#include "vmcore/statistics.h"
+#include "vmcore/suck.h"
+#include "vmcore/zip.h"
+
+#include "toolbox/list.h"
+#include "toolbox/logging.h"
+#include "toolbox/util.h"
/* native methods implemented by this file ************************************/
static JNINativeMethod methods[] = {
{ "open", "(Ljava/lang/String;)Ljava/lang/Object;", (void *) (ptrint) &Java_com_sun_cldc_io_ResourceInputStream_open },
+ { "bytesRemain", "(Ljava/lang/Object;)I", (void *) (ptrint) &Java_com_sun_cldc_io_ResourceInputStream_bytesRemain },
+ { "readByte", "(Ljava/lang/Object;)I", (void *) (ptrint) &Java_com_sun_cldc_io_ResourceInputStream_readByte },
+ { "readBytes", "(Ljava/lang/Object;[BII)I", (void *) (ptrint) &Java_com_sun_cldc_io_ResourceInputStream_readBytes },
+ { "clone", "(Ljava/lang/Object;)Ljava/lang/Object;", (void *) (ptrint) &Java_com_sun_cldc_io_ResourceInputStream_clone },
};
/* _Jv_com_sun_cldc_io_ResourceInputStream_init ********************************
@@ -68,13 +96,209 @@
* Method: open
* Signature: (Ljava/lang/String;)Ljava/lang/Object;
*/
-JNIEXPORT java_lang_Object* JNICALL Java_com_sun_cldc_io_ResourceInputStream_open(JNIEnv *env, jclass clazz, java_lang_String *name)
+JNIEXPORT struct java_lang_Object* JNICALL Java_com_sun_cldc_io_ResourceInputStream_open(JNIEnv *env, jclass clazz, java_lang_String *name)
{
- vm_abort("Java_com_sun_cldc_io_ResourceInputStream_open: IMPLEMENT ME!");
+
+ list_classpath_entry *lce;
+ char *filename;
+ s4 filenamelen;
+ char *path;
+ FILE *classfile;
+ /*struct stat statBuffer;
+ int bufferSize = -1;*/
+ utf *uname;
+ /*java_lang_Integer *fhandler;*/
+ com_sun_cldchi_jvm_FileDescriptor *fileDescriptor;
+ classinfo *ci;
+
+
+ /* get the classname as char string (do it here for the warning at
+ the end of the function) */
+
+ uname = javastring_toutf((java_objectheader *)name, false);
+ filenamelen = utf_bytes(uname) + strlen("0");
+ filename = MNEW(char, filenamelen);
+ utf_copy(filename, uname);
+ classfile = NULL;
+
+
+ /* walk through all classpath entries */
+
+ for (lce = list_first(list_classpath_entries); lce != NULL;
+ lce = list_next(list_classpath_entries, lce)) {
+
+ path = MNEW(char, lce->pathlen + filenamelen);
+ strcpy(path, lce->path);
+ strcat(path, filename);
+
+ classfile = fopen(path, "r");
+
+ MFREE(path, char, lce->pathlen + filenamelen);
+
+ if (classfile) { /* file exists */
+ break;
+ }
+ }
+
+ MFREE(filename, char, filenamelen);
+
+ if (classfile) {
+ ci = load_class_bootstrap(utf_new_char("com/sun/cldchi/jvm/FileDescriptor"));
+ fileDescriptor = (com_sun_cldchi_jvm_FileDescriptor *) native_new_and_init(ci);
+ fileDescriptor->handle = (int) classfile;
+ fileDescriptor->valid = (int) 0;
+ return (java_lang_Object*) fileDescriptor;
+ } else {
+ return NULL;
+ }
+
+}
+
+
+/*
+ * Class: com_sun_cldc_io_ResourceInputStream
+ * Method: bytesRemain
+ * Signature: (Ljava/lang/Object;)I
+ */
+JNIEXPORT s4 JNICALL Java_com_sun_cldc_io_ResourceInputStream_bytesRemain(JNIEnv *env, jclass clazz, struct java_lang_Object* jobj) {
+
+ com_sun_cldchi_jvm_FileDescriptor *fileDescriptor;
+ struct stat statBuffer;
+ FILE *file;
+ int fd;
+ int position;
+ int hposition;
+
+ fileDescriptor = (com_sun_cldchi_jvm_FileDescriptor *) jobj;
+ file = (FILE *)fileDescriptor->handle;
+
+ /* Change access position if needed */
+ hposition = fileDescriptor->valid;
+ position = ftell(file);
+ if (position != hposition) {
+ fseek(file, hposition, SEEK_SET);
+ }
+
+ fd = fileno(file);
+ if (fstat(fd, &statBuffer) != -1) {
+ return (statBuffer.st_size - hposition);
+ } else {
+ /* TODO Throw an IOException */
+ return 0;
+ }
- return NULL;
}
+/*
+ * Class: com_sun_cldc_io_ResourceInputStream
+ * Method: readByte
+ * Signature: (Ljava/lang/Object;)I
+ */
+JNIEXPORT s4 JNICALL Java_com_sun_cldc_io_ResourceInputStream_readByte(JNIEnv *env, jclass clazz, struct java_lang_Object* jobj) {
+
+ com_sun_cldchi_jvm_FileDescriptor *fileDescriptor;
+ int readBytes = -1;
+ char byte;
+ FILE * file;
+ int position;
+ int hposition;
+
+ fileDescriptor = (com_sun_cldchi_jvm_FileDescriptor *) jobj;
+ file = (FILE *)fileDescriptor->handle;
+
+ /* Change access position if needed */
+ hposition = fileDescriptor->valid;
+ position = ftell(file);
+ if (position != hposition) {
+ fseek(file, hposition, SEEK_SET);
+ }
+
+ readBytes = fread(&byte, 1, 1, file);
+
+ /* Check if EOF or an error occurred */
+ if (readBytes != 1) {
+ if (feof(file)) {
+ return -1;
+ } else if (ferror(file)) {
+ /* TODO: throw an IOException */
+ }
+ }
+
+ /* Update access position */
+ fileDescriptor->valid = ftell(file);
+
+ return (byte & 0xFF);
+
+}
+
+/*
+ * Class: com_sun_cldc_io_ResourceInputStream
+ * Method: readBytes
+ * Signature: (Ljava/lang/Object;[BII)I
+ */
+JNIEXPORT s4 JNICALL Java_com_sun_cldc_io_ResourceInputStream_readBytes(JNIEnv *env, jclass clazz, struct java_lang_Object* jobj, java_bytearray* byteArray, s4 off, s4 len) {
+
+ com_sun_cldchi_jvm_FileDescriptor *fileDescriptor;
+ int readBytes = -1;
+ FILE * file;
+ int position;
+ int hposition;
+ void *buf;
+
+ /* get pointer to the buffer */
+ buf = &(byteArray->data[off]);
+
+ fileDescriptor = (com_sun_cldchi_jvm_FileDescriptor *) jobj;
+ file = (FILE *)fileDescriptor->handle;
+
+ /* Change access position if needed */
+ hposition = fileDescriptor->valid;
+ position = ftell(file);
+ if (position != hposition) {
+ fseek(file, hposition, SEEK_SET);
+ }
+
+ readBytes = fread(buf, 1, len, file);
+
+ /* Check if EOF or an error occurred */
+ if (readBytes != len) {
+ if ((readBytes == 0) && feof(file)) {
+ return -1;
+ } else if (ferror(file)) {
+ /* TODO: throw an IOException */
+ }
+ }
+
+ /* Update access position */
+ fileDescriptor->valid = ftell(file);
+
+ return readBytes;
+}
+
+/*
+ * Class: com_sun_cldc_io_ResourceInputStream
+ * Method: clone
+ * Signature: (Ljava/lang/Object;)Ljava/lang/Object;
+ */
+JNIEXPORT struct java_lang_Object* JNICALL Java_com_sun_cldc_io_ResourceInputStream_clone(JNIEnv *env, jclass clazz, struct java_lang_Object* jobj) {
+
+ classinfo *ci;
+ com_sun_cldchi_jvm_FileDescriptor *srcFileDescriptor;
+ com_sun_cldchi_jvm_FileDescriptor *dstFileDescriptor;
+
+ srcFileDescriptor = (com_sun_cldchi_jvm_FileDescriptor *) jobj;
+
+ ci = load_class_bootstrap(utf_new_char("com/sun/cldchi/jvm/FileDescriptor"));
+ dstFileDescriptor = (com_sun_cldchi_jvm_FileDescriptor *) native_new_and_init(ci);
+ dstFileDescriptor->handle = srcFileDescriptor->handle;
+ dstFileDescriptor->valid = srcFileDescriptor->valid;
+
+ return (java_lang_Object*) dstFileDescriptor;
+
+}
+
+
+
/*
* These are local overrides for various environment variables in Emacs.
diff -Nur ../cacao-0.98.orig/src/native/vm/cldc1.1/Makefile.am ./src/native/vm/cldc1.1/Makefile.am
--- ../cacao-0.98.orig/src/native/vm/cldc1.1/Makefile.am 2007-04-02 13:23:24.000000000 +0200
+++ ./src/native/vm/cldc1.1/Makefile.am 2007-07-05 15:51:34.000000000 +0200
@@ -38,6 +38,7 @@
com_sun_cldc_io_j2me_socket_Protocol.c \
com_sun_cldchi_io_ConsoleOutputStream.c \
com_sun_cldchi_jvm_JVM.c \
+ com_sun_cldchi_jvm_FileDescriptor.c \
java_lang_Class.c \
java_lang_Double.c \
java_lang_Float.c \