aboutsummaryrefslogtreecommitdiff
path: root/tests/nbody-java/native_java_io_File.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/nbody-java/native_java_io_File.c')
-rw-r--r--tests/nbody-java/native_java_io_File.c309
1 files changed, 309 insertions, 0 deletions
diff --git a/tests/nbody-java/native_java_io_File.c b/tests/nbody-java/native_java_io_File.c
new file mode 100644
index 00000000..b10e85e5
--- /dev/null
+++ b/tests/nbody-java/native_java_io_File.c
@@ -0,0 +1,309 @@
+
+#include "xmlvm.h"
+#include "java_io_File.h"
+
+
+//XMLVM_BEGIN_NATIVE_IMPLEMENTATION
+#include <sys/stat.h>
+#include <unistd.h>
+#include <dirent.h>
+#include "xmlvm-util.h"
+
+char * readlink_malloc (const char *filename)
+{
+ int size = 100;
+ char *buffer = NULL;
+
+ while (1)
+ {
+ buffer = (char *) XMLVM_ATOMIC_MALLOC (size);
+ int nchars = readlink (filename, buffer, size);
+ if (nchars < 0)
+ {
+ XMLVM_FREE(buffer);
+ return NULL;
+ }
+ if (nchars < size)
+ return buffer;
+ XMLVM_FREE(buffer);
+ size *= 2;
+ }
+}
+//XMLVM_END_NATIVE_IMPLEMENTATION
+
+void java_io_File_oneTimeInitialization__()
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_oneTimeInitialization__]
+ //XMLVM_END_NATIVE
+}
+
+JAVA_OBJECT java_io_File_rootsImpl__()
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_rootsImpl__]
+ XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
+ //XMLVM_END_NATIVE
+}
+
+JAVA_BOOLEAN java_io_File_isCaseSensitiveImpl__()
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_isCaseSensitiveImpl__]
+ return 1;
+ //XMLVM_END_NATIVE
+}
+
+JAVA_BOOLEAN java_io_File_deleteDirImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_deleteDirImpl___byte_1ARRAY]
+ char* fileName = XMLVMUtil_convertFromByteArray(n1);
+ return rmdir(fileName) == 0;
+ //XMLVM_END_NATIVE
+}
+
+JAVA_BOOLEAN java_io_File_deleteFileImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_deleteFileImpl___byte_1ARRAY]
+ char* fileName = XMLVMUtil_convertFromByteArray(n1);
+ return remove(fileName) == 0;
+ //XMLVM_END_NATIVE
+}
+
+JAVA_BOOLEAN java_io_File_existsImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_existsImpl___byte_1ARRAY]
+ char* fileName = XMLVMUtil_convertFromByteArray(n1);
+ struct stat buf;
+ int err;
+ err = stat(fileName, &buf);
+ return err != -1;
+ //XMLVM_END_NATIVE
+}
+
+JAVA_OBJECT java_io_File_getCanonImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_getCanonImpl___byte_1ARRAY]
+ //See HARMONY/classlib/modules/luni/src/main/native/luni/shared/file.c
+ //They don't seem to do more either on a UNIX file system
+ return n1;
+ //XMLVM_END_NATIVE
+}
+
+JAVA_LONG java_io_File_getTotalSpaceImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_getTotalSpaceImpl___byte_1ARRAY]
+ XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
+ //XMLVM_END_NATIVE
+}
+
+JAVA_LONG java_io_File_getUsableSpaceImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_getUsableSpaceImpl___byte_1ARRAY]
+ XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
+ //XMLVM_END_NATIVE
+}
+
+JAVA_LONG java_io_File_getFreeSpaceImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_getFreeSpaceImpl___byte_1ARRAY]
+ XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
+ //XMLVM_END_NATIVE
+}
+
+JAVA_BOOLEAN java_io_File_isDirectoryImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_isDirectoryImpl___byte_1ARRAY]
+ char* fileName = XMLVMUtil_convertFromByteArray(n1);
+ struct stat buf;
+ int err;
+ err = stat(fileName, &buf);
+ return buf.st_mode & S_IFDIR;
+ //XMLVM_END_NATIVE
+}
+
+JAVA_BOOLEAN java_io_File_isFileImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_isFileImpl___byte_1ARRAY]
+ XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
+ //XMLVM_END_NATIVE
+}
+
+JAVA_BOOLEAN java_io_File_isHiddenImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_isHiddenImpl___byte_1ARRAY]
+ XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
+ //XMLVM_END_NATIVE
+}
+
+JAVA_BOOLEAN java_io_File_isReadOnlyImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_isReadOnlyImpl___byte_1ARRAY]
+ XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
+ //XMLVM_END_NATIVE
+}
+
+JAVA_BOOLEAN java_io_File_isWriteOnlyImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_isWriteOnlyImpl___byte_1ARRAY]
+ return (JAVA_BOOLEAN) 0; //TODO: Check this natively
+ //XMLVM_END_NATIVE
+}
+
+JAVA_OBJECT java_io_File_getLinkImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_getLinkImpl___byte_1ARRAY]
+ const char* fileName = XMLVMUtil_convertFromByteArray(n1);
+ char* resolved = readlink_malloc(fileName);
+ if(resolved == NULL) {
+ return n1;
+ } else {
+ XMLVMElem _r0;
+ int length = strlen(resolved);
+ _r0.o = XMLVMArray_createSingleDimension(__CLASS_byte, length);
+ char* data = (char*) ((org_xmlvm_runtime_XMLVMArray*) _r0.o)->fields.org_xmlvm_runtime_XMLVMArray.array_;
+ XMLVM_MEMCPY(data, resolved, length);
+ return _r0.o;
+ }
+ //XMLVM_END_NATIVE
+}
+
+JAVA_LONG java_io_File_lastModifiedImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_lastModifiedImpl___byte_1ARRAY]
+ char* fileName = XMLVMUtil_convertFromByteArray(n1);
+ struct stat buf;
+ int err;
+ err = stat(fileName, &buf);
+ return buf.st_mtime;
+ //XMLVM_END_NATIVE
+}
+
+JAVA_BOOLEAN java_io_File_setLastModifiedImpl___byte_1ARRAY_long(JAVA_OBJECT me, JAVA_OBJECT n1, JAVA_LONG n2)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_setLastModifiedImpl___byte_1ARRAY_long]
+ XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
+ //XMLVM_END_NATIVE
+}
+
+JAVA_BOOLEAN java_io_File_setReadOnlyImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_setReadOnlyImpl___byte_1ARRAY]
+ XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
+ //XMLVM_END_NATIVE
+}
+
+JAVA_BOOLEAN java_io_File_setReadableImpl___byte_1ARRAY_boolean_boolean(JAVA_OBJECT me, JAVA_OBJECT n1, JAVA_BOOLEAN n2, JAVA_BOOLEAN n3)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_setReadableImpl___byte_1ARRAY_boolean_boolean]
+ XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
+ //XMLVM_END_NATIVE
+}
+
+JAVA_BOOLEAN java_io_File_setWritableImpl___byte_1ARRAY_boolean_boolean(JAVA_OBJECT me, JAVA_OBJECT n1, JAVA_BOOLEAN n2, JAVA_BOOLEAN n3)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_setWritableImpl___byte_1ARRAY_boolean_boolean]
+ XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
+ //XMLVM_END_NATIVE
+}
+
+JAVA_LONG java_io_File_lengthImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_lengthImpl___byte_1ARRAY]
+ char* fileName = XMLVMUtil_convertFromByteArray(n1);
+ FILE* fp = fopen(fileName, "rb");
+ fseek(fp, 0L, SEEK_END);
+ JAVA_LONG size = ftell(fp);
+ fclose(fp);
+ return size;
+ //XMLVM_END_NATIVE
+}
+
+JAVA_OBJECT java_io_File_listImpl___byte_1ARRAY(JAVA_OBJECT n1)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_listImpl___byte_1ARRAY]
+ // TODO: There may be memory management issues in this implementation
+ org_xmlvm_runtime_XMLVMArray *array =
+ (org_xmlvm_runtime_XMLVMArray *) __NEW_org_xmlvm_runtime_XMLVMArray();
+ array->fields.org_xmlvm_runtime_XMLVMArray.type_ = __CLASS_org_xmlvm_runtime_XMLVMArray;
+ array->fields.org_xmlvm_runtime_XMLVMArray.length_ = 256;
+ array->fields.org_xmlvm_runtime_XMLVMArray.array_ = XMLVM_MALLOC(sizeof(JAVA_OBJECT) * 256);
+
+ JAVA_OBJECT *subarray = (JAVA_OBJECT *) array->fields.org_xmlvm_runtime_XMLVMArray.array_;
+
+ int i = 0;
+ for (i = 0; i < 256; i++) {
+ org_xmlvm_runtime_XMLVMArray *array2 =
+ (org_xmlvm_runtime_XMLVMArray *) __NEW_org_xmlvm_runtime_XMLVMArray();
+ array2->fields.org_xmlvm_runtime_XMLVMArray.type_ = __CLASS_byte;
+ array2->fields.org_xmlvm_runtime_XMLVMArray.length_ = 256;
+ array2->fields.org_xmlvm_runtime_XMLVMArray.array_ = XMLVM_MALLOC(sizeof(char) * 256);
+ subarray[i] = (JAVA_OBJECT) array2;
+ }
+
+ // Get the
+ char* fileName = XMLVMUtil_convertFromByteArray(n1);
+
+ DIR *d;
+ struct dirent *e;
+ if (d = opendir(fileName)) {
+ i = 0;
+ int j = 0;
+ while (e = readdir(d)) {
+ if (i < 256) { // TODO: What if there are more than 256 files?
+ org_xmlvm_runtime_XMLVMArray *array2 = (org_xmlvm_runtime_XMLVMArray *) (subarray[i]);
+ char *bytearray = array2->fields.org_xmlvm_runtime_XMLVMArray.array_;
+ for (j = 0; j < 256; j++) {
+ bytearray[j] = e->d_name[j];
+ if (e->d_name[j] == 0) {
+ array2->fields.org_xmlvm_runtime_XMLVMArray.length_ = j;
+ break;
+ }
+ }
+ i++;
+
+ }
+
+ // Add e->d_name to array!
+ }
+ array->fields.org_xmlvm_runtime_XMLVMArray.length_ = i;
+ closedir(d);
+ } else {
+ // TODO: Throw IOException?
+ }
+ return array;
+ //XMLVM_END_NATIVE
+}
+
+JAVA_BOOLEAN java_io_File_mkdirImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_mkdirImpl___byte_1ARRAY]
+ XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
+ //XMLVM_END_NATIVE
+}
+
+JAVA_INT java_io_File_newFileImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_newFileImpl___byte_1ARRAY]
+ XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
+ //XMLVM_END_NATIVE
+}
+
+JAVA_BOOLEAN java_io_File_renameToImpl___byte_1ARRAY_byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1, JAVA_OBJECT n2)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_renameToImpl___byte_1ARRAY_byte_1ARRAY]
+ XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
+ //XMLVM_END_NATIVE
+}
+
+JAVA_BOOLEAN java_io_File_setExecutableImpl___byte_1ARRAY_boolean_boolean(JAVA_OBJECT me, JAVA_OBJECT n1, JAVA_BOOLEAN n2, JAVA_BOOLEAN n3)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_setExecutableImpl___byte_1ARRAY_boolean_boolean]
+ XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
+ //XMLVM_END_NATIVE
+}
+
+JAVA_BOOLEAN java_io_File_isExecutableImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
+{
+ //XMLVM_BEGIN_NATIVE[java_io_File_isExecutableImpl___byte_1ARRAY]
+ XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
+ //XMLVM_END_NATIVE
+}
+