6a473cf4cd5ce17ec8ab8dd5ab8eb31d45639516
[captive.git] / src / libcaptive / client / directory-parent.c
1 /* $Id$
2  * captive vfs 'directory' interface to reactos of sandbox parent
3  * Copyright (C) 2002-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 "directory-parent.h"   /* self */
23 #include <glib/gmessages.h>
24 #include "../sandbox/parent-Directory.h"
25 #include "vfs-parent.h"
26
27
28 static gpointer captive_directory_parent_object_parent_class=NULL;
29
30
31 static GnomeVFSResult captive_directory_parent_close(CaptiveDirectoryObject *captive_directory_object);
32 static GnomeVFSResult captive_directory_parent_read
33                 (CaptiveDirectoryObject *captive_directory_object,GnomeVFSFileInfo *file_info);
34 static GnomeVFSResult captive_directory_parent_remove(CaptiveDirectoryObject *captive_directory_object);
35
36
37 static void captive_directory_parent_object_finalize(CaptiveDirectoryParentObject *captive_directory_parent_object)
38 {
39         g_return_if_fail(captive_directory_parent_object!=NULL);
40
41         captive_directory_parent_close(CAPTIVE_DIRECTORY_OBJECT(captive_directory_parent_object));      /* errors ignored */
42
43         G_OBJECT_CLASS(captive_directory_parent_object_parent_class)->finalize((GObject *)captive_directory_parent_object);
44 }
45
46
47 static void captive_directory_parent_object_class_init(CaptiveDirectoryParentObjectClass *class)
48 {
49 GObjectClass *gobject_class=G_OBJECT_CLASS(class);
50 CaptiveDirectoryObjectClass *captive_directory_object_class=CAPTIVE_DIRECTORY_OBJECT_CLASS(class);
51
52         captive_directory_parent_object_parent_class=g_type_class_ref(g_type_parent(G_TYPE_FROM_CLASS(class)));
53         gobject_class->finalize=(void (*)(GObject *object))captive_directory_parent_object_finalize;
54
55         captive_directory_object_class->read=captive_directory_parent_read;
56         captive_directory_object_class->remove=captive_directory_parent_remove;
57 }
58
59
60 static void captive_directory_parent_object_init(CaptiveDirectoryParentObject *captive_directory_parent_object)
61 {
62 }
63
64
65 GType captive_directory_parent_object_get_type(void)
66 {
67 static GType captive_directory_parent_object_type=0;
68
69         if (!captive_directory_parent_object_type) {
70 static const GTypeInfo captive_directory_parent_object_info={
71                                 sizeof(CaptiveDirectoryParentObjectClass),
72                                 NULL,   /* base_init */
73                                 NULL,   /* base_finalize */
74                                 (GClassInitFunc)captive_directory_parent_object_class_init,
75                                 NULL,   /* class_finalize */
76                                 NULL,   /* class_data */
77                                 sizeof(CaptiveDirectoryParentObject),
78                                 5,      /* n_preallocs */
79                                 (GInstanceInitFunc)captive_directory_parent_object_init,
80                                 };
81
82                 captive_directory_parent_object_type=g_type_register_static(CAPTIVE_DIRECTORY_TYPE_OBJECT,
83                                 "CaptiveDirectoryParentObject",&captive_directory_parent_object_info,0);
84                 }
85
86         return captive_directory_parent_object_type;
87 }
88
89
90 GnomeVFSResult captive_directory_parent_new_open(CaptiveDirectoryObject **captive_directory_object_return,
91                 CaptiveVfsObject *captive_vfs_object,const gchar *pathname)
92 {
93 CaptiveDirectoryParentObject *captive_directory_parent_object;
94
95         g_return_val_if_fail(captive_directory_object_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
96         g_return_val_if_fail(CAPTIVE_VFS_PARENT_IS_OBJECT(captive_vfs_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
97         g_return_val_if_fail(pathname!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
98
99         captive_directory_parent_object=g_object_new(
100                         CAPTIVE_DIRECTORY_PARENT_TYPE_OBJECT,   /* object_type */
101                         NULL);  /* first_property_name; FIXME: support properties */
102
103         captive_directory_init(CAPTIVE_DIRECTORY_OBJECT(captive_directory_parent_object),captive_vfs_object);
104
105         *captive_directory_object_return=CAPTIVE_DIRECTORY_OBJECT(captive_directory_parent_object);
106
107         return captive_sandbox_parent_directory_new_open(captive_directory_parent_object,pathname);
108 }
109
110
111 GnomeVFSResult captive_directory_parent_new_make(CaptiveDirectoryObject **captive_directory_object_return,
112                 CaptiveVfsObject *captive_vfs_object,const gchar *pathname,guint perm)
113 {
114 CaptiveDirectoryParentObject *captive_directory_parent_object;
115
116         g_return_val_if_fail(captive_directory_object_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
117         g_return_val_if_fail(CAPTIVE_VFS_PARENT_IS_OBJECT(captive_vfs_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
118         g_return_val_if_fail(pathname!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
119
120         captive_directory_parent_object=g_object_new(
121                         CAPTIVE_DIRECTORY_PARENT_TYPE_OBJECT,   /* object_type */
122                         NULL);  /* first_property_name; FIXME: support properties */
123
124         captive_directory_init(CAPTIVE_DIRECTORY_OBJECT(captive_directory_parent_object),captive_vfs_object);
125
126         *captive_directory_object_return=CAPTIVE_DIRECTORY_OBJECT(captive_directory_parent_object);
127
128         return captive_sandbox_parent_directory_new_make(captive_directory_parent_object,pathname,perm);
129 }
130
131
132 static GnomeVFSResult captive_directory_parent_close(CaptiveDirectoryObject *captive_directory_object)
133 {
134 CaptiveDirectoryParentObject *captive_directory_parent_object;
135
136         g_return_val_if_fail(CAPTIVE_DIRECTORY_PARENT_IS_OBJECT(captive_directory_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
137
138         captive_directory_parent_object=CAPTIVE_DIRECTORY_PARENT_OBJECT(captive_directory_object);
139
140         return captive_sandbox_parent_directory_close(captive_directory_parent_object);
141 }
142
143
144 static GnomeVFSResult captive_directory_parent_read
145                 (CaptiveDirectoryObject *captive_directory_object,GnomeVFSFileInfo *file_info)
146 {
147 CaptiveDirectoryParentObject *captive_directory_parent_object;
148
149         g_return_val_if_fail(CAPTIVE_DIRECTORY_PARENT_IS_OBJECT(captive_directory_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
150         g_return_val_if_fail(file_info!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
151
152         captive_directory_parent_object=CAPTIVE_DIRECTORY_PARENT_OBJECT(captive_directory_object);
153
154         return captive_sandbox_parent_directory_read(captive_directory_parent_object,file_info);
155 }
156
157
158 static GnomeVFSResult captive_directory_parent_remove(CaptiveDirectoryObject *captive_directory_object)
159 {
160 CaptiveDirectoryParentObject *captive_directory_parent_object;
161
162         g_return_val_if_fail(CAPTIVE_DIRECTORY_PARENT_IS_OBJECT(captive_directory_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
163
164         captive_directory_parent_object=CAPTIVE_DIRECTORY_PARENT_OBJECT(captive_directory_object);
165
166         return captive_sandbox_parent_directory_remove(captive_directory_parent_object);
167 }