{
GnomeVFSResult errvfsresult;
CaptiveDirectoryObject *captive_directory_object;
+CaptiveFileInfoObject *captive_file_info_object;
g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
captive_directory_object=(CaptiveDirectoryObject *)method_handle;
g_return_val_if_fail(file_info!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
G_LOCK(libcaptive);
- errvfsresult=captive_directory_read(captive_directory_object,file_info);
+ errvfsresult=captive_directory_read(captive_directory_object,&captive_file_info_object);
G_UNLOCK(libcaptive);
+ if (GNOME_VFS_OK!=errvfsresult)
+ return errvfsresult;
- return errvfsresult;
+ gnome_vfs_file_info_copy(file_info,&captive_file_info_object->p);
+ G_LOCK(libcaptive);
+ g_object_unref(captive_file_info_object);
+ G_UNLOCK(libcaptive);
+
+ return GNOME_VFS_OK;
}
GnomeVFSResult errvfsresult;
CaptiveVfsObject *captive_vfs_object;
CaptiveFileObject *captive_file_object;
+CaptiveFileInfoObject *captive_file_info_object;
g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
g_return_val_if_fail(file_info!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
return errvfsresult;
G_LOCK(libcaptive);
- errvfsresult=captive_file_file_info_get(captive_file_object,file_info);
+ errvfsresult=captive_file_file_info_get(captive_file_object,&captive_file_info_object);
G_UNLOCK(libcaptive);
+ if (GNOME_VFS_OK!=errvfsresult)
+ goto fail_g_object_unref_captive_file_object;
+ gnome_vfs_file_info_copy(file_info,&captive_file_info_object->p);
+ G_LOCK(libcaptive);
+ g_object_unref(captive_file_info_object);
+ G_UNLOCK(libcaptive);
+
+fail_g_object_unref_captive_file_object:
G_LOCK(libcaptive);
g_object_unref(captive_file_object);
G_UNLOCK(libcaptive);
{
GnomeVFSResult errvfsresult;
CaptiveFileObject *captive_file_object;
+CaptiveFileInfoObject *captive_file_info_object;
g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
captive_file_object=(CaptiveFileObject *)method_handle;
/* handle 'options & GNOME_VFS_FILE_INFO_GET_MIME_TYPE'? */
G_LOCK(libcaptive);
- errvfsresult=captive_file_file_info_get(captive_file_object,file_info);
+ errvfsresult=captive_file_file_info_get(captive_file_object,&captive_file_info_object);
G_UNLOCK(libcaptive);
+ if (GNOME_VFS_OK!=errvfsresult)
+ return errvfsresult;
- return errvfsresult;
+ gnome_vfs_file_info_copy(file_info,&captive_file_info_object->p);
+ G_LOCK(libcaptive);
+ g_object_unref(captive_file_info_object);
+ G_UNLOCK(libcaptive);
+
+ return GNOME_VFS_OK;
}
GnomeVFSResult errvfsresult;
CaptiveVfsObject *captive_vfs_object;
CaptiveFileObject *captive_file_object;
+CaptiveFileInfoObject *captive_file_info_object;
g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
g_return_val_if_fail(info!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
return errvfsresult;
G_LOCK(libcaptive);
- errvfsresult=captive_file_file_info_set(captive_file_object,info,mask);
+ errvfsresult=captive_file_info_object_new(&captive_file_info_object);
+ G_UNLOCK(libcaptive);
+ if (errvfsresult!=GNOME_VFS_OK)
+ goto fail_g_object_unref_captive_file_object;
+
+ captive_file_info_object->p=*info;
+ /* Unsupported by GnomeVFS, see: http://bugzilla.gnome.org/show_bug.cgi?id=325427 */
+ captive_file_info_object->atime_nsec=0;
+ captive_file_info_object->mtime_nsec=0;
+ captive_file_info_object->ctime_nsec=0;
+
+ G_LOCK(libcaptive);
+ errvfsresult=captive_file_file_info_set(captive_file_object,captive_file_info_object,mask);
+ G_UNLOCK(libcaptive);
+
+ G_LOCK(libcaptive);
+ g_object_unref(captive_file_info_object);
G_UNLOCK(libcaptive);
+fail_g_object_unref_captive_file_object:
G_LOCK(libcaptive);
g_object_unref(captive_file_object);
G_UNLOCK(libcaptive);