migrate from gnome-vfs to gio, as gnome-vfs is obsolete. Signed-off-by: Zhai Edwin Upstream-Status: Pending Index: git/src/main.c =================================================================== --- git.orig/src/main.c 2011-06-21 10:35:31.000000000 +0800 +++ git/src/main.c 2011-06-21 10:44:12.000000000 +0800 @@ -44,7 +44,6 @@ #include #include #include -#include #include #include @@ -1005,8 +1004,7 @@ /* Cleanup the old archive */ archive_full_cleanup (); - if (gnome_vfs_initialized()) - gnome_vfs_shutdown (); + g_type_init(); g_free(opui_config->host); g_free(opui_config->opcontrol_params); Index: git/src/archive.c =================================================================== --- git.orig/src/archive.c 2011-06-21 10:38:57.000000000 +0800 +++ git/src/archive.c 2011-06-21 10:54:16.000000000 +0800 @@ -45,7 +45,6 @@ #include #include #include -#include #include "oprofileui.h" #include "response.h" @@ -86,56 +85,113 @@ if (ret < 0) { - /* Use gnomevfs to copy the file as a fallback */ - GnomeVFSURI *src_uri, *dst_uri; - GnomeVFSResult res; - - src_uri = gnome_vfs_uri_new (gnome_vfs_get_uri_from_local_path(src)); - dst_uri = gnome_vfs_uri_new (gnome_vfs_get_uri_from_local_path(dest)); - res = gnome_vfs_xfer_uri (src_uri, dst_uri, - GNOME_VFS_XFER_DEFAULT | - GNOME_VFS_XFER_NEW_UNIQUE_DIRECTORY, - GNOME_VFS_XFER_ERROR_MODE_ABORT, - GNOME_VFS_XFER_OVERWRITE_MODE_REPLACE, - NULL, NULL); - if (res != GNOME_VFS_OK) + /* Use gio to copy the file as a fallback */ + GFile *src_file, *dst_file; + gboolean res; + GError *error = NULL; + + src_file = g_file_new_for_path (src); + dst_file = g_file_new_for_path (dest); + + res = g_file_copy(src_file, dst_file, + G_FILE_COPY_NOFOLLOW_SYMLINKS | + G_FILE_COPY_OVERWRITE, + NULL, + NULL, + NULL, + &error); + + if (!res && error) { - const gchar *err_string = gnome_vfs_result_to_string (res); + printf ("GIO: error %s (%s to %s)\n", error->message, src, dest); - printf ("GNOME-VFS: error %s (%s to %s)\n", err_string, src, dest); + g_error_free(error); } + + g_object_unref(src_file); + g_object_unref(dst_file); + + } +} + +#define IS_IO_ERROR(__error, KIND) (((__error)->domain == G_IO_ERROR && (__error)->code == G_IO_ERROR_ ## KIND)) + +static gboolean +remove_target_recursively(GFile *file) +{ + GFileEnumerator *enumerator; + GError *error = NULL; + GFile *child; + GFileInfo *info; + gboolean stop = FALSE; + + enumerator = g_file_enumerate_children(file, + G_FILE_ATTRIBUTE_STANDARD_NAME, + G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, + NULL, + &error); + + if (enumerator) + { + error = NULL; + + while ( (info = g_file_enumerator_next_file(enumerator, NULL, &error)) + != NULL ) { + + child = g_file_get_child(file, g_file_info_get_name(info)); + if (!remove_target_recursively(child)) + { + stop = TRUE; + break; + } + g_object_unref(child); + g_object_unref(info); + } + + g_object_unref(enumerator); + } + else if (IS_IO_ERROR(error, NOT_DIRECTORY)) + { + g_error_free(error); } + else + { + g_error_free(error); + stop = TRUE; + } + + if (stop) + return FALSE; + + error = NULL; + if (!g_file_delete(file, NULL, &error)) + { + char *path = g_file_get_path(file); + printf ("GIO: error %s when deleteing file %s.\n", error->message, path); + g_free(path); + + g_error_free(error); + return FALSE; + } + + return TRUE; + } /* Delete the directory specified by path */ static void archive_removedir(gchar *path) { - GnomeVFSResult res; - GnomeVFSURI *src_uri; - GList uri_list; + GFile *src_file; if (path == NULL) return; - gnome_vfs_init (); - - src_uri = gnome_vfs_uri_new (gnome_vfs_get_uri_from_local_path(path)); - - uri_list.data = src_uri; - uri_list.next = NULL; - uri_list.prev = NULL; + src_file = g_file_new_for_path (path); - res = gnome_vfs_xfer_delete_list (&uri_list, - GNOME_VFS_XFER_ERROR_MODE_ABORT, - GNOME_VFS_XFER_EMPTY_DIRECTORIES, - NULL, NULL); - - if (res != GNOME_VFS_OK) + if (! remove_target_recursively(src_file)) { - const gchar *err_string = gnome_vfs_result_to_string (res); - - printf ("GNOME-VFS: error %s\n", err_string); + printf ("GIO:remove %s failed", path); } } @@ -242,8 +298,6 @@ gchar **tmp; int i; - gnome_vfs_init (); - tmp = g_strsplit (reply->payload, "\n", 0); for (i=0; i < g_strv_length (tmp); i++) @@ -436,8 +490,6 @@ { gint counter; - gnome_vfs_init (); - downloaded_files = g_slist_append (downloaded_files, g_strdup("/var/lib/oprofile/.converted")); archive_save_window_show (g_slist_length (downloaded_files) + Index: git/configure.ac =================================================================== --- git.orig/configure.ac 2011-06-21 10:49:40.000000000 +0800 +++ git/configure.ac 2011-06-21 10:49:58.000000000 +0800 @@ -29,7 +29,7 @@ AM_CONDITIONAL(ENABLE_SERVER, test x$enable_server = xyes) AM_CONDITIONAL(ENABLE_CLIENT, test x$enable_client = xyes) -PKG_CHECK_MODULES(OPROFILEUI, [glib-2.0 libglade-2.0 gtk+-2.0 libxml-2.0 gnome-vfs-2.0 gconf-2.0]) +PKG_CHECK_MODULES(OPROFILEUI, [glib-2.0 libglade-2.0 gtk+-2.0 libxml-2.0 gconf-2.0]) AC_SUBST(OPROFILEUI_CFLAGS) AC_SUBST(OPROFILEUI_LIBS)