1c5bb8911e42fe04a0b23300d91e455952f79c18
[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                 (GnomeVFSFileInfo *file_info_captive,const Captive_GnomeVFSFileInfo *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
32         file_info_captive->valid_fields=0;
33         file_info_captive->name=g_strdup(file_info_corba->name);
34         if (file_info_corba->type_valid) {
35                 file_info_captive->type=file_info_corba->type;
36                 file_info_captive->valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_TYPE;
37                 }
38         if (file_info_corba->permissions_valid) {
39                 file_info_captive->permissions=file_info_corba->permissions;
40                 file_info_captive->valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_PERMISSIONS;
41                 }
42         if (file_info_corba->size_valid) {
43                 file_info_captive->size=file_info_corba->size;
44                 file_info_captive->valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_SIZE;
45                 }
46         if (file_info_corba->block_count_valid) {
47                 file_info_captive->block_count=file_info_corba->block_count;
48                 file_info_captive->valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_BLOCK_COUNT;
49                 }
50         if (file_info_corba->atime) {
51                 file_info_captive->atime=file_info_corba->atime;
52                 file_info_captive->valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_ATIME;
53                 }
54         if (file_info_corba->mtime) {
55                 file_info_captive->mtime=file_info_corba->mtime;
56                 file_info_captive->valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_MTIME;
57                 }
58         if (file_info_corba->ctime) {
59                 file_info_captive->ctime=file_info_corba->ctime;
60                 file_info_captive->valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_CTIME;
61                 }
62         if (file_info_corba->flags_valid) {
63                 file_info_captive->flags=file_info_corba->flags;
64                 file_info_captive->valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_FLAGS;
65                 }
66
67         return GNOME_VFS_OK;
68 }
69
70
71 GnomeVFSResult captive_sandbox_file_info_captive_to_corba
72                 (Captive_GnomeVFSFileInfo *file_info_corba,const GnomeVFSFileInfo *file_info_captive)
73 {
74         g_return_val_if_fail(file_info_corba!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
75         g_return_val_if_fail(file_info_captive!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
76
77         if (!file_info_captive->name)
78                 file_info_corba->name=CORBA_string_dup("");
79         else
80                 file_info_corba->name=CORBA_string_dup(file_info_captive->name);
81         if ((file_info_corba->type_valid=!!(file_info_captive->valid_fields&GNOME_VFS_FILE_INFO_FIELDS_TYPE)))
82                 file_info_corba->type=file_info_captive->type;
83         if ((file_info_corba->permissions_valid=!!(file_info_captive->valid_fields&GNOME_VFS_FILE_INFO_FIELDS_PERMISSIONS)))
84                 file_info_corba->permissions=file_info_captive->permissions;
85         if ((file_info_corba->size_valid=!!(file_info_captive->valid_fields&GNOME_VFS_FILE_INFO_FIELDS_SIZE)))
86                 file_info_corba->size=file_info_captive->size;
87         if ((file_info_corba->block_count_valid=!!(file_info_captive->valid_fields&GNOME_VFS_FILE_INFO_FIELDS_BLOCK_COUNT)))
88                 file_info_corba->block_count=file_info_captive->block_count;
89         file_info_corba->atime=(!(file_info_captive->valid_fields&GNOME_VFS_FILE_INFO_FIELDS_ATIME) ? 0 : file_info_captive->atime);
90         file_info_corba->mtime=(!(file_info_captive->valid_fields&GNOME_VFS_FILE_INFO_FIELDS_MTIME) ? 0 : file_info_captive->mtime);
91         file_info_corba->ctime=(!(file_info_captive->valid_fields&GNOME_VFS_FILE_INFO_FIELDS_CTIME) ? 0 : file_info_captive->ctime);
92         if ((file_info_corba->flags_valid=!!(file_info_captive->valid_fields&GNOME_VFS_FILE_INFO_FIELDS_FLAGS)))
93                 file_info_corba->flags=file_info_captive->flags;
94
95         return GNOME_VFS_OK;
96 }
97
98
99 GnomeVFSResult captive_sandbox_file_info_set_mask_captive_to_corba
100                 (Captive_GnomeVFSFileInfo *file_info_corba,const GnomeVFSFileInfo *file_info_captive,GnomeVFSSetFileInfoMask mask)
101 {
102         g_return_val_if_fail(file_info_corba!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
103         g_return_val_if_fail(file_info_captive!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
104
105         /* uninitialized: file_info_corba->name */
106         file_info_corba->type_valid=CORBA_FALSE;
107         file_info_corba->permissions_valid=CORBA_FALSE;
108         file_info_corba->size_valid=CORBA_FALSE;
109         file_info_corba->block_count_valid=CORBA_FALSE;
110         file_info_corba->atime=0;
111         file_info_corba->mtime=0;
112         file_info_corba->ctime=0;
113         file_info_corba->flags_valid=CORBA_FALSE;
114
115         if (!(mask&GNOME_VFS_SET_FILE_INFO_NAME))
116                 file_info_corba->name=CORBA_string_dup("");
117         else
118                 file_info_corba->name=CORBA_string_dup(file_info_captive->name);
119         if ((file_info_corba->permissions_valid=!!(mask&GNOME_VFS_SET_FILE_INFO_PERMISSIONS)))
120                 file_info_corba->permissions=file_info_captive->permissions;
121         /* Not implemented by libcaptive: GNOME_VFS_SET_FILE_INFO_OWNER */
122         if (mask&GNOME_VFS_SET_FILE_INFO_TIME) {
123                 file_info_corba->atime=file_info_captive->atime;
124                 file_info_corba->mtime=file_info_captive->mtime;
125                 file_info_corba->ctime=file_info_captive->ctime;
126                 }
127
128         return GNOME_VFS_OK;
129 }