captive_sandbox_parent_file_file_info_set():
[captive.git] / src / libcaptive / sandbox / parent-File.c
1 /* $Id$
2  * CORBA/ORBit client side of File object of sandbox_parent()
3  * Copyright (C) 2003 Jan Kratochvil <project-captive@jankratochvil.net>
4  * 
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; exactly version 2 of June 1991 is required
8  * 
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  * 
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17  */
18
19
20 #include "config.h"
21
22 #include "parent-File.h"        /* self */
23 #include <glib/gmessages.h>
24 #include "split.h"
25 #include "sandbox.h"
26 #include "../client/file.h"
27 #include "../client/vfs.h"
28 #include "FileInfo.h"
29 #include "captive/macros.h"
30 #include "reactos/ntos/types.h" /* for ULONG */
31
32
33 GnomeVFSResult captive_sandbox_parent_file_new_open(CaptiveFileParentObject *captive_file_parent_object)
34 {
35 xmlNode *xml_action=NULL;
36 CaptiveVfsParentObject *captive_vfs_parent_object;
37 GnomeVFSResult r;
38 Captive_File corba_File_object;
39
40         g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_parent_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
41         g_return_val_if_fail(captive_file_parent_object->pathname!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
42
43         captive_vfs_parent_object=CAPTIVE_VFS_PARENT_OBJECT(CAPTIVE_FILE_OBJECT(captive_file_parent_object)->vfs);
44
45         if (captive_vfs_parent_object->corba_bug_action) {
46                 xml_action=xmlNewTextChild(captive_vfs_parent_object->corba_bug_action,NULL,"file_new_open",NULL);
47                 xmlNewProp(xml_action,"object",captive_printf_alloca("%p",captive_file_parent_object));
48                 xmlNewProp(xml_action,"pathname",captive_file_parent_object->pathname);
49                 xmlNewProp(xml_action,"mode",captive_printf_alloca("%u",(unsigned)captive_file_parent_object->mode));
50                 }
51
52         corba_File_object=Captive_Vfs_file_new_open(captive_vfs_parent_object->corba_Vfs_object,
53                         captive_file_parent_object->pathname,captive_file_parent_object->mode,&captive_corba_ev);
54         if (xml_action)
55                 xmlNewProp(xml_action,"result",(captive_corba_ev._major==CORBA_NO_EXCEPTION ? "1" : "0"));
56         /* If 'r' means failure 'corba_File_object' may not be 'CORBA_OBJECT_NIL'
57          * although it is not valid 'CORBA_Object' to be passed to CORBA_Object_release().
58          */
59         if (GNOME_VFS_OK!=(r=captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev,captive_vfs_parent_object)))
60                 return r;
61
62         captive_file_parent_object->corba_File_object=corba_File_object;
63         return GNOME_VFS_OK;
64 }
65
66
67 GnomeVFSResult captive_sandbox_parent_file_new_create(CaptiveFileParentObject *captive_file_parent_object,
68                 gboolean exclusive,guint perm)
69 {
70 xmlNode *xml_action=NULL;
71 CaptiveVfsParentObject *captive_vfs_parent_object;
72 GnomeVFSResult r;
73 Captive_File corba_File_object;
74
75         g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_parent_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
76         g_return_val_if_fail(captive_file_parent_object->pathname!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
77
78         captive_vfs_parent_object=CAPTIVE_VFS_PARENT_OBJECT(CAPTIVE_FILE_OBJECT(captive_file_parent_object)->vfs);
79
80         if (captive_vfs_parent_object->corba_bug_action) {
81                 xml_action=xmlNewTextChild(captive_vfs_parent_object->corba_bug_action,NULL,"file_new_create",NULL);
82                 xmlNewProp(xml_action,"object",captive_printf_alloca("%p",captive_file_parent_object));
83                 xmlNewProp(xml_action,"pathname",captive_file_parent_object->pathname);
84                 xmlNewProp(xml_action,"mode",captive_printf_alloca("%u",(unsigned)captive_file_parent_object->mode));
85                 xmlNewProp(xml_action,"exclusive",captive_printf_alloca("%u",(unsigned)exclusive));
86                 xmlNewProp(xml_action,"perm",captive_printf_alloca("%u",(unsigned)perm));
87                 }
88
89         corba_File_object=Captive_Vfs_file_new_create(captive_vfs_parent_object->corba_Vfs_object,
90                         captive_file_parent_object->pathname,captive_file_parent_object->mode,exclusive,perm,&captive_corba_ev);
91         if (xml_action)
92                 xmlNewProp(xml_action,"result",(captive_corba_ev._major==CORBA_NO_EXCEPTION ? "1" : "0"));
93         /* If 'r' means failure 'corba_File_object' may not be 'CORBA_OBJECT_NIL'
94          * although it is not valid 'CORBA_Object' to be passed to CORBA_Object_release().
95          */
96         if (GNOME_VFS_OK!=(r=captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev,captive_vfs_parent_object)))
97                 return r;
98
99         captive_file_parent_object->corba_File_object=corba_File_object;
100         return GNOME_VFS_OK;
101 }
102
103
104 GnomeVFSResult captive_sandbox_parent_file_close(CaptiveFileParentObject *captive_file_parent_object)
105 {
106 GnomeVFSResult r;
107 xmlNode *xml_action=NULL;
108 CaptiveVfsParentObject *captive_vfs_parent_object;
109
110         g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_parent_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
111
112         captive_vfs_parent_object=CAPTIVE_VFS_PARENT_OBJECT(CAPTIVE_FILE_OBJECT(captive_file_parent_object)->vfs);
113
114         if (captive_vfs_parent_object->corba_bug_action) {
115                 xml_action=xmlNewTextChild(captive_vfs_parent_object->corba_bug_action,NULL,"file_close",NULL);
116                 xmlNewProp(xml_action,"object",captive_printf_alloca("%p",captive_file_parent_object));
117                 }
118
119         Captive_File_shutdown(captive_file_parent_object->corba_File_object,&captive_corba_ev);
120         r=captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev,captive_vfs_parent_object);
121         if (xml_action)
122                 xmlNewProp(xml_action,"result",gnome_vfs_result_to_string(r));
123
124         /* Always clear 'corba_File_object' even if 'r' means failure. */
125         CORBA_Object_release((CORBA_Object)captive_file_parent_object->corba_File_object,&captive_corba_ev);
126         captive_file_parent_object->corba_File_object=CORBA_OBJECT_NIL;
127
128         return r;
129 }
130
131
132 static GnomeVFSResult captive_sandbox_parent_file_seek_slave
133                 (CaptiveFileParentObject *captive_file_parent_object,GnomeVFSSeekPosition whence,GnomeVFSFileOffset offset);
134
135 GnomeVFSResult captive_sandbox_parent_file_read(CaptiveFileParentObject *captive_file_parent_object,
136                 gpointer buffer_captive,GnomeVFSFileSize num_bytes,GnomeVFSFileSize *bytes_read_return)
137 {
138 GnomeVFSResult r;
139 Captive_Bytes *buffer_corba;
140 xmlNode *xml_action=NULL;
141 CaptiveVfsParentObject *captive_vfs_parent_object;
142
143         g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_parent_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
144         g_return_val_if_fail(buffer_captive!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
145         g_return_val_if_fail(bytes_read_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
146         g_return_val_if_fail(num_bytes==(ULONG)num_bytes,GNOME_VFS_ERROR_BAD_PARAMETERS);
147
148         captive_vfs_parent_object=CAPTIVE_VFS_PARENT_OBJECT(CAPTIVE_FILE_OBJECT(captive_file_parent_object)->vfs);
149
150         *bytes_read_return=0;
151
152         if (captive_vfs_parent_object->corba_bug_action) {
153                 xml_action=xmlNewTextChild(captive_vfs_parent_object->corba_bug_action,NULL,"file_read",NULL);
154                 xmlNewProp(xml_action,"object",captive_printf_alloca("%p",captive_file_parent_object));
155                 xmlNewProp(xml_action,"num_bytes",captive_printf_alloca("%lu",(unsigned long)num_bytes));
156                 }
157
158         r=captive_sandbox_parent_file_seek_slave(captive_file_parent_object,
159                         GNOME_VFS_SEEK_START,captive_file_parent_object->offset);
160         if (r==GNOME_VFS_OK) {
161                 Captive_File_read(captive_file_parent_object->corba_File_object,&buffer_corba,num_bytes,&captive_corba_ev);
162                 r=captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev,captive_vfs_parent_object);
163                 }
164         if (xml_action)
165                 xmlNewProp(xml_action,"result",gnome_vfs_result_to_string(r));
166         if (r!=GNOME_VFS_OK)
167                 return r;
168
169         g_return_val_if_fail(buffer_corba->_length<=num_bytes,GNOME_VFS_ERROR_GENERIC);
170         memcpy(buffer_captive,buffer_corba->_buffer,buffer_corba->_length);
171         *bytes_read_return=buffer_corba->_length;
172         captive_file_parent_object->offset+=buffer_corba->_length;
173
174         Captive_Bytes__freekids(buffer_corba,NULL/* 'd'; meaning? */);
175         CORBA_free(buffer_corba);
176
177         if (xml_action)
178                 xmlNewProp(xml_action,"bytes_read_return",captive_printf_alloca("%lu",(unsigned long)*bytes_read_return));
179
180         return GNOME_VFS_OK;
181 }
182
183
184 GnomeVFSResult captive_sandbox_parent_file_write(CaptiveFileParentObject *captive_file_parent_object,
185                 gconstpointer buffer_captive,GnomeVFSFileSize num_bytes,GnomeVFSFileSize *bytes_written_return)
186 {
187 GnomeVFSResult r;
188 Captive_Bytes buffer_corba_local;
189 Captive_GnomeVFSFileSize bytes_written_corba;
190 xmlNode *xml_action=NULL;
191 CaptiveVfsParentObject *captive_vfs_parent_object;
192
193         g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_parent_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
194         g_return_val_if_fail(buffer_captive!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
195         g_return_val_if_fail(bytes_written_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
196         g_return_val_if_fail(num_bytes==(ULONG)num_bytes,GNOME_VFS_ERROR_BAD_PARAMETERS);
197
198         captive_vfs_parent_object=CAPTIVE_VFS_PARENT_OBJECT(CAPTIVE_FILE_OBJECT(captive_file_parent_object)->vfs);
199
200         *bytes_written_return=0;
201
202         if (captive_vfs_parent_object->corba_bug_action) {
203                 xml_action=xmlNewTextChild(captive_vfs_parent_object->corba_bug_action,NULL,"file_write",NULL);
204                 xmlNewProp(xml_action,"object",captive_printf_alloca("%p",captive_file_parent_object));
205                 xmlNewProp(xml_action,"num_bytes",captive_printf_alloca("%lu",(unsigned long)num_bytes));
206                 }
207
208         r=captive_sandbox_parent_file_seek_slave(captive_file_parent_object,
209                         GNOME_VFS_SEEK_START,captive_file_parent_object->offset);
210         if (r==GNOME_VFS_OK) {
211                 buffer_corba_local._maximum=num_bytes;
212                 buffer_corba_local._length=num_bytes;
213                 buffer_corba_local._buffer=(/* de-const */gpointer)buffer_captive;
214                 buffer_corba_local._release=FALSE;
215
216                 Captive_File_write(captive_file_parent_object->corba_File_object,
217                                 &buffer_corba_local,&bytes_written_corba,&captive_corba_ev);
218                 r=captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev,captive_vfs_parent_object);
219                 }
220         if (xml_action)
221                 xmlNewProp(xml_action,"result",gnome_vfs_result_to_string(r));
222         if (r!=GNOME_VFS_OK)
223                 return r;
224
225         *bytes_written_return=bytes_written_corba;
226         captive_file_parent_object->offset+=bytes_written_corba;
227
228         if (xml_action)
229                 xmlNewProp(xml_action,"bytes_written_return",captive_printf_alloca("%lu",(unsigned long)*bytes_written_return));
230
231         return GNOME_VFS_OK;
232 }
233
234
235 static GnomeVFSResult captive_sandbox_parent_file_seek_slave
236                 (CaptiveFileParentObject *captive_file_parent_object,GnomeVFSSeekPosition whence,GnomeVFSFileOffset offset)
237 {
238 GnomeVFSResult r;
239 xmlNode *xml_action=NULL;
240 CaptiveVfsParentObject *captive_vfs_parent_object;
241
242         g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_parent_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
243
244         captive_vfs_parent_object=CAPTIVE_VFS_PARENT_OBJECT(CAPTIVE_FILE_OBJECT(captive_file_parent_object)->vfs);
245
246         if (captive_vfs_parent_object->corba_bug_action) {
247                 xml_action=xmlNewTextChild(captive_vfs_parent_object->corba_bug_action,NULL,"file_seek",NULL);
248                 xmlNewProp(xml_action,"object",captive_printf_alloca("%p",captive_file_parent_object));
249                 xmlNewProp(xml_action,"whence",
250                                 (whence==GNOME_VFS_SEEK_START ? "start" :
251                                         (whence==GNOME_VFS_SEEK_CURRENT ? "current" :
252                                                 (whence==GNOME_VFS_SEEK_END ? "end" : captive_printf_alloca("%lu",(unsigned long)whence)))));
253                 xmlNewProp(xml_action,"offset",captive_printf_alloca("%" G_GINT64_FORMAT,(gint64)offset));
254                 }
255
256         Captive_File_seek(captive_file_parent_object->corba_File_object,whence,offset,&captive_corba_ev);
257         r=captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev,captive_vfs_parent_object);
258         if (xml_action)
259                 xmlNewProp(xml_action,"result",gnome_vfs_result_to_string(r));
260         if (r!=GNOME_VFS_OK)
261                 return r;
262
263         return GNOME_VFS_OK;
264 }
265
266
267 GnomeVFSResult captive_sandbox_parent_file_seek
268                 (CaptiveFileParentObject *captive_file_parent_object,GnomeVFSSeekPosition whence,GnomeVFSFileOffset offset)
269 {
270 GnomeVFSResult r;
271 xmlNode *xml_action=NULL;
272 CaptiveVfsParentObject *captive_vfs_parent_object;
273
274         g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_parent_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
275
276         captive_vfs_parent_object=CAPTIVE_VFS_PARENT_OBJECT(CAPTIVE_FILE_OBJECT(captive_file_parent_object)->vfs);
277
278         if (captive_vfs_parent_object->corba_bug_action) {
279                 xml_action=xmlNewTextChild(captive_vfs_parent_object->corba_bug_action,NULL,"file_seek",NULL);
280                 xmlNewProp(xml_action,"object",captive_printf_alloca("%p",captive_file_parent_object));
281                 xmlNewProp(xml_action,"whence",
282                                 (whence==GNOME_VFS_SEEK_START ? "start" :
283                                         (whence==GNOME_VFS_SEEK_CURRENT ? "current" :
284                                                 (whence==GNOME_VFS_SEEK_END ? "end" : captive_printf_alloca("%lu",(unsigned long)whence)))));
285                 xmlNewProp(xml_action,"offset",captive_printf_alloca("%" G_GINT64_FORMAT,(gint64)offset));
286                 }
287
288         switch (whence) {
289                 case GNOME_VFS_SEEK_START:
290                         captive_file_parent_object->offset=offset;
291                         r=GNOME_VFS_OK;
292                         break;
293                 case GNOME_VFS_SEEK_CURRENT:
294                         if (0
295                                         || (offset>0 && (captive_file_parent_object->offset+offset)<captive_file_parent_object->offset)
296                                         || (offset<0 && (captive_file_parent_object->offset+offset)>captive_file_parent_object->offset))
297                                 r=GNOME_VFS_ERROR_BAD_PARAMETERS;
298                         else {
299                                 captive_file_parent_object->offset+=offset;
300                                 r=GNOME_VFS_OK;
301                                 }
302                         break;
303                 case GNOME_VFS_SEEK_END:
304                         g_assert_not_reached(); /* NOT IMPLEMENTED YET */
305                         r=GNOME_VFS_ERROR_GENERIC;
306                         break;
307                 default:
308                         r=GNOME_VFS_ERROR_BAD_PARAMETERS;
309                 }
310
311         if (xml_action)
312                 xmlNewProp(xml_action,"result",gnome_vfs_result_to_string(r));
313         if (r!=GNOME_VFS_OK)
314                 return r;
315
316         return GNOME_VFS_OK;
317 }
318
319
320 #if 0 /* unused */
321 static GnomeVFSResult captive_sandbox_parent_file_tell_slave
322                 (CaptiveFileParentObject *captive_file_parent_object,GnomeVFSFileOffset *offset_return)
323 {
324 Captive_GnomeVFSFileOffset offset_corba;
325 GnomeVFSResult r;
326 xmlNode *xml_action=NULL;
327 CaptiveVfsParentObject *captive_vfs_parent_object;
328
329         g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_parent_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
330         g_return_val_if_fail(offset_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
331
332         captive_vfs_parent_object=CAPTIVE_VFS_PARENT_OBJECT(CAPTIVE_FILE_OBJECT(captive_file_parent_object)->vfs);
333
334         if (captive_vfs_parent_object->corba_bug_action) {
335                 xml_action=xmlNewTextChild(captive_vfs_parent_object->corba_bug_action,NULL,"file_tell",NULL);
336                 xmlNewProp(xml_action,"object",captive_printf_alloca("%p",captive_file_parent_object));
337                 }
338
339         Captive_File_tell(captive_file_parent_object->corba_File_object,&offset_corba,&captive_corba_ev);
340         r=captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev,captive_vfs_parent_object);
341         if (xml_action)
342                 xmlNewProp(xml_action,"result",gnome_vfs_result_to_string(r));
343         if (r!=GNOME_VFS_OK)
344                 return r;
345
346         *offset_return=offset_corba;
347
348         if (xml_action)
349                 xmlNewProp(xml_action,"offset_return",captive_printf_alloca("%" G_GINT64_FORMAT,(gint64)*offset_return));
350
351         return GNOME_VFS_OK;
352 }
353 #endif
354
355
356 GnomeVFSResult captive_sandbox_parent_file_tell(CaptiveFileParentObject *captive_file_parent_object,GnomeVFSFileOffset *offset_return)
357 {
358 GnomeVFSResult r;
359 xmlNode *xml_action=NULL;
360 CaptiveVfsParentObject *captive_vfs_parent_object;
361
362         g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_parent_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
363         g_return_val_if_fail(offset_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
364
365         captive_vfs_parent_object=CAPTIVE_VFS_PARENT_OBJECT(CAPTIVE_FILE_OBJECT(captive_file_parent_object)->vfs);
366
367         if (captive_vfs_parent_object->corba_bug_action) {
368                 xml_action=xmlNewTextChild(captive_vfs_parent_object->corba_bug_action,NULL,"file_tell",NULL);
369                 xmlNewProp(xml_action,"object",captive_printf_alloca("%p",captive_file_parent_object));
370                 }
371
372         *offset_return=captive_file_parent_object->offset;
373         r=GNOME_VFS_OK;
374         if (xml_action)
375                 xmlNewProp(xml_action,"result",gnome_vfs_result_to_string(r));
376         if (r!=GNOME_VFS_OK)
377                 return r;
378
379         if (xml_action)
380                 xmlNewProp(xml_action,"offset_return",captive_printf_alloca("%" G_GINT64_FORMAT,(gint64)*offset_return));
381
382         return GNOME_VFS_OK;
383 }
384
385
386 GnomeVFSResult captive_sandbox_parent_file_remove(CaptiveFileParentObject *captive_file_parent_object)
387 {
388 GnomeVFSResult r;
389 xmlNode *xml_action=NULL;
390 CaptiveVfsParentObject *captive_vfs_parent_object;
391
392         g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_parent_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
393
394         captive_vfs_parent_object=CAPTIVE_VFS_PARENT_OBJECT(CAPTIVE_FILE_OBJECT(captive_file_parent_object)->vfs);
395
396         if (captive_vfs_parent_object->corba_bug_action) {
397                 xml_action=xmlNewTextChild(captive_vfs_parent_object->corba_bug_action,NULL,"file_remove",NULL);
398                 xmlNewProp(xml_action,"object",captive_printf_alloca("%p",captive_file_parent_object));
399                 }
400
401         Captive_File_remove(captive_file_parent_object->corba_File_object,&captive_corba_ev);
402         r=captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev,captive_vfs_parent_object);
403         if (xml_action)
404                 xmlNewProp(xml_action,"result",gnome_vfs_result_to_string(r));
405         if (r!=GNOME_VFS_OK)
406                 return r;
407
408         return GNOME_VFS_OK;
409 }
410
411
412 GnomeVFSResult captive_sandbox_parent_file_file_info_get(CaptiveFileParentObject *captive_file_parent_object,
413                 GnomeVFSFileInfo *file_info_captive)
414 {
415 Captive_GnomeVFSFileInfo *file_info_corba;
416 GnomeVFSResult r;
417 xmlNode *xml_action=NULL;
418 CaptiveVfsParentObject *captive_vfs_parent_object;
419
420         g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_parent_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
421         g_return_val_if_fail(file_info_captive!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
422
423         captive_vfs_parent_object=CAPTIVE_VFS_PARENT_OBJECT(CAPTIVE_FILE_OBJECT(captive_file_parent_object)->vfs);
424
425         if (captive_vfs_parent_object->corba_bug_action) {
426                 xml_action=xmlNewTextChild(captive_vfs_parent_object->corba_bug_action,NULL,"file_file_info_get",NULL);
427                 xmlNewProp(xml_action,"object",captive_printf_alloca("%p",captive_file_parent_object));
428                 }
429
430         Captive_File_file_info_get(captive_file_parent_object->corba_File_object,&file_info_corba,&captive_corba_ev);
431         r=captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev,captive_vfs_parent_object);
432         if (xml_action)
433                 xmlNewProp(xml_action,"result",gnome_vfs_result_to_string(r));
434         if (r!=GNOME_VFS_OK)
435                 return r;
436
437         r=captive_sandbox_file_info_corba_to_captive(file_info_captive,file_info_corba);
438         Captive_GnomeVFSFileInfo__freekids(file_info_corba,NULL/* 'd'; meaning? */);
439         CORBA_free(file_info_corba);
440         if (xml_action)
441                 xmlSetProp(xml_action,"result",gnome_vfs_result_to_string(r));
442         if (r!=GNOME_VFS_OK)
443                 return r;
444
445         return GNOME_VFS_OK;
446 }
447
448
449 GnomeVFSResult captive_sandbox_parent_file_file_info_set(CaptiveFileParentObject *captive_file_parent_object,
450     const GnomeVFSFileInfo *file_info_captive,GnomeVFSSetFileInfoMask mask)
451 {
452 Captive_GnomeVFSFileInfo file_info_corba;
453 GnomeVFSResult r;
454 xmlNode *xml_action=NULL;
455 CaptiveVfsParentObject *captive_vfs_parent_object;
456
457         g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_parent_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
458         g_return_val_if_fail(file_info_captive!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
459
460         captive_vfs_parent_object=CAPTIVE_VFS_PARENT_OBJECT(CAPTIVE_FILE_OBJECT(captive_file_parent_object)->vfs);
461
462         if (captive_vfs_parent_object->corba_bug_action) {
463                 xml_action=xmlNewTextChild(captive_vfs_parent_object->corba_bug_action,NULL,"file_file_info_set",NULL);
464                 xmlNewProp(xml_action,"object",captive_printf_alloca("%p",captive_file_parent_object));
465                 xmlNewProp(xml_action,"mask",captive_printf_alloca("%u",(unsigned)mask));
466                 }
467
468         if (GNOME_VFS_OK!=(r=captive_sandbox_file_info_set_mask_captive_to_corba(&file_info_corba,file_info_captive,mask)))
469                 return r;
470
471         Captive_File_file_info_set(captive_file_parent_object->corba_File_object,&file_info_corba,mask,&captive_corba_ev);
472         r=captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev,captive_vfs_parent_object);
473         if (xml_action)
474                 xmlNewProp(xml_action,"result",gnome_vfs_result_to_string(r));
475         if (r!=GNOME_VFS_OK)
476                 return r;
477
478         Captive_GnomeVFSFileInfo__freekids(&file_info_corba,NULL/* 'd'; meaning? */);
479
480         return GNOME_VFS_OK;
481 }
482
483
484 GnomeVFSResult captive_sandbox_parent_file_truncate(CaptiveFileParentObject *captive_file_parent_object,GnomeVFSFileSize file_size)
485 {
486 GnomeVFSResult r;
487 xmlNode *xml_action=NULL;
488 CaptiveVfsParentObject *captive_vfs_parent_object;
489
490         g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_parent_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
491
492         captive_vfs_parent_object=CAPTIVE_VFS_PARENT_OBJECT(CAPTIVE_FILE_OBJECT(captive_file_parent_object)->vfs);
493
494         if (captive_vfs_parent_object->corba_bug_action) {
495                 xml_action=xmlNewTextChild(captive_vfs_parent_object->corba_bug_action,NULL,"file_truncate",NULL);
496                 xmlNewProp(xml_action,"object",captive_printf_alloca("%p",captive_file_parent_object));
497                 xmlNewProp(xml_action,"file_size",captive_printf_alloca("%" G_GUINT64_FORMAT,(guint64)file_size));
498                 }
499
500         Captive_File_truncate(captive_file_parent_object->corba_File_object,file_size,&captive_corba_ev);
501         r=captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev,captive_vfs_parent_object);
502         if (xml_action)
503                 xmlNewProp(xml_action,"result",gnome_vfs_result_to_string(r));
504         if (r!=GNOME_VFS_OK)
505                 return r;
506
507         return GNOME_VFS_OK;
508 }
509
510
511 GnomeVFSResult captive_sandbox_parent_file_move
512                 (CaptiveFileParentObject *captive_file_parent_object_old,const gchar *pathname_new,gboolean force_replace)
513 {
514 GnomeVFSResult r;
515 xmlNode *xml_action=NULL;
516 CaptiveVfsParentObject *captive_vfs_parent_object;
517
518         g_return_val_if_fail(captive_file_parent_object_old!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
519         g_return_val_if_fail(pathname_new!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
520
521         captive_vfs_parent_object=CAPTIVE_VFS_PARENT_OBJECT(CAPTIVE_FILE_OBJECT(captive_file_parent_object_old)->vfs);
522
523         if (captive_vfs_parent_object->corba_bug_action) {
524                 xml_action=xmlNewTextChild(captive_vfs_parent_object->corba_bug_action,NULL,"file_truncate",NULL);
525                 xmlNewProp(xml_action,"object",captive_printf_alloca("%p",captive_file_parent_object_old));
526                 xmlNewProp(xml_action,"pathname_new",pathname_new);
527                 xmlNewProp(xml_action,"force_replace",captive_printf_alloca("%u",(unsigned)force_replace));
528                 }
529
530         Captive_File_move(captive_file_parent_object_old->corba_File_object,pathname_new,force_replace,&captive_corba_ev);
531         r=captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev,captive_vfs_parent_object);
532         if (xml_action)
533                 xmlNewProp(xml_action,"result",gnome_vfs_result_to_string(r));
534         if (r!=GNOME_VFS_OK)
535                 return r;
536
537         return GNOME_VFS_OK;
538 }