diff --git a/ChangeLog b/ChangeLog index 172402f75..cefc07d16 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2006-03-27 Mike Kestner + + * gnomevfs/MimeType.cs : remove string from all pinvoke sigs. now + adheres to the const/non-const conventions specified in the vfs + headers. Fixes #77534. + 2006-03-27 Mike Kestner * glib/ListBase.cs : deal with ownership of Opaque elements. diff --git a/gnomevfs/MimeType.cs b/gnomevfs/MimeType.cs index cae755ef5..65059cfa1 100644 --- a/gnomevfs/MimeType.cs +++ b/gnomevfs/MimeType.cs @@ -27,100 +27,131 @@ namespace Gnome.Vfs { private string mimetype; [DllImport ("gnomevfs-2")] - static extern string gnome_vfs_get_mime_type (string uri); + static extern IntPtr gnome_vfs_get_mime_type (IntPtr uri); public MimeType (Uri uri) { - mimetype = gnome_vfs_get_mime_type (uri.ToString ()); + IntPtr uri_native = GLib.Marshaller.StringToPtrGStrdup (uri.ToString ()); + mimetype = GLib.Marshaller.PtrToStringGFree (gnome_vfs_get_mime_type (uri_native)); + GLib.Marshaller.Free (uri_native); } [DllImport ("gnomevfs-2")] - static extern bool gnome_vfs_mime_type_is_known (string mime_type); + static extern bool gnome_vfs_mime_type_is_known (IntPtr mime_type); public MimeType (string mimetype) { - if (!gnome_vfs_mime_type_is_known (mimetype)) + IntPtr mimetype_native = GLib.Marshaller.StringToPtrGStrdup (mimetype); + if (!gnome_vfs_mime_type_is_known (mimetype_native)) throw new ArgumentException ("Unknown mimetype"); this.mimetype = mimetype; + GLib.Marshaller.Free (mimetype_native); } [DllImport ("gnomevfs-2")] - static extern string gnome_vfs_get_mime_type_for_data (ref byte data, int size); + static extern IntPtr gnome_vfs_get_mime_type_for_data (ref byte data, int size); public MimeType (byte[] buffer, int size) { - mimetype = gnome_vfs_get_mime_type_for_data (ref buffer[0], size); + mimetype = GLib.Marshaller.Utf8PtrToString (gnome_vfs_get_mime_type_for_data (ref buffer[0], size)); } [DllImport ("gnomevfs-2")] - static extern MimeActionType gnome_vfs_mime_get_default_action_type (string mime_type); + static extern MimeActionType gnome_vfs_mime_get_default_action_type (IntPtr mime_type); [DllImport ("gnomevfs-2")] - static extern Result gnome_vfs_mime_set_default_action_type (string mime_type, MimeActionType action_type); + static extern Result gnome_vfs_mime_set_default_action_type (IntPtr mime_type, MimeActionType action_type); public MimeActionType DefaultActionType { get { - return gnome_vfs_mime_get_default_action_type (mimetype); + IntPtr mimetype_native = GLib.Marshaller.StringToPtrGStrdup (mimetype); + MimeActionType result = gnome_vfs_mime_get_default_action_type (mimetype_native); + GLib.Marshaller.Free (mimetype_native); + return result; } set { - Result result = gnome_vfs_mime_set_default_action_type (mimetype, value); + IntPtr mimetype_native = GLib.Marshaller.StringToPtrGStrdup (mimetype); + Result result = gnome_vfs_mime_set_default_action_type (mimetype_native, value); + GLib.Marshaller.Free (mimetype_native); Vfs.ThrowException (result); } } [DllImport ("gnomevfs-2")] - static extern MimeAction gnome_vfs_mime_get_default_action (string mime_type); + static extern MimeAction gnome_vfs_mime_get_default_action (IntPtr mime_type); public MimeAction DefaultAction { get { - return gnome_vfs_mime_get_default_action (mimetype); + IntPtr mimetype_native = GLib.Marshaller.StringToPtrGStrdup (mimetype); + MimeAction result = gnome_vfs_mime_get_default_action (mimetype_native); + GLib.Marshaller.Free (mimetype_native); + return result; } } [DllImport ("gnomevfs-2")] - static extern string gnome_vfs_mime_get_description (string mime_type); + static extern IntPtr gnome_vfs_mime_get_description (IntPtr mime_type); [DllImport ("gnomevfs-2")] - static extern Result gnome_vfs_mime_set_description (string mime_type, string description); + static extern Result gnome_vfs_mime_set_description (IntPtr mime_type, IntPtr description); public string Description { get { - return gnome_vfs_mime_get_description (mimetype); + IntPtr mimetype_native = GLib.Marshaller.StringToPtrGStrdup (mimetype); + string result = GLib.Marshaller.Utf8PtrToString (gnome_vfs_mime_get_description (mimetype_native)); + GLib.Marshaller.Free (mimetype_native); + return result; } set { - Result result = gnome_vfs_mime_set_description (mimetype, value); + IntPtr mimetype_native = GLib.Marshaller.StringToPtrGStrdup (mimetype); + IntPtr desc_native = GLib.Marshaller.StringToPtrGStrdup (value); + Result result = gnome_vfs_mime_set_description (mimetype_native, desc_native); + GLib.Marshaller.Free (mimetype_native); + GLib.Marshaller.Free (desc_native); Vfs.ThrowException (result); } } [DllImport ("gnomevfs-2")] - static extern string gnome_vfs_mime_get_icon (string mime_type); + static extern IntPtr gnome_vfs_mime_get_icon (IntPtr mime_type); [DllImport ("gnomevfs-2")] - static extern Result gnome_vfs_mime_set_icon (string mime_type, string filename); + static extern Result gnome_vfs_mime_set_icon (IntPtr mime_type, IntPtr filename); public string Icon { get { - return gnome_vfs_mime_get_icon (mimetype); + IntPtr mimetype_native = GLib.Marshaller.StringToPtrGStrdup (mimetype); + string result = GLib.Marshaller.Utf8PtrToString (gnome_vfs_mime_get_icon (mimetype_native)); + GLib.Marshaller.Free (mimetype_native); + return result; } set { - Result result = gnome_vfs_mime_set_icon (mimetype, value); + IntPtr mimetype_native = GLib.Marshaller.StringToPtrGStrdup (mimetype); + IntPtr icon_native = GLib.Marshaller.StringToPtrGStrdup (value); + Result result = gnome_vfs_mime_set_icon (mimetype_native, icon_native); + GLib.Marshaller.Free (mimetype_native); + GLib.Marshaller.Free (icon_native); Vfs.ThrowException (result); } } [DllImport ("gnomevfs-2")] - static extern bool gnome_vfs_mime_can_be_executable (string mime_type); + static extern bool gnome_vfs_mime_can_be_executable (IntPtr mime_type); [DllImport ("gnomevfs-2")] - static extern Result gnome_vfs_mime_set_can_be_executable (string mime_type, bool value); + static extern Result gnome_vfs_mime_set_can_be_executable (IntPtr mime_type, bool value); public bool CanBeExecutable { get { - return gnome_vfs_mime_can_be_executable (mimetype); + IntPtr mimetype_native = GLib.Marshaller.StringToPtrGStrdup (mimetype); + bool result = gnome_vfs_mime_can_be_executable (mimetype_native); + GLib.Marshaller.Free (mimetype_native); + return result; } set { - Result result = gnome_vfs_mime_set_can_be_executable (mimetype, value); + IntPtr mimetype_native = GLib.Marshaller.StringToPtrGStrdup (mimetype); + Result result = gnome_vfs_mime_set_can_be_executable (mimetype_native, value); + GLib.Marshaller.Free (mimetype_native); Vfs.ThrowException (result); } } @@ -138,7 +169,10 @@ namespace Gnome.Vfs { public static string GetMimeTypeForUri (string uri) { - return gnome_vfs_get_mime_type (uri); + IntPtr uri_native = GLib.Marshaller.StringToPtrGStrdup (uri.ToString ()); + string mimetype = GLib.Marshaller.PtrToStringGFree (gnome_vfs_get_mime_type (uri_native)); + GLib.Marshaller.Free (uri_native); + return mimetype; } } }