+object shutdown() functions as release() will not destroy() servants
[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 "captive/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
30
31 GnomeVFSResult captive_sandbox_parent_file_new_open(CaptiveFileObject *captive_file_object,
32                 const gchar *pathname,GnomeVFSOpenMode mode)
33 {
34         g_return_val_if_fail(captive_file_object!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
35         g_return_val_if_fail(pathname!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
36
37         captive_file_object->corba_File_object=Captive_Vfs_file_new_open(
38                         captive_file_object->vfs->corba_Vfs_object,pathname,mode,&captive_corba_ev);
39
40         return captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev);
41 }
42
43
44 GnomeVFSResult captive_sandbox_parent_file_new_create(CaptiveFileObject *captive_file_object,
45                 const gchar *pathname,GnomeVFSOpenMode mode,gboolean exclusive,guint perm)
46 {
47         g_return_val_if_fail(captive_file_object!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
48         g_return_val_if_fail(pathname!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
49
50         captive_file_object->corba_File_object=Captive_Vfs_file_new_create(
51                         captive_file_object->vfs->corba_Vfs_object,pathname,mode,exclusive,perm,&captive_corba_ev);
52
53         return captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev);
54 }
55
56
57 GnomeVFSResult captive_sandbox_parent_file_close(CaptiveFileObject *captive_file_object)
58 {
59 GnomeVFSResult r;
60
61         g_return_val_if_fail(captive_file_object!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
62         g_return_val_if_fail(captive_file_object->file_Handle==NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
63
64         Captive_File_shutdown(captive_file_object->corba_File_object,&captive_corba_ev);
65         if (GNOME_VFS_OK!=(r=captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev)))
66                 return r;
67
68         CORBA_Object_release((CORBA_Object)captive_file_object->corba_File_object,&captive_corba_ev);
69         captive_file_object->corba_File_object=CORBA_OBJECT_NIL;
70
71         return captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev);
72 }
73
74
75 GnomeVFSResult captive_sandbox_parent_file_read(CaptiveFileObject *captive_file_object,
76                 gpointer buffer_captive,GnomeVFSFileSize num_bytes,GnomeVFSFileSize *bytes_read_return)
77 {
78 GnomeVFSResult r;
79 Captive_Bytes *buffer_corba;
80
81         g_return_val_if_fail(captive_file_object!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
82         g_return_val_if_fail(buffer_captive!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
83         g_return_val_if_fail(bytes_read_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
84         g_return_val_if_fail(num_bytes==(ULONG)num_bytes,GNOME_VFS_ERROR_BAD_PARAMETERS);
85         g_return_val_if_fail(captive_file_object->file_Handle==NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
86
87         *bytes_read_return=0;
88
89         Captive_File_read(captive_file_object->corba_File_object,&buffer_corba,num_bytes,&captive_corba_ev);
90         if (GNOME_VFS_OK!=(r=captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev)))
91                 return r;
92
93         g_return_val_if_fail(buffer_corba->_length<=num_bytes,GNOME_VFS_ERROR_GENERIC);
94         memcpy(buffer_captive,buffer_corba->_buffer,buffer_corba->_length);
95         *bytes_read_return=buffer_corba->_length;
96
97         Captive_Bytes__freekids(buffer_corba,NULL/* 'd'; meaning? */);
98         CORBA_free(buffer_corba);
99
100         return GNOME_VFS_OK;
101 }
102
103
104 GnomeVFSResult captive_sandbox_parent_file_write(CaptiveFileObject *captive_file_object,
105                 gconstpointer buffer_captive,GnomeVFSFileSize num_bytes,GnomeVFSFileSize *bytes_written_return)
106 {
107 GnomeVFSResult r;
108 Captive_Bytes buffer_corba_local;
109 Captive_GnomeVFSFileSize bytes_written_corba;
110
111         g_return_val_if_fail(captive_file_object!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
112         g_return_val_if_fail(buffer_captive!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
113         g_return_val_if_fail(bytes_written_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
114         g_return_val_if_fail(num_bytes==(ULONG)num_bytes,GNOME_VFS_ERROR_BAD_PARAMETERS);
115         g_return_val_if_fail(captive_file_object->file_Handle==NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
116
117         *bytes_written_return=0;
118
119         buffer_corba_local._maximum=num_bytes;
120         buffer_corba_local._length=num_bytes;
121         buffer_corba_local._buffer=(/* de-const */gpointer)buffer_captive;
122         buffer_corba_local._release=FALSE;
123
124         Captive_File_write(captive_file_object->corba_File_object,&buffer_corba_local,&bytes_written_corba,&captive_corba_ev);
125         if (GNOME_VFS_OK!=(r=captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev)))
126                 return r;
127
128         *bytes_written_return=bytes_written_corba;
129
130         return GNOME_VFS_OK;
131 }
132
133
134 GnomeVFSResult captive_sandbox_parent_file_seek
135                 (CaptiveFileObject *captive_file_object,GnomeVFSSeekPosition whence,GnomeVFSFileOffset offset)
136 {
137 GnomeVFSResult r;
138
139         g_return_val_if_fail(captive_file_object!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
140         g_return_val_if_fail(captive_file_object->file_Handle==NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
141
142         Captive_File_seek(captive_file_object->corba_File_object,whence,offset,&captive_corba_ev);
143         if (GNOME_VFS_OK!=(r=captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev)))
144                 return r;
145
146         return GNOME_VFS_OK;
147 }
148
149
150 GnomeVFSResult captive_sandbox_parent_file_tell(CaptiveFileObject *captive_file_object,GnomeVFSFileOffset *offset_return)
151 {
152 Captive_GnomeVFSFileOffset offset_corba;
153 GnomeVFSResult r;
154
155         g_return_val_if_fail(captive_file_object!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
156         g_return_val_if_fail(offset_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
157         g_return_val_if_fail(captive_file_object->file_Handle==NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
158
159         Captive_File_tell(captive_file_object->corba_File_object,&offset_corba,&captive_corba_ev);
160         if (GNOME_VFS_OK!=(r=captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev)))
161                 return r;
162
163         *offset_return=offset_corba;
164
165         return GNOME_VFS_OK;
166 }
167
168
169 GnomeVFSResult captive_sandbox_parent_file_remove(CaptiveFileObject *captive_file_object)
170 {
171 GnomeVFSResult r;
172
173         g_return_val_if_fail(captive_file_object!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
174         g_return_val_if_fail(captive_file_object->file_Handle==NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
175
176         Captive_File_remove(captive_file_object->corba_File_object,&captive_corba_ev);
177         if (GNOME_VFS_OK!=(r=captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev)))
178                 return r;
179
180         return GNOME_VFS_OK;
181 }
182
183
184 GnomeVFSResult captive_sandbox_parent_file_file_info_get(CaptiveFileObject *captive_file_object,
185                 GnomeVFSFileInfo *file_info_captive)
186 {
187 Captive_GnomeVFSFileInfo *file_info_corba;
188 GnomeVFSResult r;
189
190         g_return_val_if_fail(captive_file_object!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
191         g_return_val_if_fail(file_info_captive!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
192         g_return_val_if_fail(captive_file_object->file_Handle==NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
193
194         Captive_File_file_info_get(captive_file_object->corba_File_object,&file_info_corba,&captive_corba_ev);
195         if (GNOME_VFS_OK!=(r=captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev)))
196                 return r;
197
198         r=captive_sandbox_file_info_corba_to_captive(file_info_captive,file_info_corba);
199         Captive_GnomeVFSFileInfo__freekids(file_info_corba,NULL/* 'd'; meaning? */);
200         CORBA_free(file_info_corba);
201         if (r!=GNOME_VFS_OK)
202                 return r;
203
204         return GNOME_VFS_OK;
205 }
206
207
208 GnomeVFSResult captive_sandbox_parent_file_file_info_set(CaptiveFileObject *captive_file_object,
209     const GnomeVFSFileInfo *file_info_captive,GnomeVFSSetFileInfoMask mask)
210 {
211 Captive_GnomeVFSFileInfo file_info_corba;
212 GnomeVFSResult r;
213
214         g_return_val_if_fail(captive_file_object!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
215         g_return_val_if_fail(file_info_captive!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
216         g_return_val_if_fail(captive_file_object->file_Handle==NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
217
218         if (GNOME_VFS_OK!=(r=captive_sandbox_file_info_captive_to_corba(&file_info_corba,file_info_captive)))
219                 return r;
220
221         Captive_File_file_info_set(captive_file_object->corba_File_object,&file_info_corba,mask,&captive_corba_ev);
222         if (GNOME_VFS_OK!=(r=captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev)))
223                 return r;
224
225         Captive_GnomeVFSFileInfo__freekids(&file_info_corba,NULL/* 'd'; meaning? */);
226
227         return GNOME_VFS_OK;
228 }
229
230
231 GnomeVFSResult captive_sandbox_parent_file_truncate(CaptiveFileObject *captive_file_object,GnomeVFSFileSize file_size)
232 {
233 GnomeVFSResult r;
234
235         g_return_val_if_fail(captive_file_object!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
236         g_return_val_if_fail(captive_file_object->file_Handle==NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
237
238         Captive_File_truncate(captive_file_object->corba_File_object,file_size,&captive_corba_ev);
239         if (GNOME_VFS_OK!=(r=captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev)))
240                 return r;
241
242         return GNOME_VFS_OK;
243 }
244
245
246 GnomeVFSResult captive_sandbox_parent_file_move
247                 (CaptiveFileObject *captive_file_object_old,const gchar *pathname_new,gboolean force_replace)
248 {
249 GnomeVFSResult r;
250
251         g_return_val_if_fail(captive_file_object_old!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
252         g_return_val_if_fail(pathname_new!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
253         g_return_val_if_fail(captive_file_object_old->file_Handle==NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
254
255         Captive_File_move(captive_file_object_old->corba_File_object,pathname_new,force_replace,&captive_corba_ev);
256         if (GNOME_VFS_OK!=(r=captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev)))
257                 return r;
258
259         return GNOME_VFS_OK;
260 }