Implemented sub-second W32 filesystem interface by new: CaptiveFileInfoObject
[captive.git] / src / libcaptive / sandbox / FileInfo.c
index 1c5bb89..d70b25b 100644 (file)
 
 
 GnomeVFSResult captive_sandbox_file_info_corba_to_captive
-               (GnomeVFSFileInfo *file_info_captive,const Captive_GnomeVFSFileInfo *file_info_corba)
+               (CaptiveFileInfoObject *file_info_captive,const Captive_CaptiveFileInfoObject *file_info_corba)
 {
        g_return_val_if_fail(file_info_captive!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
        g_return_val_if_fail(file_info_corba!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
+       g_return_val_if_fail(file_info_captive->p.valid_fields==0,GNOME_VFS_ERROR_BAD_PARAMETERS);
+       g_return_val_if_fail(file_info_captive->p.name==NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
 
-       file_info_captive->valid_fields=0;
-       file_info_captive->name=g_strdup(file_info_corba->name);
+       file_info_captive->p.valid_fields=0;
+       file_info_captive->p.name=g_strdup(file_info_corba->name);
        if (file_info_corba->type_valid) {
-               file_info_captive->type=file_info_corba->type;
-               file_info_captive->valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_TYPE;
+               file_info_captive->p.type=file_info_corba->type;
+               file_info_captive->p.valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_TYPE;
                }
        if (file_info_corba->permissions_valid) {
-               file_info_captive->permissions=file_info_corba->permissions;
-               file_info_captive->valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_PERMISSIONS;
+               file_info_captive->p.permissions=file_info_corba->permissions;
+               file_info_captive->p.valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_PERMISSIONS;
                }
        if (file_info_corba->size_valid) {
-               file_info_captive->size=file_info_corba->size;
-               file_info_captive->valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_SIZE;
+               file_info_captive->p.size=file_info_corba->size;
+               file_info_captive->p.valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_SIZE;
                }
        if (file_info_corba->block_count_valid) {
-               file_info_captive->block_count=file_info_corba->block_count;
-               file_info_captive->valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_BLOCK_COUNT;
+               file_info_captive->p.block_count=file_info_corba->block_count;
+               file_info_captive->p.valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_BLOCK_COUNT;
                }
        if (file_info_corba->atime) {
-               file_info_captive->atime=file_info_corba->atime;
-               file_info_captive->valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_ATIME;
+               file_info_captive->p.atime=file_info_corba->atime;
+               file_info_captive->atime_nsec=file_info_corba->atime_nsec;
+               file_info_captive->p.valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_ATIME;
                }
        if (file_info_corba->mtime) {
-               file_info_captive->mtime=file_info_corba->mtime;
-               file_info_captive->valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_MTIME;
+               file_info_captive->p.mtime=file_info_corba->mtime;
+               file_info_captive->mtime_nsec=file_info_corba->mtime_nsec;
+               file_info_captive->p.valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_MTIME;
                }
        if (file_info_corba->ctime) {
-               file_info_captive->ctime=file_info_corba->ctime;
-               file_info_captive->valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_CTIME;
+               file_info_captive->p.ctime=file_info_corba->ctime;
+               file_info_captive->ctime_nsec=file_info_corba->ctime_nsec;
+               file_info_captive->p.valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_CTIME;
                }
        if (file_info_corba->flags_valid) {
-               file_info_captive->flags=file_info_corba->flags;
-               file_info_captive->valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_FLAGS;
+               file_info_captive->p.flags=file_info_corba->flags;
+               file_info_captive->p.valid_fields|=GNOME_VFS_FILE_INFO_FIELDS_FLAGS;
                }
 
        return GNOME_VFS_OK;
@@ -69,35 +74,56 @@ GnomeVFSResult captive_sandbox_file_info_corba_to_captive
 
 
 GnomeVFSResult captive_sandbox_file_info_captive_to_corba
-               (Captive_GnomeVFSFileInfo *file_info_corba,const GnomeVFSFileInfo *file_info_captive)
+               (Captive_CaptiveFileInfoObject *file_info_corba,const CaptiveFileInfoObject *file_info_captive)
 {
        g_return_val_if_fail(file_info_corba!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
        g_return_val_if_fail(file_info_captive!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
 
-       if (!file_info_captive->name)
+       if (!file_info_captive->p.name)
                file_info_corba->name=CORBA_string_dup("");
        else
-               file_info_corba->name=CORBA_string_dup(file_info_captive->name);
-       if ((file_info_corba->type_valid=!!(file_info_captive->valid_fields&GNOME_VFS_FILE_INFO_FIELDS_TYPE)))
-               file_info_corba->type=file_info_captive->type;
-       if ((file_info_corba->permissions_valid=!!(file_info_captive->valid_fields&GNOME_VFS_FILE_INFO_FIELDS_PERMISSIONS)))
-               file_info_corba->permissions=file_info_captive->permissions;
-       if ((file_info_corba->size_valid=!!(file_info_captive->valid_fields&GNOME_VFS_FILE_INFO_FIELDS_SIZE)))
-               file_info_corba->size=file_info_captive->size;
-       if ((file_info_corba->block_count_valid=!!(file_info_captive->valid_fields&GNOME_VFS_FILE_INFO_FIELDS_BLOCK_COUNT)))
-               file_info_corba->block_count=file_info_captive->block_count;
-       file_info_corba->atime=(!(file_info_captive->valid_fields&GNOME_VFS_FILE_INFO_FIELDS_ATIME) ? 0 : file_info_captive->atime);
-       file_info_corba->mtime=(!(file_info_captive->valid_fields&GNOME_VFS_FILE_INFO_FIELDS_MTIME) ? 0 : file_info_captive->mtime);
-       file_info_corba->ctime=(!(file_info_captive->valid_fields&GNOME_VFS_FILE_INFO_FIELDS_CTIME) ? 0 : file_info_captive->ctime);
-       if ((file_info_corba->flags_valid=!!(file_info_captive->valid_fields&GNOME_VFS_FILE_INFO_FIELDS_FLAGS)))
-               file_info_corba->flags=file_info_captive->flags;
+               file_info_corba->name=CORBA_string_dup(file_info_captive->p.name);
+       if ((file_info_corba->type_valid=!!(file_info_captive->p.valid_fields&GNOME_VFS_FILE_INFO_FIELDS_TYPE)))
+               file_info_corba->type=file_info_captive->p.type;
+       if ((file_info_corba->permissions_valid=!!(file_info_captive->p.valid_fields&GNOME_VFS_FILE_INFO_FIELDS_PERMISSIONS)))
+               file_info_corba->permissions=file_info_captive->p.permissions;
+       if ((file_info_corba->size_valid=!!(file_info_captive->p.valid_fields&GNOME_VFS_FILE_INFO_FIELDS_SIZE)))
+               file_info_corba->size=file_info_captive->p.size;
+       if ((file_info_corba->block_count_valid=!!(file_info_captive->p.valid_fields&GNOME_VFS_FILE_INFO_FIELDS_BLOCK_COUNT)))
+               file_info_corba->block_count=file_info_captive->p.block_count;
+       if (!file_info_captive->p.valid_fields&GNOME_VFS_FILE_INFO_FIELDS_ATIME) {
+               file_info_corba->atime     =0;
+               file_info_corba->atime_nsec=0;
+               }
+       else {
+               file_info_corba->atime=file_info_captive->p.atime;
+               file_info_corba->atime_nsec=file_info_captive->atime_nsec;
+               }
+       if (!file_info_captive->p.valid_fields&GNOME_VFS_FILE_INFO_FIELDS_MTIME) {
+               file_info_corba->mtime     =0;
+               file_info_corba->mtime_nsec=0;
+               }
+       else {
+               file_info_corba->mtime=file_info_captive->p.mtime;
+               file_info_corba->mtime_nsec=file_info_captive->mtime_nsec;
+               }
+       if (!file_info_captive->p.valid_fields&GNOME_VFS_FILE_INFO_FIELDS_CTIME) {
+               file_info_corba->ctime     =0;
+               file_info_corba->ctime_nsec=0;
+               }
+       else {
+               file_info_corba->ctime=file_info_captive->p.ctime;
+               file_info_corba->ctime_nsec=file_info_captive->ctime_nsec;
+               }
+       if ((file_info_corba->flags_valid=!!(file_info_captive->p.valid_fields&GNOME_VFS_FILE_INFO_FIELDS_FLAGS)))
+               file_info_corba->flags=file_info_captive->p.flags;
 
        return GNOME_VFS_OK;
 }
 
 
 GnomeVFSResult captive_sandbox_file_info_set_mask_captive_to_corba
-               (Captive_GnomeVFSFileInfo *file_info_corba,const GnomeVFSFileInfo *file_info_captive,GnomeVFSSetFileInfoMask mask)
+               (Captive_CaptiveFileInfoObject *file_info_corba,const CaptiveFileInfoObject *file_info_captive,GnomeVFSSetFileInfoMask mask)
 {
        g_return_val_if_fail(file_info_corba!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
        g_return_val_if_fail(file_info_captive!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
@@ -107,22 +133,28 @@ GnomeVFSResult captive_sandbox_file_info_set_mask_captive_to_corba
        file_info_corba->permissions_valid=CORBA_FALSE;
        file_info_corba->size_valid=CORBA_FALSE;
        file_info_corba->block_count_valid=CORBA_FALSE;
-       file_info_corba->atime=0;
-       file_info_corba->mtime=0;
-       file_info_corba->ctime=0;
+       file_info_corba->atime     =0;
+       file_info_corba->atime_nsec=0;
+       file_info_corba->mtime     =0;
+       file_info_corba->mtime_nsec=0;
+       file_info_corba->ctime     =0;
+       file_info_corba->ctime_nsec=0;
        file_info_corba->flags_valid=CORBA_FALSE;
 
        if (!(mask&GNOME_VFS_SET_FILE_INFO_NAME))
                file_info_corba->name=CORBA_string_dup("");
        else
-               file_info_corba->name=CORBA_string_dup(file_info_captive->name);
+               file_info_corba->name=CORBA_string_dup(file_info_captive->p.name);
        if ((file_info_corba->permissions_valid=!!(mask&GNOME_VFS_SET_FILE_INFO_PERMISSIONS)))
-               file_info_corba->permissions=file_info_captive->permissions;
+               file_info_corba->permissions=file_info_captive->p.permissions;
        /* Not implemented by libcaptive: GNOME_VFS_SET_FILE_INFO_OWNER */
        if (mask&GNOME_VFS_SET_FILE_INFO_TIME) {
-               file_info_corba->atime=file_info_captive->atime;
-               file_info_corba->mtime=file_info_captive->mtime;
-               file_info_corba->ctime=file_info_captive->ctime;
+               file_info_corba->atime     =file_info_captive->p.atime;
+               file_info_corba->atime_nsec=file_info_captive->atime_nsec;
+               file_info_corba->mtime     =file_info_captive->p.mtime;
+               file_info_corba->mtime_nsec=file_info_captive->mtime_nsec;
+               file_info_corba->ctime     =file_info_captive->p.ctime;
+               file_info_corba->ctime_nsec=file_info_captive->ctime_nsec;
                }
 
        return GNOME_VFS_OK;