- GnomeVFSFileInfo *folder_info;
- gchar *folder;
- folder = g_path_get_dirname (filename);
- folder_info = gnome_vfs_file_info_new ();
- gnome_vfs_get_file_info (folder, folder_info,
- GNOME_VFS_FILE_INFO_GET_ACCESS_RIGHTS);
- g_free (folder);
- if (!((folder_info->permissions & GNOME_VFS_PERM_ACCESS_WRITABLE) ||
- (folder_info->permissions & GNOME_VFS_PERM_USER_WRITE))) {
+ GnomeVFSFileInfo *folder_info = NULL;
+ GnomeVFSResult result = GNOME_VFS_OK;
+ GnomeVFSURI *uri = NULL;
+ GnomeVFSURI *folder_uri = NULL;
+
+ uri = gnome_vfs_uri_new (filename);
+ folder_uri = gnome_vfs_uri_get_parent (uri);
+
+ if (folder_uri != NULL) {
+ folder_info = gnome_vfs_file_info_new ();
+ result = gnome_vfs_get_file_info_uri (folder_uri, folder_info,
+ GNOME_VFS_FILE_INFO_GET_ACCESS_RIGHTS);
+ gnome_vfs_uri_unref (folder_uri);
+ }
+ gnome_vfs_uri_unref (uri);
+
+ if (folder_uri == NULL)
+ return FALSE;
+
+ if ((result != GNOME_VFS_OK) ||
+ (!((folder_info->permissions & GNOME_VFS_PERM_ACCESS_WRITABLE) ||
+ (folder_info->permissions & GNOME_VFS_PERM_USER_WRITE)))) {
+
+ gnome_vfs_file_info_unref (folder_info);