1
2 #include "xmlvm.h"
3 #include "java_io_File.h"
4
5
6 //XMLVM_BEGIN_NATIVE_IMPLEMENTATION
7 #include <sys/stat.h>
8 #include <unistd.h>
9 #include <dirent.h>
10 #include "xmlvm-util.h"
11
readlink_malloc(const char * filename)12 char * readlink_malloc (const char *filename)
13 {
14 int size = 100;
15 char *buffer = NULL;
16
17 while (1)
18 {
19 buffer = (char *) XMLVM_ATOMIC_MALLOC (size);
20 int nchars = readlink (filename, buffer, size);
21 if (nchars < 0)
22 {
23 XMLVM_FREE(buffer);
24 return NULL;
25 }
26 if (nchars < size)
27 return buffer;
28 XMLVM_FREE(buffer);
29 size *= 2;
30 }
31 }
32 //XMLVM_END_NATIVE_IMPLEMENTATION
33
java_io_File_oneTimeInitialization__()34 void java_io_File_oneTimeInitialization__()
35 {
36 //XMLVM_BEGIN_NATIVE[java_io_File_oneTimeInitialization__]
37 //XMLVM_END_NATIVE
38 }
39
java_io_File_rootsImpl__()40 JAVA_OBJECT java_io_File_rootsImpl__()
41 {
42 //XMLVM_BEGIN_NATIVE[java_io_File_rootsImpl__]
43 XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
44 //XMLVM_END_NATIVE
45 }
46
java_io_File_isCaseSensitiveImpl__()47 JAVA_BOOLEAN java_io_File_isCaseSensitiveImpl__()
48 {
49 //XMLVM_BEGIN_NATIVE[java_io_File_isCaseSensitiveImpl__]
50 return 1;
51 //XMLVM_END_NATIVE
52 }
53
java_io_File_deleteDirImpl___byte_1ARRAY(JAVA_OBJECT me,JAVA_OBJECT n1)54 JAVA_BOOLEAN java_io_File_deleteDirImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
55 {
56 //XMLVM_BEGIN_NATIVE[java_io_File_deleteDirImpl___byte_1ARRAY]
57 char* fileName = XMLVMUtil_convertFromByteArray(n1);
58 return rmdir(fileName) == 0;
59 //XMLVM_END_NATIVE
60 }
61
java_io_File_deleteFileImpl___byte_1ARRAY(JAVA_OBJECT me,JAVA_OBJECT n1)62 JAVA_BOOLEAN java_io_File_deleteFileImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
63 {
64 //XMLVM_BEGIN_NATIVE[java_io_File_deleteFileImpl___byte_1ARRAY]
65 char* fileName = XMLVMUtil_convertFromByteArray(n1);
66 return remove(fileName) == 0;
67 //XMLVM_END_NATIVE
68 }
69
java_io_File_existsImpl___byte_1ARRAY(JAVA_OBJECT me,JAVA_OBJECT n1)70 JAVA_BOOLEAN java_io_File_existsImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
71 {
72 //XMLVM_BEGIN_NATIVE[java_io_File_existsImpl___byte_1ARRAY]
73 char* fileName = XMLVMUtil_convertFromByteArray(n1);
74 struct stat buf;
75 int err;
76 err = stat(fileName, &buf);
77 return err != -1;
78 //XMLVM_END_NATIVE
79 }
80
java_io_File_getCanonImpl___byte_1ARRAY(JAVA_OBJECT me,JAVA_OBJECT n1)81 JAVA_OBJECT java_io_File_getCanonImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
82 {
83 //XMLVM_BEGIN_NATIVE[java_io_File_getCanonImpl___byte_1ARRAY]
84 //See HARMONY/classlib/modules/luni/src/main/native/luni/shared/file.c
85 //They don't seem to do more either on a UNIX file system
86 return n1;
87 //XMLVM_END_NATIVE
88 }
89
java_io_File_getTotalSpaceImpl___byte_1ARRAY(JAVA_OBJECT me,JAVA_OBJECT n1)90 JAVA_LONG java_io_File_getTotalSpaceImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
91 {
92 //XMLVM_BEGIN_NATIVE[java_io_File_getTotalSpaceImpl___byte_1ARRAY]
93 XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
94 //XMLVM_END_NATIVE
95 }
96
java_io_File_getUsableSpaceImpl___byte_1ARRAY(JAVA_OBJECT me,JAVA_OBJECT n1)97 JAVA_LONG java_io_File_getUsableSpaceImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
98 {
99 //XMLVM_BEGIN_NATIVE[java_io_File_getUsableSpaceImpl___byte_1ARRAY]
100 XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
101 //XMLVM_END_NATIVE
102 }
103
java_io_File_getFreeSpaceImpl___byte_1ARRAY(JAVA_OBJECT me,JAVA_OBJECT n1)104 JAVA_LONG java_io_File_getFreeSpaceImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
105 {
106 //XMLVM_BEGIN_NATIVE[java_io_File_getFreeSpaceImpl___byte_1ARRAY]
107 XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
108 //XMLVM_END_NATIVE
109 }
110
java_io_File_isDirectoryImpl___byte_1ARRAY(JAVA_OBJECT me,JAVA_OBJECT n1)111 JAVA_BOOLEAN java_io_File_isDirectoryImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
112 {
113 //XMLVM_BEGIN_NATIVE[java_io_File_isDirectoryImpl___byte_1ARRAY]
114 char* fileName = XMLVMUtil_convertFromByteArray(n1);
115 struct stat buf;
116 int err;
117 err = stat(fileName, &buf);
118 return buf.st_mode; // XXX & S_IFDIR;
119 //XMLVM_END_NATIVE
120 }
121
java_io_File_isFileImpl___byte_1ARRAY(JAVA_OBJECT me,JAVA_OBJECT n1)122 JAVA_BOOLEAN java_io_File_isFileImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
123 {
124 //XMLVM_BEGIN_NATIVE[java_io_File_isFileImpl___byte_1ARRAY]
125 XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
126 //XMLVM_END_NATIVE
127 }
128
java_io_File_isHiddenImpl___byte_1ARRAY(JAVA_OBJECT me,JAVA_OBJECT n1)129 JAVA_BOOLEAN java_io_File_isHiddenImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
130 {
131 //XMLVM_BEGIN_NATIVE[java_io_File_isHiddenImpl___byte_1ARRAY]
132 XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
133 //XMLVM_END_NATIVE
134 }
135
java_io_File_isReadOnlyImpl___byte_1ARRAY(JAVA_OBJECT me,JAVA_OBJECT n1)136 JAVA_BOOLEAN java_io_File_isReadOnlyImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
137 {
138 //XMLVM_BEGIN_NATIVE[java_io_File_isReadOnlyImpl___byte_1ARRAY]
139 XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
140 //XMLVM_END_NATIVE
141 }
142
java_io_File_isWriteOnlyImpl___byte_1ARRAY(JAVA_OBJECT me,JAVA_OBJECT n1)143 JAVA_BOOLEAN java_io_File_isWriteOnlyImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
144 {
145 //XMLVM_BEGIN_NATIVE[java_io_File_isWriteOnlyImpl___byte_1ARRAY]
146 return (JAVA_BOOLEAN) 0; //TODO: Check this natively
147 //XMLVM_END_NATIVE
148 }
149
java_io_File_getLinkImpl___byte_1ARRAY(JAVA_OBJECT me,JAVA_OBJECT n1)150 JAVA_OBJECT java_io_File_getLinkImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
151 {
152 //XMLVM_BEGIN_NATIVE[java_io_File_getLinkImpl___byte_1ARRAY]
153 const char* fileName = XMLVMUtil_convertFromByteArray(n1);
154 char* resolved = readlink_malloc(fileName);
155 if(resolved == NULL) {
156 return n1;
157 } else {
158 XMLVMElem _r0;
159 int length = strlen(resolved);
160 _r0.o = XMLVMArray_createSingleDimension(__CLASS_byte, length);
161 char* data = (char*) ((org_xmlvm_runtime_XMLVMArray*) _r0.o)->fields.org_xmlvm_runtime_XMLVMArray.array_;
162 XMLVM_MEMCPY(data, resolved, length);
163 return _r0.o;
164 }
165 //XMLVM_END_NATIVE
166 }
167
java_io_File_lastModifiedImpl___byte_1ARRAY(JAVA_OBJECT me,JAVA_OBJECT n1)168 JAVA_LONG java_io_File_lastModifiedImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
169 {
170 //XMLVM_BEGIN_NATIVE[java_io_File_lastModifiedImpl___byte_1ARRAY]
171 char* fileName = XMLVMUtil_convertFromByteArray(n1);
172 struct stat buf;
173 int err;
174 err = stat(fileName, &buf);
175 return buf.st_mtime;
176 //XMLVM_END_NATIVE
177 }
178
java_io_File_setLastModifiedImpl___byte_1ARRAY_long(JAVA_OBJECT me,JAVA_OBJECT n1,JAVA_LONG n2)179 JAVA_BOOLEAN java_io_File_setLastModifiedImpl___byte_1ARRAY_long(JAVA_OBJECT me, JAVA_OBJECT n1, JAVA_LONG n2)
180 {
181 //XMLVM_BEGIN_NATIVE[java_io_File_setLastModifiedImpl___byte_1ARRAY_long]
182 XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
183 //XMLVM_END_NATIVE
184 }
185
java_io_File_setReadOnlyImpl___byte_1ARRAY(JAVA_OBJECT me,JAVA_OBJECT n1)186 JAVA_BOOLEAN java_io_File_setReadOnlyImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
187 {
188 //XMLVM_BEGIN_NATIVE[java_io_File_setReadOnlyImpl___byte_1ARRAY]
189 XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
190 //XMLVM_END_NATIVE
191 }
192
java_io_File_setReadableImpl___byte_1ARRAY_boolean_boolean(JAVA_OBJECT me,JAVA_OBJECT n1,JAVA_BOOLEAN n2,JAVA_BOOLEAN n3)193 JAVA_BOOLEAN java_io_File_setReadableImpl___byte_1ARRAY_boolean_boolean(JAVA_OBJECT me, JAVA_OBJECT n1, JAVA_BOOLEAN n2, JAVA_BOOLEAN n3)
194 {
195 //XMLVM_BEGIN_NATIVE[java_io_File_setReadableImpl___byte_1ARRAY_boolean_boolean]
196 XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
197 //XMLVM_END_NATIVE
198 }
199
java_io_File_setWritableImpl___byte_1ARRAY_boolean_boolean(JAVA_OBJECT me,JAVA_OBJECT n1,JAVA_BOOLEAN n2,JAVA_BOOLEAN n3)200 JAVA_BOOLEAN java_io_File_setWritableImpl___byte_1ARRAY_boolean_boolean(JAVA_OBJECT me, JAVA_OBJECT n1, JAVA_BOOLEAN n2, JAVA_BOOLEAN n3)
201 {
202 //XMLVM_BEGIN_NATIVE[java_io_File_setWritableImpl___byte_1ARRAY_boolean_boolean]
203 XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
204 //XMLVM_END_NATIVE
205 }
206
java_io_File_lengthImpl___byte_1ARRAY(JAVA_OBJECT me,JAVA_OBJECT n1)207 JAVA_LONG java_io_File_lengthImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
208 {
209 //XMLVM_BEGIN_NATIVE[java_io_File_lengthImpl___byte_1ARRAY]
210 char* fileName = XMLVMUtil_convertFromByteArray(n1);
211 FILE* fp = fopen(fileName, "rb");
212 fseek(fp, 0L, SEEK_END);
213 JAVA_LONG size = ftell(fp);
214 fclose(fp);
215 return size;
216 //XMLVM_END_NATIVE
217 }
218
java_io_File_listImpl___byte_1ARRAY(JAVA_OBJECT n1)219 JAVA_OBJECT java_io_File_listImpl___byte_1ARRAY(JAVA_OBJECT n1)
220 {
221 //XMLVM_BEGIN_NATIVE[java_io_File_listImpl___byte_1ARRAY]
222 // TODO: There may be memory management issues in this implementation
223 org_xmlvm_runtime_XMLVMArray *array =
224 (org_xmlvm_runtime_XMLVMArray *) __NEW_org_xmlvm_runtime_XMLVMArray();
225 array->fields.org_xmlvm_runtime_XMLVMArray.type_ = __CLASS_org_xmlvm_runtime_XMLVMArray;
226 array->fields.org_xmlvm_runtime_XMLVMArray.length_ = 256;
227 array->fields.org_xmlvm_runtime_XMLVMArray.array_ = XMLVM_MALLOC(sizeof(JAVA_OBJECT) * 256);
228
229 JAVA_OBJECT *subarray = (JAVA_OBJECT *) array->fields.org_xmlvm_runtime_XMLVMArray.array_;
230
231 int i = 0;
232 for (i = 0; i < 256; i++) {
233 org_xmlvm_runtime_XMLVMArray *array2 =
234 (org_xmlvm_runtime_XMLVMArray *) __NEW_org_xmlvm_runtime_XMLVMArray();
235 array2->fields.org_xmlvm_runtime_XMLVMArray.type_ = __CLASS_byte;
236 array2->fields.org_xmlvm_runtime_XMLVMArray.length_ = 256;
237 array2->fields.org_xmlvm_runtime_XMLVMArray.array_ = XMLVM_MALLOC(sizeof(char) * 256);
238 subarray[i] = (JAVA_OBJECT) array2;
239 }
240
241 // Get the
242 char* fileName = XMLVMUtil_convertFromByteArray(n1);
243
244 DIR *d;
245 struct dirent *e;
246 if (d = opendir(fileName)) {
247 i = 0;
248 int j = 0;
249 while (e = readdir(d)) {
250 if (i < 256) { // TODO: What if there are more than 256 files?
251 org_xmlvm_runtime_XMLVMArray *array2 = (org_xmlvm_runtime_XMLVMArray *) (subarray[i]);
252 char *bytearray = array2->fields.org_xmlvm_runtime_XMLVMArray.array_;
253 for (j = 0; j < 256; j++) {
254 bytearray[j] = e->d_name[j];
255 if (e->d_name[j] == 0) {
256 array2->fields.org_xmlvm_runtime_XMLVMArray.length_ = j;
257 break;
258 }
259 }
260 i++;
261
262 }
263
264 // Add e->d_name to array!
265 }
266 array->fields.org_xmlvm_runtime_XMLVMArray.length_ = i;
267 closedir(d);
268 } else {
269 // TODO: Throw IOException?
270 }
271 return array;
272 //XMLVM_END_NATIVE
273 }
274
java_io_File_mkdirImpl___byte_1ARRAY(JAVA_OBJECT me,JAVA_OBJECT n1)275 JAVA_BOOLEAN java_io_File_mkdirImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
276 {
277 //XMLVM_BEGIN_NATIVE[java_io_File_mkdirImpl___byte_1ARRAY]
278 XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
279 //XMLVM_END_NATIVE
280 }
281
java_io_File_newFileImpl___byte_1ARRAY(JAVA_OBJECT me,JAVA_OBJECT n1)282 JAVA_INT java_io_File_newFileImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
283 {
284 //XMLVM_BEGIN_NATIVE[java_io_File_newFileImpl___byte_1ARRAY]
285 XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
286 //XMLVM_END_NATIVE
287 }
288
java_io_File_renameToImpl___byte_1ARRAY_byte_1ARRAY(JAVA_OBJECT me,JAVA_OBJECT n1,JAVA_OBJECT n2)289 JAVA_BOOLEAN java_io_File_renameToImpl___byte_1ARRAY_byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1, JAVA_OBJECT n2)
290 {
291 //XMLVM_BEGIN_NATIVE[java_io_File_renameToImpl___byte_1ARRAY_byte_1ARRAY]
292 XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
293 //XMLVM_END_NATIVE
294 }
295
java_io_File_setExecutableImpl___byte_1ARRAY_boolean_boolean(JAVA_OBJECT me,JAVA_OBJECT n1,JAVA_BOOLEAN n2,JAVA_BOOLEAN n3)296 JAVA_BOOLEAN java_io_File_setExecutableImpl___byte_1ARRAY_boolean_boolean(JAVA_OBJECT me, JAVA_OBJECT n1, JAVA_BOOLEAN n2, JAVA_BOOLEAN n3)
297 {
298 //XMLVM_BEGIN_NATIVE[java_io_File_setExecutableImpl___byte_1ARRAY_boolean_boolean]
299 XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
300 //XMLVM_END_NATIVE
301 }
302
java_io_File_isExecutableImpl___byte_1ARRAY(JAVA_OBJECT me,JAVA_OBJECT n1)303 JAVA_BOOLEAN java_io_File_isExecutableImpl___byte_1ARRAY(JAVA_OBJECT me, JAVA_OBJECT n1)
304 {
305 //XMLVM_BEGIN_NATIVE[java_io_File_isExecutableImpl___byte_1ARRAY]
306 XMLVM_UNIMPLEMENTED_NATIVE_METHOD();
307 //XMLVM_END_NATIVE
308 }
309
310