1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
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; // XXX & 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
}
|