2 * captive vfs 'file' interface to reactos
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 "captive/client-file.h" /* self */
23 #include "file.h" /* self-priv */
24 #include <glib/gmessages.h>
26 #include "reactos/ntos/types.h" /* for ULONG */
29 static gpointer captive_file_object_parent_class=NULL;
32 static GnomeVFSResult captive_file_close(CaptiveFileObject *captive_file_object);
34 static void captive_file_object_finalize(CaptiveFileObject *captive_file_object)
36 g_return_if_fail(captive_file_object!=NULL);
38 captive_file_close(captive_file_object); /* errors ignored */
40 G_OBJECT_CLASS(captive_file_object_parent_class)->finalize((GObject *)captive_file_object);
44 static void captive_file_object_class_init(CaptiveFileObjectClass *class)
46 GObjectClass *gobject_class=G_OBJECT_CLASS(class);
48 captive_file_object_parent_class=g_type_class_ref(g_type_parent(G_TYPE_FROM_CLASS(class)));
49 gobject_class->finalize=(void (*)(GObject *object))captive_file_object_finalize;
53 static void captive_file_object_init(CaptiveFileObject *captive_file_object)
58 GType captive_file_object_get_type(void)
60 static GType captive_file_object_type=0;
62 if (!captive_file_object_type) {
63 static const GTypeInfo captive_file_object_info={
64 sizeof(CaptiveFileObjectClass),
66 NULL, /* base_finalize */
67 (GClassInitFunc)captive_file_object_class_init,
68 NULL, /* class_finalize */
69 NULL, /* class_data */
70 sizeof(CaptiveFileObject),
72 (GInstanceInitFunc)captive_file_object_init,
75 captive_file_object_type=g_type_register_static(G_TYPE_OBJECT,
76 "CaptiveFileObject",&captive_file_object_info,G_TYPE_FLAG_ABSTRACT);
79 return captive_file_object_type;
83 GnomeVFSResult captive_file_new_open(CaptiveFileObject **captive_file_object_return,
84 CaptiveVfsObject *captive_vfs_object,const gchar *pathname,GnomeVFSOpenMode mode)
86 g_return_val_if_fail(captive_file_object_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
87 g_return_val_if_fail(CAPTIVE_VFS_IS_OBJECT(captive_vfs_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
88 g_return_val_if_fail(pathname!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
90 return (*CAPTIVE_VFS_OBJECT_GET_CLASS(captive_vfs_object)->file_new_open)
91 (captive_file_object_return,captive_vfs_object,pathname,mode);
95 GnomeVFSResult captive_file_new_create(CaptiveFileObject **captive_file_object_return,
96 CaptiveVfsObject *captive_vfs_object,const gchar *pathname,GnomeVFSOpenMode mode,gboolean exclusive,guint perm)
98 g_return_val_if_fail(captive_file_object_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
99 g_return_val_if_fail(CAPTIVE_VFS_IS_OBJECT(captive_vfs_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
100 g_return_val_if_fail(pathname!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
102 return (*CAPTIVE_VFS_OBJECT_GET_CLASS(captive_vfs_object)->file_new_create)
103 (captive_file_object_return,captive_vfs_object,pathname,mode,exclusive,perm);
107 GnomeVFSResult captive_file_init(CaptiveFileObject *captive_file_object,CaptiveVfsObject *captive_vfs_object)
109 g_return_val_if_fail(CAPTIVE_FILE_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
110 g_return_val_if_fail(CAPTIVE_VFS_IS_OBJECT(captive_vfs_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
112 g_return_val_if_fail(captive_file_object->vfs==NULL,GNOME_VFS_ERROR_GENERIC);
114 captive_file_object->vfs=g_object_ref(captive_vfs_object);
120 static GnomeVFSResult captive_file_close(CaptiveFileObject *captive_file_object)
122 g_return_val_if_fail(CAPTIVE_FILE_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
124 if (captive_file_object->vfs!=NULL) {
125 g_assert(CAPTIVE_VFS_IS_OBJECT(captive_file_object->vfs));
126 g_object_unref(captive_file_object->vfs);
127 captive_file_object->vfs=NULL;
134 CaptiveVfsObject *captive_file_ref_vfs(CaptiveFileObject *captive_file_object)
136 g_return_val_if_fail(CAPTIVE_FILE_IS_OBJECT(captive_file_object),NULL);
138 g_return_val_if_fail(CAPTIVE_VFS_IS_OBJECT(captive_file_object->vfs),NULL);
140 return g_object_ref(captive_file_object->vfs);
144 GnomeVFSResult captive_file_read(CaptiveFileObject *captive_file_object,
145 gpointer buffer,GnomeVFSFileSize num_bytes,GnomeVFSFileSize *bytes_read_return)
147 g_return_val_if_fail(CAPTIVE_FILE_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
148 g_return_val_if_fail(buffer!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
149 g_return_val_if_fail(bytes_read_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
150 g_return_val_if_fail(num_bytes==(ULONG)num_bytes,GNOME_VFS_ERROR_BAD_PARAMETERS);
152 return (*CAPTIVE_FILE_OBJECT_GET_CLASS(captive_file_object)->read)
153 (captive_file_object,buffer,num_bytes,bytes_read_return);
157 GnomeVFSResult captive_file_write(CaptiveFileObject *captive_file_object,
158 gconstpointer buffer,GnomeVFSFileSize num_bytes,GnomeVFSFileSize *bytes_written_return)
160 g_return_val_if_fail(CAPTIVE_FILE_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
161 g_return_val_if_fail(buffer!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
162 g_return_val_if_fail(bytes_written_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
163 g_return_val_if_fail(num_bytes==(ULONG)num_bytes,GNOME_VFS_ERROR_BAD_PARAMETERS);
165 return (*CAPTIVE_FILE_OBJECT_GET_CLASS(captive_file_object)->write)
166 (captive_file_object,buffer,num_bytes,bytes_written_return);
170 GnomeVFSResult captive_file_seek
171 (CaptiveFileObject *captive_file_object,GnomeVFSSeekPosition whence,GnomeVFSFileOffset offset)
173 g_return_val_if_fail(CAPTIVE_FILE_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
175 return (*CAPTIVE_FILE_OBJECT_GET_CLASS(captive_file_object)->seek)
176 (captive_file_object,whence,offset);
180 GnomeVFSResult captive_file_tell(CaptiveFileObject *captive_file_object,GnomeVFSFileOffset *offset_return)
182 g_return_val_if_fail(CAPTIVE_FILE_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
184 return (*CAPTIVE_FILE_OBJECT_GET_CLASS(captive_file_object)->tell)
185 (captive_file_object,offset_return);
189 GnomeVFSResult captive_file_remove(CaptiveFileObject *captive_file_object)
191 g_return_val_if_fail(CAPTIVE_FILE_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
193 return (*CAPTIVE_FILE_OBJECT_GET_CLASS(captive_file_object)->remove)
194 (captive_file_object);
198 GnomeVFSResult captive_file_file_info_get(CaptiveFileObject *captive_file_object,
199 GnomeVFSFileInfo *file_info)
201 g_return_val_if_fail(CAPTIVE_FILE_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
202 g_return_val_if_fail(file_info!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
204 return (*CAPTIVE_FILE_OBJECT_GET_CLASS(captive_file_object)->file_info_get)
205 (captive_file_object,file_info);
209 GnomeVFSResult captive_file_file_info_set(CaptiveFileObject *captive_file_object,
210 const GnomeVFSFileInfo *info,GnomeVFSSetFileInfoMask mask)
212 g_return_val_if_fail(CAPTIVE_FILE_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
213 g_return_val_if_fail(info!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
215 return (*CAPTIVE_FILE_OBJECT_GET_CLASS(captive_file_object)->file_info_set)
216 (captive_file_object,info,mask);
220 GnomeVFSResult captive_file_truncate(CaptiveFileObject *captive_file_object,GnomeVFSFileSize file_size)
222 g_return_val_if_fail(CAPTIVE_FILE_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
224 return (*CAPTIVE_FILE_OBJECT_GET_CLASS(captive_file_object)->truncate)
225 (captive_file_object,file_size);
229 GnomeVFSResult captive_file_move(CaptiveFileObject *captive_file_object_old,const gchar *pathname_new,gboolean force_replace)
231 g_return_val_if_fail(CAPTIVE_FILE_IS_OBJECT(captive_file_object_old),GNOME_VFS_ERROR_BAD_PARAMETERS);
232 g_return_val_if_fail(pathname_new!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
234 return (*CAPTIVE_FILE_OBJECT_GET_CLASS(captive_file_object_old)->move)
235 (captive_file_object_old,pathname_new,force_replace);