d70b25bb0525ec25949e58a7cc6b440e21edeb85
[captive.git] / src / libcaptive / sandbox / FileInfo.c
1 /* $Id$
2  * CORBA/ORBit server side of GnomeVFSFileInfo handling
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 "FileInfo.h"   /* self */
23 #include <glib/gmessages.h>
24
25
26 GnomeVFSResult captive_sandbox_file_info_corba_to_captive
27                 (CaptiveFileInfoObject *file_info_captive,const Captive_CaptiveFileInfoObject *file_info_corba)
28 {
29         g_return_val_if_fail(file_info_captive!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
30         g_return_val_if_fail(file_info_corba!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
31         g_return_val_if_fail(file_info_captive->p.valid_fields==0,GNOME_VFS_ERROR_BAD_PARAMETERS);
32         g_return_val_if_fail(file_info_captive->p.name==NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
33
34         file_info_captive->p.valid_fields=0;
35         file_info_captive->p.name=g_strdup(file_info_corba->name);
36         if (file_info_corba->type_valid) {
37                 file_info_captive->p.type=file_info_corba->type;
38                 file_info_captive->p.valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_TYPE;
39                 }
40         if (file_info_corba->permissions_valid) {
41                 file_info_captive->p.permissions=file_info_corba->permissions;
42                 file_info_captive->p.valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_PERMISSIONS;
43                 }
44         if (file_info_corba->size_valid) {
45                 file_info_captive->p.size=file_info_corba->size;
46                 file_info_captive->p.valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_SIZE;
47                 }
48         if (file_info_corba->block_count_valid) {
49                 file_info_captive->p.block_count=file_info_corba->block_count;
50                 file_info_captive->p.valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_BLOCK_COUNT;
51                 }
52         if (file_info_corba->atime) {
53                 file_info_captive->p.atime=file_info_corba->atime;
54                 file_info_captive->atime_nsec=file_info_corba->atime_nsec;
55                 file_info_captive->p.valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_ATIME;
56                 }
57         if (file_info_corba->mtime) {
58                 file_info_captive->p.mtime=file_info_corba->mtime;
59                 file_info_captive->mtime_nsec=file_info_corba->mtime_nsec;
60                 file_info_captive->p.valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_MTIME;
61                 }
62         if (file_info_corba->ctime) {
63                 file_info_captive->p.ctime=file_info_corba->ctime;
64                 file_info_captive->ctime_nsec=file_info_corba->ctime_nsec;
65                 file_info_captive->p.valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_CTIME;
66                 }
67         if (file_info_corba->flags_valid) {
68                 file_info_captive->p.flags=file_info_corba->flags;
69                 file_info_captive->p.valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_FLAGS;
70                 }
71
72         return GNOME_VFS_OK;
73 }
74
75
76 GnomeVFSResult captive_sandbox_file_info_captive_to_corba
77                 (Captive_CaptiveFileInfoObject *file_info_corba,const CaptiveFileInfoObject *file_info_captive)
78 {
79         g_return_val_if_fail(file_info_corba!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
80         g_return_val_if_fail(file_info_captive!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
81
82         if (!file_info_captive->p.name)
83                 file_info_corba->name=CORBA_string_dup("");
84         else
85                 file_info_corba->name=CORBA_string_dup(file_info_captive->p.name);
86         if ((file_info_corba->type_valid=!!(file_info_captive->p.valid_fields&GNOME_VFS_FILE_INFO_FIELDS_TYPE)))
87                 file_info_corba->type=file_info_captive->p.type;
88         if ((file_info_corba->permissions_valid=!!(file_info_captive->p.valid_fields&GNOME_VFS_FILE_INFO_FIELDS_PERMISSIONS)))
89                 file_info_corba->permissions=file_info_captive->p.permissions;
90         if ((file_info_corba->size_valid=!!(file_info_captive->p.valid_fields&GNOME_VFS_FILE_INFO_FIELDS_SIZE)))
91                 file_info_corba->size=file_info_captive->p.size;
92         if ((file_info_corba->block_count_valid=!!(file_info_captive->p.valid_fields&GNOME_VFS_FILE_INFO_FIELDS_BLOCK_COUNT)))
93                 file_info_corba->block_count=file_info_captive->p.block_count;
94         if (!file_info_captive->p.valid_fields&GNOME_VFS_FILE_INFO_FIELDS_ATIME) {
95                 file_info_corba->atime     =0;
96                 file_info_corba->atime_nsec=0;
97                 }
98         else {
99                 file_info_corba->atime=file_info_captive->p.atime;
100                 file_info_corba->atime_nsec=file_info_captive->atime_nsec;
101                 }
102         if (!file_info_captive->p.valid_fields&GNOME_VFS_FILE_INFO_FIELDS_MTIME) {
103                 file_info_corba->mtime     =0;
104                 file_info_corba->mtime_nsec=0;
105                 }
106         else {
107                 file_info_corba->mtime=file_info_captive->p.mtime;
108                 file_info_corba->mtime_nsec=file_info_captive->mtime_nsec;
109                 }
110         if (!file_info_captive->p.valid_fields&GNOME_VFS_FILE_INFO_FIELDS_CTIME) {
111                 file_info_corba->ctime     =0;
112                 file_info_corba->ctime_nsec=0;
113                 }
114         else {
115                 file_info_corba->ctime=file_info_captive->p.ctime;
116                 file_info_corba->ctime_nsec=file_info_captive->ctime_nsec;
117                 }
118         if ((file_info_corba->flags_valid=!!(file_info_captive->p.valid_fields&GNOME_VFS_FILE_INFO_FIELDS_FLAGS)))
119                 file_info_corba->flags=file_info_captive->p.flags;
120
121         return GNOME_VFS_OK;
122 }
123
124
125 GnomeVFSResult captive_sandbox_file_info_set_mask_captive_to_corba
126                 (Captive_CaptiveFileInfoObject *file_info_corba,const CaptiveFileInfoObject *file_info_captive,GnomeVFSSetFileInfoMask mask)
127 {
128         g_return_val_if_fail(file_info_corba!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
129         g_return_val_if_fail(file_info_captive!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
130
131         /* uninitialized: file_info_corba->name */
132         file_info_corba->type_valid=CORBA_FALSE;
133         file_info_corba->permissions_valid=CORBA_FALSE;
134         file_info_corba->size_valid=CORBA_FALSE;
135         file_info_corba->block_count_valid=CORBA_FALSE;
136         file_info_corba->atime     =0;
137         file_info_corba->atime_nsec=0;
138         file_info_corba->mtime     =0;
139         file_info_corba->mtime_nsec=0;
140         file_info_corba->ctime     =0;
141         file_info_corba->ctime_nsec=0;
142         file_info_corba->flags_valid=CORBA_FALSE;
143
144         if (!(mask&GNOME_VFS_SET_FILE_INFO_NAME))
145                 file_info_corba->name=CORBA_string_dup("");
146         else
147                 file_info_corba->name=CORBA_string_dup(file_info_captive->p.name);
148         if ((file_info_corba->permissions_valid=!!(mask&GNOME_VFS_SET_FILE_INFO_PERMISSIONS)))
149                 file_info_corba->permissions=file_info_captive->p.permissions;
150         /* Not implemented by libcaptive: GNOME_VFS_SET_FILE_INFO_OWNER */
151         if (mask&GNOME_VFS_SET_FILE_INFO_TIME) {
152                 file_info_corba->atime     =file_info_captive->p.atime;
153                 file_info_corba->atime_nsec=file_info_captive->atime_nsec;
154                 file_info_corba->mtime     =file_info_captive->p.mtime;
155                 file_info_corba->mtime_nsec=file_info_captive->mtime_nsec;
156                 file_info_corba->ctime     =file_info_captive->p.ctime;
157                 file_info_corba->ctime_nsec=file_info_captive->ctime_nsec;
158                 }
159
160         return GNOME_VFS_OK;
161 }