diff options
author | Darin Adler <darin@src.gnome.org> | 2000-11-06 17:46:01 +0000 |
---|---|---|
committer | Darin Adler <darin@src.gnome.org> | 2000-11-06 17:46:01 +0000 |
commit | 6261ea48137d5467c624efded0786b76f3d56115 (patch) | |
tree | 7b203cdb2b5dcd9e78b5453e7f520c1a66f1046d | |
parent | 1ca2c0d776bb554fa47801309f79327ab5c8129b (diff) | |
download | nautilus-6261ea48137d5467c624efded0786b76f3d56115.tar.gz |
Fixed bug 4504 (select "view as others" leads to core dump).
* libnautilus-extensions/nautilus-file.c:
(nautilus_file_get_directory_item_mime_types):
Change to return a copy of the MIME type list as designed.
* libnautilus-extensions/nautilus-mime-actions.c:
(nautilus_mime_get_default_component_for_file_internal),
(nautilus_mime_get_short_list_components_for_file):
Change the callers that don't free the MIME type list so that they
now do.
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | libnautilus-extensions/nautilus-file.c | 5 | ||||
-rw-r--r-- | libnautilus-extensions/nautilus-mime-actions.c | 13 | ||||
-rw-r--r-- | libnautilus-private/nautilus-file.c | 5 | ||||
-rw-r--r-- | libnautilus-private/nautilus-mime-actions.c | 13 |
5 files changed, 32 insertions, 18 deletions
@@ -1,3 +1,17 @@ +2000-11-06 Darin Adler <darin@eazel.com> + + Fixed bug 4504 (select "view as others" leads to core dump). + + * libnautilus-extensions/nautilus-file.c: + (nautilus_file_get_directory_item_mime_types): + Change to return a copy of the MIME type list as designed. + + * libnautilus-extensions/nautilus-mime-actions.c: + (nautilus_mime_get_default_component_for_file_internal), + (nautilus_mime_get_short_list_components_for_file): + Change the callers that don't free the MIME type list so that they + now do. + 2000-11-06 Ramiro Estrugo <ramiro@eazel.com> * nautilus-clean.sh: diff --git a/libnautilus-extensions/nautilus-file.c b/libnautilus-extensions/nautilus-file.c index a548eae24..872df332d 100644 --- a/libnautilus-extensions/nautilus-file.c +++ b/libnautilus-extensions/nautilus-file.c @@ -2092,12 +2092,13 @@ nautilus_file_get_directory_item_mime_types (NautilusFile *file, g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE); g_return_val_if_fail (mime_list != NULL, FALSE); - if (! nautilus_file_is_directory (file) || ! file->details->got_mime_list) { + if (!nautilus_file_is_directory (file) + || !file->details->got_mime_list) { *mime_list = NULL; return FALSE; } - *mime_list = file->details->mime_list; + *mime_list = nautilus_g_str_list_copy (file->details->mime_list); return TRUE; } diff --git a/libnautilus-extensions/nautilus-mime-actions.c b/libnautilus-extensions/nautilus-mime-actions.c index cea9b08ea..9c9e3723f 100644 --- a/libnautilus-extensions/nautilus-mime-actions.c +++ b/libnautilus-extensions/nautilus-mime-actions.c @@ -418,7 +418,7 @@ nautilus_mime_get_default_component_for_file_internal (NautilusFile *file, if (mime_default != NULL) { default_component_string = g_strdup (mime_default->iid); if (default_component_string != NULL) { - /* Default component chosen based only on type. */ + /* Default component chosen based only on type. */ used_user_chosen_info = FALSE; } CORBA_free (mime_default); @@ -440,7 +440,6 @@ nautilus_mime_get_default_component_for_file_internal (NautilusFile *file, respect the setting regardless of content type requirements */ if (metadata_default) { extra_requirements = g_strconcat ("iid == '", default_component_string, "'", NULL); - info_list = nautilus_do_component_query (mime_type, uri_scheme, item_mime_types, TRUE, explicit_iids, sort_conditions, extra_requirements, &ev); g_free (extra_requirements); @@ -451,19 +450,18 @@ nautilus_mime_get_default_component_for_file_internal (NautilusFile *file, explicit_iids, sort_conditions, NULL, &ev); } - if (ev._major == CORBA_NO_EXCEPTION && info_list != NULL) { + if (info_list != NULL) { server = OAF_ServerInfo_duplicate (info_list->data); gnome_vfs_mime_component_list_free (info_list); - + if (default_component_string != NULL && strcmp (server->iid, default_component_string) == 0) { used_user_chosen_info = TRUE; /* Default component chosen based on user-stored . */ } } else { - g_assert (info_list == NULL); /* or else we are leaking it */ server = NULL; - return NULL; } - + + nautilus_g_list_free_deep (item_mime_types); g_strfreev (sort_conditions); g_free (uri_scheme); @@ -654,6 +652,7 @@ nautilus_mime_get_short_list_components_for_file (NautilusFile *file) g_free (extra_requirements); } + nautilus_g_list_free_deep (item_mime_types); gnome_vfs_mime_component_list_free (servers); g_list_free (iids); g_free (uri_scheme); diff --git a/libnautilus-private/nautilus-file.c b/libnautilus-private/nautilus-file.c index a548eae24..872df332d 100644 --- a/libnautilus-private/nautilus-file.c +++ b/libnautilus-private/nautilus-file.c @@ -2092,12 +2092,13 @@ nautilus_file_get_directory_item_mime_types (NautilusFile *file, g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE); g_return_val_if_fail (mime_list != NULL, FALSE); - if (! nautilus_file_is_directory (file) || ! file->details->got_mime_list) { + if (!nautilus_file_is_directory (file) + || !file->details->got_mime_list) { *mime_list = NULL; return FALSE; } - *mime_list = file->details->mime_list; + *mime_list = nautilus_g_str_list_copy (file->details->mime_list); return TRUE; } diff --git a/libnautilus-private/nautilus-mime-actions.c b/libnautilus-private/nautilus-mime-actions.c index cea9b08ea..9c9e3723f 100644 --- a/libnautilus-private/nautilus-mime-actions.c +++ b/libnautilus-private/nautilus-mime-actions.c @@ -418,7 +418,7 @@ nautilus_mime_get_default_component_for_file_internal (NautilusFile *file, if (mime_default != NULL) { default_component_string = g_strdup (mime_default->iid); if (default_component_string != NULL) { - /* Default component chosen based only on type. */ + /* Default component chosen based only on type. */ used_user_chosen_info = FALSE; } CORBA_free (mime_default); @@ -440,7 +440,6 @@ nautilus_mime_get_default_component_for_file_internal (NautilusFile *file, respect the setting regardless of content type requirements */ if (metadata_default) { extra_requirements = g_strconcat ("iid == '", default_component_string, "'", NULL); - info_list = nautilus_do_component_query (mime_type, uri_scheme, item_mime_types, TRUE, explicit_iids, sort_conditions, extra_requirements, &ev); g_free (extra_requirements); @@ -451,19 +450,18 @@ nautilus_mime_get_default_component_for_file_internal (NautilusFile *file, explicit_iids, sort_conditions, NULL, &ev); } - if (ev._major == CORBA_NO_EXCEPTION && info_list != NULL) { + if (info_list != NULL) { server = OAF_ServerInfo_duplicate (info_list->data); gnome_vfs_mime_component_list_free (info_list); - + if (default_component_string != NULL && strcmp (server->iid, default_component_string) == 0) { used_user_chosen_info = TRUE; /* Default component chosen based on user-stored . */ } } else { - g_assert (info_list == NULL); /* or else we are leaking it */ server = NULL; - return NULL; } - + + nautilus_g_list_free_deep (item_mime_types); g_strfreev (sort_conditions); g_free (uri_scheme); @@ -654,6 +652,7 @@ nautilus_mime_get_short_list_components_for_file (NautilusFile *file) g_free (extra_requirements); } + nautilus_g_list_free_deep (item_mime_types); gnome_vfs_mime_component_list_free (servers); g_list_free (iids); g_free (uri_scheme); |