OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | |
2 // for details. All rights reserved. Use of this source code is governed by a | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 #include "entry.h" | |
6 #include "messaging.h" | |
7 | |
8 #define DART_TIMESTAMP(name) \ | |
9 Dart_CObject name; \ | |
10 if (archive_entry_ ## name ## _is_set(e)) { \ | |
11 int64_t seconds = archive_entry_ ## name(e); \ | |
12 int64_t nanoseconds = archive_entry_ ## name ## _nsec(e); \ | |
13 name.type = kInt64; \ | |
14 name.value.as_int64 = seconds * 1000 + nanoseconds / 1000000; \ | |
15 } else { \ | |
16 name.type = kNull; \ | |
17 } | |
18 | |
19 #define RAW_ARCHIVE_SIZE 29 | |
20 | |
21 void postArchiveEntryArray(Dart_Port p, struct archive_entry* e) { | |
22 if (checkPointerError(p, e, "archive entry")) return; | |
23 | |
24 Dart_CObject* archive_entry_array[RAW_ARCHIVE_SIZE]; | |
25 | |
26 DART_INT64(id, (intptr_t) e); | |
27 archive_entry_array[0] = &id; | |
28 | |
29 // archive_entry_paths(3) | |
30 DART_STRING(hardlink, (char*) archive_entry_hardlink(e)); | |
31 archive_entry_array[1] = &hardlink; | |
32 DART_STRING(pathname, (char*) archive_entry_pathname(e)); | |
33 archive_entry_array[2] = &pathname; | |
34 DART_STRING(sourcepath, (char*) archive_entry_sourcepath(e)); | |
35 archive_entry_array[3] = &sourcepath; | |
36 DART_STRING(symlink, (char*) archive_entry_symlink(e)); | |
37 archive_entry_array[4] = &symlink; | |
38 | |
39 // archive_entry_perms(3) | |
40 DART_INT32(gid, archive_entry_gid(e)); | |
41 archive_entry_array[5] = &gid; | |
42 DART_INT32(uid, archive_entry_uid(e)); | |
43 archive_entry_array[6] = &uid; | |
44 DART_INT32(perm, archive_entry_perm(e)); | |
45 archive_entry_array[7] = &perm; | |
46 DART_STRING(strmode, (char*) archive_entry_strmode(e)); | |
47 archive_entry_array[8] = &strmode; | |
48 DART_STRING(gname, (char*) archive_entry_gname(e)); | |
49 archive_entry_array[9] = &gname; | |
50 DART_STRING(uname, (char*) archive_entry_uname(e)); | |
51 archive_entry_array[10] = &uname; | |
52 | |
53 unsigned long fflags_set; | |
54 unsigned long fflags_clear; | |
55 archive_entry_fflags(e, &fflags_set, &fflags_clear); | |
56 DART_INT64(wrapped_fflags_set, fflags_set); | |
57 archive_entry_array[11] = &wrapped_fflags_set; | |
58 DART_INT64(wrapped_fflags_clear, fflags_clear); | |
59 archive_entry_array[12] = &wrapped_fflags_clear; | |
60 | |
61 DART_STRING(fflags_text, (char*) archive_entry_fflags_text(e)); | |
62 archive_entry_array[13] = &fflags_text; | |
63 | |
64 // archive_entry_stat(3) | |
65 DART_INT32(filetype, archive_entry_filetype(e)); | |
66 archive_entry_array[14] = &filetype; | |
67 DART_INT32(mode, archive_entry_mode(e)); | |
68 archive_entry_array[15] = &mode; | |
69 | |
70 Dart_CObject size; | |
71 if (archive_entry_size_is_set(e)) { | |
72 size.type = kInt64; | |
73 size.value.as_int64 = archive_entry_size(e); | |
74 } else { | |
75 size.type = kNull; | |
76 } | |
77 archive_entry_array[16] = &size; | |
78 | |
79 Dart_CObject dev; | |
80 if (archive_entry_dev_is_set(e)) { | |
81 dev.type = kInt64; | |
82 dev.value.as_int64 = archive_entry_dev(e); | |
83 } else { | |
84 dev.type = kNull; | |
85 } | |
86 archive_entry_array[17] = &dev; | |
87 | |
88 DART_INT64(devmajor, archive_entry_devmajor(e)); | |
89 archive_entry_array[18] = &devmajor; | |
90 DART_INT64(devminor, archive_entry_devminor(e)); | |
91 archive_entry_array[19] = &devminor; | |
92 | |
93 Dart_CObject ino; | |
94 if (archive_entry_ino_is_set(e)) { | |
95 ino.type = kInt64; | |
96 ino.value.as_int64 = archive_entry_ino64(e); | |
97 } else { | |
98 ino.type = kNull; | |
99 } | |
100 archive_entry_array[20] = &ino; | |
101 | |
102 DART_INT64(nlink, archive_entry_nlink(e)); | |
103 archive_entry_array[21] = &nlink; | |
104 DART_INT64(rdev, archive_entry_rdev(e)); | |
105 archive_entry_array[22] = &rdev; | |
106 DART_INT64(rdevmajor, archive_entry_rdevmajor(e)); | |
107 archive_entry_array[23] = &rdevmajor; | |
108 DART_INT64(rdevminor, archive_entry_rdevminor(e)); | |
109 archive_entry_array[24] = &rdevminor; | |
110 | |
111 // archive_entry_time(3) | |
112 DART_TIMESTAMP(atime); | |
113 archive_entry_array[25] = &atime; | |
114 DART_TIMESTAMP(birthtime); | |
115 archive_entry_array[26] = &birthtime; | |
116 DART_TIMESTAMP(ctime); | |
117 archive_entry_array[27] = &ctime; | |
118 DART_TIMESTAMP(mtime); | |
119 archive_entry_array[28] = &mtime; | |
120 // If you add entries, don't forget to increase RAW_ARCHIVE_SIZE. | |
121 | |
122 Dart_CObject wrapped_archive_entry; | |
123 wrapped_archive_entry.type = kArray; | |
124 wrapped_archive_entry.value.as_array.values = archive_entry_array; | |
125 wrapped_archive_entry.value.as_array.length = RAW_ARCHIVE_SIZE; | |
126 | |
127 postSuccess(p, &wrapped_archive_entry); | |
128 } | |
129 | |
130 void archiveEntryClone(Dart_Port p, struct archive_entry* e) { | |
131 postArchiveEntryArray(p, archive_entry_clone(e)); | |
132 } | |
133 | |
134 void archiveEntryFree(Dart_Port p, struct archive_entry* e) { | |
135 archive_entry_free(e); | |
136 postSuccess(p, NULL); | |
137 } | |
138 | |
139 void archiveEntryNew(Dart_Port p) { | |
140 postArchiveEntryArray(p, archive_entry_new()); | |
141 } | |
142 | |
143 void archiveEntrySetHardlink(Dart_Port p, struct archive_entry* e, | |
144 Dart_CObject* request) { | |
145 Dart_CObject* value = getNullableStringArgument(p, request, 0); | |
146 if (value == NULL) return; | |
147 archive_entry_set_hardlink(e, getNullableString(value)); | |
148 postSuccess(p, NULL); | |
149 } | |
150 | |
151 void archiveEntrySetPathname(Dart_Port p, struct archive_entry* e, | |
152 Dart_CObject* request) { | |
153 Dart_CObject* value = getNullableStringArgument(p, request, 0); | |
154 if (value == NULL) return; | |
155 archive_entry_set_pathname(e, getNullableString(value)); | |
156 postSuccess(p, NULL); | |
157 } | |
158 | |
159 void archiveEntrySetSymlink(Dart_Port p, struct archive_entry* e, | |
160 Dart_CObject* request) { | |
161 Dart_CObject* value = getNullableStringArgument(p, request, 0); | |
162 if (value == NULL) return; | |
163 archive_entry_set_symlink(e, getNullableString(value)); | |
164 postSuccess(p, NULL); | |
165 } | |
166 | |
167 void archiveEntrySetGid(Dart_Port p, struct archive_entry* e, | |
168 Dart_CObject* request) { | |
169 Dart_CObject* value = getIntArgument(p, request, 0); | |
170 if (value == NULL) return; | |
171 archive_entry_set_gid(e, getInteger(value)); | |
172 postSuccess(p, NULL); | |
173 } | |
174 | |
175 void archiveEntrySetUid(Dart_Port p, struct archive_entry* e, | |
176 Dart_CObject* request) { | |
177 Dart_CObject* value = getIntArgument(p, request, 0); | |
178 if (value == NULL) return; | |
179 archive_entry_set_uid(e, getInteger(value)); | |
180 postSuccess(p, NULL); | |
181 } | |
182 | |
183 void archiveEntrySetPerm(Dart_Port p, struct archive_entry* e, | |
184 Dart_CObject* request) { | |
185 Dart_CObject* value = getIntArgument(p, request, 0); | |
186 if (value == NULL) return; | |
187 archive_entry_set_perm(e, getInteger(value)); | |
188 postSuccess(p, NULL); | |
189 } | |
190 | |
191 void archiveEntrySetGname(Dart_Port p, struct archive_entry* e, | |
192 Dart_CObject* request) { | |
193 Dart_CObject* value = getNullableStringArgument(p, request, 0); | |
194 if (value == NULL) return; | |
195 archive_entry_update_gname_utf8(e, getNullableString(value)); | |
196 postSuccess(p, NULL); | |
197 } | |
198 | |
199 void archiveEntrySetUname(Dart_Port p, struct archive_entry* e, | |
200 Dart_CObject* request) { | |
201 Dart_CObject* value = getNullableStringArgument(p, request, 0); | |
202 if (value == NULL) return; | |
203 archive_entry_update_uname_utf8(e, getNullableString(value)); | |
204 postSuccess(p, NULL); | |
205 } | |
206 | |
207 void archiveEntrySetFflagsSet(Dart_Port p, struct archive_entry* e, | |
208 Dart_CObject* request) { | |
209 Dart_CObject* value = getIntArgument(p, request, 0); | |
210 if (value == NULL) return; | |
211 archive_entry_set_fflags(e, getInteger(value), 0); | |
212 postSuccess(p, NULL); | |
213 } | |
214 | |
215 void archiveEntrySetFflagsClear(Dart_Port p, struct archive_entry* e, | |
216 Dart_CObject* request) { | |
217 Dart_CObject* value = getIntArgument(p, request, 0); | |
218 if (value == NULL) return; | |
219 archive_entry_set_fflags(e, 0, getInteger(value)); | |
220 postSuccess(p, NULL); | |
221 } | |
222 | |
223 void archiveEntrySetFiletype(Dart_Port p, struct archive_entry* e, | |
224 Dart_CObject* request) { | |
225 Dart_CObject* value = getIntArgument(p, request, 0); | |
226 if (value == NULL) return; | |
227 archive_entry_set_filetype(e, getInteger(value)); | |
228 postSuccess(p, NULL); | |
229 } | |
230 | |
231 void archiveEntrySetMode(Dart_Port p, struct archive_entry* e, | |
232 Dart_CObject* request) { | |
233 Dart_CObject* value = getIntArgument(p, request, 0); | |
234 if (value == NULL) return; | |
235 archive_entry_set_mode(e, getInteger(value)); | |
236 postSuccess(p, NULL); | |
237 } | |
238 | |
239 void archiveEntrySetSize(Dart_Port p, struct archive_entry* e, | |
240 Dart_CObject* request) { | |
241 if (request->type == kNull) { | |
242 archive_entry_unset_size(e); | |
243 postSuccess(p, NULL); | |
244 return; | |
245 } | |
246 | |
247 Dart_CObject* value = getIntArgument(p, request, 0); | |
248 if (value == NULL) return; | |
249 archive_entry_set_size(e, getInteger(value)); | |
250 postSuccess(p, NULL); | |
251 } | |
252 | |
253 void archiveEntrySetDev(Dart_Port p, struct archive_entry* e, | |
254 Dart_CObject* request) { | |
255 Dart_CObject* value = getIntArgument(p, request, 0); | |
256 if (value == NULL) return; | |
257 archive_entry_set_dev(e, getInteger(value)); | |
258 postSuccess(p, NULL); | |
259 } | |
260 | |
261 void archiveEntrySetDevmajor(Dart_Port p, struct archive_entry* e, | |
262 Dart_CObject* request) { | |
263 Dart_CObject* value = getIntArgument(p, request, 0); | |
264 if (value == NULL) return; | |
265 archive_entry_set_devmajor(e, getInteger(value)); | |
266 postSuccess(p, NULL); | |
267 } | |
268 | |
269 void archiveEntrySetDevminor(Dart_Port p, struct archive_entry* e, | |
270 Dart_CObject* request) { | |
271 Dart_CObject* value = getIntArgument(p, request, 0); | |
272 if (value == NULL) return; | |
273 archive_entry_set_devminor(e, getInteger(value)); | |
274 postSuccess(p, NULL); | |
275 } | |
276 | |
277 void archiveEntrySetIno(Dart_Port p, struct archive_entry* e, | |
278 Dart_CObject* request) { | |
279 Dart_CObject* value = getIntArgument(p, request, 0); | |
280 if (value == NULL) return; | |
281 archive_entry_set_ino64(e, getInteger(value)); | |
282 postSuccess(p, NULL); | |
283 } | |
284 | |
285 void archiveEntrySetNlink(Dart_Port p, struct archive_entry* e, | |
286 Dart_CObject* request) { | |
287 Dart_CObject* value = getIntArgument(p, request, 0); | |
288 if (value == NULL) return; | |
289 archive_entry_set_nlink(e, getInteger(value)); | |
290 postSuccess(p, NULL); | |
291 } | |
292 | |
293 void archiveEntrySetRdev(Dart_Port p, struct archive_entry* e, | |
294 Dart_CObject* request) { | |
295 Dart_CObject* value = getIntArgument(p, request, 0); | |
296 if (value == NULL) return; | |
297 archive_entry_set_rdev(e, getInteger(value)); | |
298 postSuccess(p, NULL); | |
299 } | |
300 | |
301 void archiveEntrySetRdevmajor(Dart_Port p, struct archive_entry* e, | |
302 Dart_CObject* request) { | |
303 Dart_CObject* value = getIntArgument(p, request, 0); | |
304 if (value == NULL) return; | |
305 archive_entry_set_rdevmajor(e, getInteger(value)); | |
306 postSuccess(p, NULL); | |
307 } | |
308 | |
309 void archiveEntrySetRdevminor(Dart_Port p, struct archive_entry* e, | |
310 Dart_CObject* request) { | |
311 Dart_CObject* value = getIntArgument(p, request, 0); | |
312 if (value == NULL) return; | |
313 archive_entry_set_rdevminor(e, getInteger(value)); | |
314 postSuccess(p, NULL); | |
315 } | |
316 | |
317 void archiveEntrySetAtime(Dart_Port p, struct archive_entry* e, | |
318 Dart_CObject* request) { | |
319 if (request->type == kNull) { | |
320 archive_entry_unset_atime(e); | |
321 postSuccess(p, NULL); | |
322 return; | |
323 } | |
324 | |
325 Dart_CObject* value = getIntArgument(p, request, 0); | |
326 if (value == NULL) return; | |
327 int64_t atime = getInteger(value); | |
328 archive_entry_set_atime(e, atime / 1000, (atime % 1000) * 1000000); | |
329 postSuccess(p, NULL); | |
330 } | |
331 | |
332 void archiveEntrySetBirthtime(Dart_Port p, struct archive_entry* e, | |
333 Dart_CObject* request) { | |
334 if (request->type == kNull) { | |
335 archive_entry_unset_birthtime(e); | |
336 postSuccess(p, NULL); | |
337 return; | |
338 } | |
339 | |
340 Dart_CObject* value = getIntArgument(p, request, 0); | |
341 if (value == NULL) return; | |
342 int64_t birthtime = getInteger(value); | |
343 archive_entry_set_birthtime( | |
344 e, birthtime / 1000, (birthtime % 1000) * 1000000); | |
345 postSuccess(p, NULL); | |
346 } | |
347 | |
348 void archiveEntrySetCtime(Dart_Port p, struct archive_entry* e, | |
349 Dart_CObject* request) { | |
350 if (request->type == kNull) { | |
351 archive_entry_unset_ctime(e); | |
352 postSuccess(p, NULL); | |
353 return; | |
354 } | |
355 | |
356 Dart_CObject* value = getIntArgument(p, request, 0); | |
357 if (value == NULL) return; | |
358 int64_t ctime = getInteger(value); | |
359 archive_entry_set_ctime(e, ctime / 1000, (ctime % 1000) * 1000000); | |
360 postSuccess(p, NULL); | |
361 } | |
362 | |
363 void archiveEntrySetMtime(Dart_Port p, struct archive_entry* e, | |
364 Dart_CObject* request) { | |
365 if (request->type == kNull) { | |
366 archive_entry_unset_mtime(e); | |
367 postSuccess(p, NULL); | |
368 return; | |
369 } | |
370 | |
371 Dart_CObject* value = getIntArgument(p, request, 0); | |
372 if (value == NULL) return; | |
373 int64_t mtime = getInteger(value); | |
374 archive_entry_set_mtime(e, mtime / 1000, (mtime % 1000) * 1000000); | |
375 postSuccess(p, NULL); | |
376 } | |
OLD | NEW |