diff --git a/gio/gosxappinfo.h b/gio/gosxappinfo.h index 7beeaad16..793ce1fcd 100644 --- a/gio/gosxappinfo.h +++ b/gio/gosxappinfo.h @@ -43,7 +43,7 @@ GLIB_AVAILABLE_IN_2_52 GType g_osx_app_info_get_type (void) G_GNUC_CONST; GLIB_AVAILABLE_IN_2_52 -char * g_osx_app_info_get_filename (GOsxAppInfo *info); +const char *g_osx_app_info_get_filename (GOsxAppInfo *info); GLIB_AVAILABLE_IN_2_52 GList * g_osx_app_info_get_all_for_scheme (const gchar *scheme); diff --git a/gio/gosxappinfo.m b/gio/gosxappinfo.m index 849d63575..03c373778 100644 --- a/gio/gosxappinfo.m +++ b/gio/gosxappinfo.m @@ -168,6 +168,7 @@ get_bundle_string_value (NSBundle *bundle, static CFStringRef create_cfstring_from_cstr (const gchar *cstr) { + g_return_val_if_fail (cstr != NULL, NULL); return CFStringCreateWithCString (NULL, cstr, kCFStringEncodingUTF8); } @@ -226,8 +227,8 @@ url_escape_hostname (const char *url) } static CFURLRef -create_url_from_cstr (gchar *cstr, - gboolean is_file) +create_url_from_cstr (const gchar *cstr, + gboolean is_file) { gchar *puny_cstr; CFStringRef str; @@ -279,11 +280,17 @@ create_urlspec_for_appinfo (GOsxAppInfo *info, GList *uris, gboolean are_files) { - LSLaunchURLSpec *urlspec = g_new0 (LSLaunchURLSpec, 1); - gchar *app_cstr = g_osx_app_info_get_filename (info); + LSLaunchURLSpec *urlspec = NULL; + const gchar *app_cstr; + + g_return_val_if_fail (G_IS_OSX_APP_INFO (info), NULL); + + urlspec = g_new0 (LSLaunchURLSpec, 1); + app_cstr = g_osx_app_info_get_filename (info); + g_assert (app_cstr != NULL); /* Strip file:// from app url but ensure filesystem url */ - urlspec->appURL = create_url_from_cstr (app_cstr + 7, TRUE); + urlspec->appURL = create_url_from_cstr (app_cstr + strlen ("file://"), TRUE); urlspec->launchFlags = kLSLaunchDefaults; urlspec->itemURLs = create_url_list_from_glist (uris, are_files); @@ -402,7 +409,7 @@ g_osx_app_info_get_executable (GAppInfo *appinfo) return info->executable; } -char * +const char * g_osx_app_info_get_filename (GOsxAppInfo *info) { g_return_val_if_fail (info != NULL, NULL); @@ -431,7 +438,8 @@ g_osx_app_info_get_icon (GAppInfo *appinfo) if (!info->icon) { - gchar *icon_name, *app_uri, *icon_uri; + const gchar *app_uri; + gchar *icon_name, *icon_uri; GFile *file; icon_name = get_bundle_string_value (info->bundle, @"CFBundleIconFile"); @@ -439,7 +447,7 @@ g_osx_app_info_get_icon (GAppInfo *appinfo) return NULL; app_uri = g_osx_app_info_get_filename (info); - icon_uri = g_strconcat (app_uri + 7, "/Contents/Resources/", icon_name, + icon_uri = g_strconcat (app_uri + strlen ("file://"), "/Contents/Resources/", icon_name, g_str_has_suffix (icon_name, ".icns") ? NULL : ".icns", NULL); g_free (icon_name); @@ -459,9 +467,14 @@ g_osx_app_info_launch_internal (GAppInfo *appinfo, GError **error) { GOsxAppInfo *info = G_OSX_APP_INFO (appinfo); - LSLaunchURLSpec *urlspec = create_urlspec_for_appinfo (info, uris, are_files); + LSLaunchURLSpec *urlspec; gint ret, success = TRUE; + g_return_val_if_fail (G_IS_OSX_APP_INFO (appinfo), FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + urlspec = create_urlspec_for_appinfo (info, uris, are_files); + if ((ret = LSOpenFromURLSpec (urlspec, NULL))) { /* TODO: Better error codes */