2 * captive vfs 'file' interface to reactos of sandbox parent
3 * Copyright (C) 2002-2003 Jan Kratochvil <project-captive@jankratochvil.net>
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
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.
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
22 #include "file-parent.h" /* self */
23 #include <glib/gmessages.h>
24 #include "../sandbox/parent-File.h"
25 #include "vfs-parent.h"
26 #include "reactos/ntos/types.h" /* for ULONG */
29 static gpointer captive_file_parent_object_parent_class=NULL;
32 static GnomeVFSResult captive_file_parent_close(CaptiveFileObject *captive_file_object);
33 static GnomeVFSResult captive_file_parent_read(CaptiveFileObject *captive_file_object,
34 gpointer buffer,GnomeVFSFileSize num_bytes,GnomeVFSFileSize *bytes_read_return);
35 static GnomeVFSResult captive_file_parent_write(CaptiveFileObject *captive_file_object,
36 gconstpointer buffer,GnomeVFSFileSize num_bytes,GnomeVFSFileSize *bytes_written_return);
37 static GnomeVFSResult captive_file_parent_seek
38 (CaptiveFileObject *captive_file_object,GnomeVFSSeekPosition whence,GnomeVFSFileOffset offset);
39 static GnomeVFSResult captive_file_parent_tell(CaptiveFileObject *captive_file_object,GnomeVFSFileOffset *offset_return);
40 static GnomeVFSResult captive_file_parent_remove(CaptiveFileObject *captive_file_object);
41 static GnomeVFSResult captive_file_parent_file_info_get
42 (CaptiveFileObject *captive_file_object,GnomeVFSFileInfo *file_info);
43 static GnomeVFSResult captive_file_parent_file_info_set
44 (CaptiveFileObject *captive_file_object,const GnomeVFSFileInfo *info,GnomeVFSSetFileInfoMask mask);
45 static GnomeVFSResult captive_file_parent_truncate(CaptiveFileObject *captive_file_object,GnomeVFSFileSize file_size);
46 static GnomeVFSResult captive_file_parent_move
47 (CaptiveFileObject *captive_file_object_old,const gchar *pathname_new,gboolean force_replace);
50 static void captive_file_parent_object_finalize(CaptiveFileParentObject *captive_file_parent_object)
52 g_return_if_fail(captive_file_parent_object!=NULL);
54 captive_file_parent_close(CAPTIVE_FILE_OBJECT(captive_file_parent_object)); /* errors ignored */
56 G_OBJECT_CLASS(captive_file_parent_object_parent_class)->finalize((GObject *)captive_file_parent_object);
60 static void captive_file_parent_object_class_init(CaptiveFileParentObjectClass *class)
62 GObjectClass *gobject_class=G_OBJECT_CLASS(class);
63 CaptiveFileObjectClass *captive_file_object_class=CAPTIVE_FILE_OBJECT_CLASS(class);
65 captive_file_parent_object_parent_class=g_type_class_ref(g_type_parent(G_TYPE_FROM_CLASS(class)));
66 gobject_class->finalize=(void (*)(GObject *object))captive_file_parent_object_finalize;
68 captive_file_object_class->read=captive_file_parent_read;
69 captive_file_object_class->write=captive_file_parent_write;
70 captive_file_object_class->seek=captive_file_parent_seek;
71 captive_file_object_class->tell=captive_file_parent_tell;
72 captive_file_object_class->remove=captive_file_parent_remove;
73 captive_file_object_class->file_info_get=captive_file_parent_file_info_get;
74 captive_file_object_class->file_info_set=captive_file_parent_file_info_set;
75 captive_file_object_class->truncate=captive_file_parent_truncate;
76 captive_file_object_class->move=captive_file_parent_move;
80 static void captive_file_parent_object_init(CaptiveFileParentObject *captive_file_parent_object)
85 GType captive_file_parent_object_get_type(void)
87 static GType captive_file_parent_object_type=0;
89 if (!captive_file_parent_object_type) {
90 static const GTypeInfo captive_file_parent_object_info={
91 sizeof(CaptiveFileParentObjectClass),
93 NULL, /* base_finalize */
94 (GClassInitFunc)captive_file_parent_object_class_init,
95 NULL, /* class_finalize */
96 NULL, /* class_data */
97 sizeof(CaptiveFileParentObject),
99 (GInstanceInitFunc)captive_file_parent_object_init,
102 captive_file_parent_object_type=g_type_register_static(CAPTIVE_FILE_TYPE_OBJECT,
103 "CaptiveFileParentObject",&captive_file_parent_object_info,0);
106 return captive_file_parent_object_type;
110 GnomeVFSResult captive_file_parent_new_open(CaptiveFileObject **captive_file_object_return,
111 CaptiveVfsObject *captive_vfs_object,const gchar *pathname,GnomeVFSOpenMode mode)
113 CaptiveFileParentObject *captive_file_parent_object;
115 g_return_val_if_fail(captive_file_object_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
116 g_return_val_if_fail(CAPTIVE_VFS_PARENT_IS_OBJECT(captive_vfs_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
117 g_return_val_if_fail(pathname!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
119 captive_file_parent_object=g_object_new(
120 CAPTIVE_FILE_PARENT_TYPE_OBJECT, /* object_type */
121 NULL); /* first_property_name; FIXME: support properties */
123 captive_file_init(CAPTIVE_FILE_OBJECT(captive_file_parent_object),captive_vfs_object);
125 *captive_file_object_return=CAPTIVE_FILE_OBJECT(captive_file_parent_object);
127 return captive_sandbox_parent_file_new_open(captive_file_parent_object,pathname,mode);
131 GnomeVFSResult captive_file_parent_new_create(CaptiveFileObject **captive_file_object_return,
132 CaptiveVfsObject *captive_vfs_object,const gchar *pathname,GnomeVFSOpenMode mode,gboolean exclusive,guint perm)
134 CaptiveFileParentObject *captive_file_parent_object;
136 g_return_val_if_fail(captive_file_object_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
137 g_return_val_if_fail(CAPTIVE_VFS_PARENT_IS_OBJECT(captive_vfs_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
138 g_return_val_if_fail(pathname!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
140 captive_file_parent_object=g_object_new(
141 CAPTIVE_FILE_PARENT_TYPE_OBJECT, /* object_type */
142 NULL); /* first_property_name; FIXME: support properties */
144 captive_file_init(CAPTIVE_FILE_OBJECT(captive_file_parent_object),captive_vfs_object);
146 *captive_file_object_return=CAPTIVE_FILE_OBJECT(captive_file_parent_object);
148 return captive_sandbox_parent_file_new_create(captive_file_parent_object,pathname,mode,exclusive,perm);
152 static GnomeVFSResult captive_file_parent_close(CaptiveFileObject *captive_file_object)
154 g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
156 return captive_sandbox_parent_file_close(CAPTIVE_FILE_PARENT_OBJECT(captive_file_object));
160 static GnomeVFSResult captive_file_parent_read(CaptiveFileObject *captive_file_object,
161 gpointer buffer,GnomeVFSFileSize num_bytes,GnomeVFSFileSize *bytes_read_return)
163 CaptiveFileParentObject *captive_file_parent_object;
165 g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
166 g_return_val_if_fail(buffer!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
167 g_return_val_if_fail(bytes_read_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
168 g_return_val_if_fail(num_bytes==(ULONG)num_bytes,GNOME_VFS_ERROR_BAD_PARAMETERS);
170 captive_file_parent_object=CAPTIVE_FILE_PARENT_OBJECT(captive_file_object);
172 return captive_sandbox_parent_file_read(captive_file_parent_object,buffer,num_bytes,bytes_read_return);
176 static GnomeVFSResult captive_file_parent_write(CaptiveFileObject *captive_file_object,
177 gconstpointer buffer,GnomeVFSFileSize num_bytes,GnomeVFSFileSize *bytes_written_return)
179 CaptiveFileParentObject *captive_file_parent_object;
181 g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
182 g_return_val_if_fail(buffer!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
183 g_return_val_if_fail(bytes_written_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
184 g_return_val_if_fail(num_bytes==(ULONG)num_bytes,GNOME_VFS_ERROR_BAD_PARAMETERS);
186 captive_file_parent_object=CAPTIVE_FILE_PARENT_OBJECT(captive_file_object);
188 return captive_sandbox_parent_file_write(captive_file_parent_object,buffer,num_bytes,bytes_written_return);
192 static GnomeVFSResult captive_file_parent_seek
193 (CaptiveFileObject *captive_file_object,GnomeVFSSeekPosition whence,GnomeVFSFileOffset offset)
195 CaptiveFileParentObject *captive_file_parent_object;
197 g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
199 captive_file_parent_object=CAPTIVE_FILE_PARENT_OBJECT(captive_file_object);
201 return captive_sandbox_parent_file_seek(captive_file_parent_object,whence,offset);
205 static GnomeVFSResult captive_file_parent_tell(CaptiveFileObject *captive_file_object,GnomeVFSFileOffset *offset_return)
207 CaptiveFileParentObject *captive_file_parent_object;
209 g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
210 g_return_val_if_fail(offset_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
212 captive_file_parent_object=CAPTIVE_FILE_PARENT_OBJECT(captive_file_object);
214 return captive_sandbox_parent_file_tell(captive_file_parent_object,offset_return);
218 static GnomeVFSResult captive_file_parent_remove(CaptiveFileObject *captive_file_object)
220 CaptiveFileParentObject *captive_file_parent_object;
222 g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
224 captive_file_parent_object=CAPTIVE_FILE_PARENT_OBJECT(captive_file_object);
226 return captive_sandbox_parent_file_remove(captive_file_parent_object);
230 static GnomeVFSResult captive_file_parent_file_info_get
231 (CaptiveFileObject *captive_file_object,GnomeVFSFileInfo *file_info)
233 CaptiveFileParentObject *captive_file_parent_object;
235 g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
236 g_return_val_if_fail(file_info!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
238 captive_file_parent_object=CAPTIVE_FILE_PARENT_OBJECT(captive_file_object);
240 return captive_sandbox_parent_file_file_info_get(captive_file_parent_object,file_info);
244 static GnomeVFSResult captive_file_parent_file_info_set
245 (CaptiveFileObject *captive_file_object,const GnomeVFSFileInfo *info,GnomeVFSSetFileInfoMask mask)
247 CaptiveFileParentObject *captive_file_parent_object;
249 g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
250 g_return_val_if_fail(info!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
252 captive_file_parent_object=CAPTIVE_FILE_PARENT_OBJECT(captive_file_object);
254 return captive_sandbox_parent_file_file_info_set(captive_file_parent_object,info,mask);
258 static GnomeVFSResult captive_file_parent_truncate(CaptiveFileObject *captive_file_object,GnomeVFSFileSize file_size)
260 CaptiveFileParentObject *captive_file_parent_object;
262 g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
264 captive_file_parent_object=CAPTIVE_FILE_PARENT_OBJECT(captive_file_object);
266 return captive_sandbox_parent_file_truncate(captive_file_parent_object,file_size);
270 static GnomeVFSResult captive_file_parent_move
271 (CaptiveFileObject *captive_file_object_old,const gchar *pathname_new,gboolean force_replace)
273 CaptiveFileParentObject *captive_file_parent_object_old;
275 g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object_old),GNOME_VFS_ERROR_BAD_PARAMETERS);
276 g_return_val_if_fail(pathname_new!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
278 captive_file_parent_object_old=CAPTIVE_FILE_PARENT_OBJECT(captive_file_object_old);
280 return captive_sandbox_parent_file_move(captive_file_parent_object_old,pathname_new,force_replace);