diff options
Diffstat (limited to 'packages/cacao/files/midpath.patch')
-rw-r--r-- | packages/cacao/files/midpath.patch | 372 |
1 files changed, 372 insertions, 0 deletions
diff --git a/packages/cacao/files/midpath.patch b/packages/cacao/files/midpath.patch new file mode 100644 index 0000000000..b905f774af --- /dev/null +++ b/packages/cacao/files/midpath.patch @@ -0,0 +1,372 @@ +Index: cacao-0.98/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 ++++ cacao-0.98/src/native/vm/cldc1.1/com_sun_cldc_io_ResourceInputStream.c 2007-07-22 00:15:55.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. +Index: cacao-0.98/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 ++++ cacao-0.98/src/native/vm/cldc1.1/Makefile.am 2007-07-22 00:15:55.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 \ +Index: cacao-0.98/src/native/include/Makefile.am +=================================================================== +--- cacao-0.98.orig/src/native/include/Makefile.am 2007-05-23 20:15:07.000000000 +0200 ++++ cacao-0.98/src/native/include/Makefile.am 2007-07-22 00:15: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 +Index: cacao-0.98/src/native/vm/cldc1.1/com_sun_cldchi_jvm_FileDescriptor.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ cacao-0.98/src/native/vm/cldc1.1/com_sun_cldchi_jvm_FileDescriptor.c 2007-07-22 00:18:01.000000000 +0200 +@@ -0,0 +1,70 @@ ++/* 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: java_lang_VMRuntime.c 5900 2006-11-04 17:30:44Z michi $ ++ ++*/ ++ ++#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); ++ ++} |